管理员应该如何阅读root的邮件?

什么是Ubuntu管理员接收系统通知的方式,通常以发送到root账户的电子邮件形式出现?
此类通知的示例包括cron作业的输出,或降级RAID通知
在默认的Ubuntu 10.04安装中,我找不到任何除了存储在/var/mail/root之外的操作root邮件的方法。用户应该如何1.发现它并2.在其到达时阅读它?
我观察到,在warty上,安装程序将root: myusername添加到/etc/aliases中。所以在那个时候,如果安装系统的用户读取了本地邮件。所以似乎在某个地方发生了退化。但这仍然不是一个完整的解决方案,因为不能期望Ubuntu用户意识到他们有本地邮件并设置邮件客户端来读取它。

补充:根据目前的回复,只要服务器用户意识到问题存在,他应该能够应对。这很公平。但是考虑一下 J. Random 桌面用户,他不知道如何使用命令行,只知道点击邮箱图标来阅读邮件。他怎么能被通知系统想要告诉他一些事情呢?(如果无法避免,可以允许更有能力的用户进行一次干预。)


1我设法通过一些非常奇怪的技巧让KMail读取我的本地邮件,但自从升级到11.10后,我感到迷失了。 - Dirk Hartzer Waldeck
我最近为这个非常主题进行了一项长时间的教程,尽管与Thunderbird有关:请参阅http://askubuntu.com/questions/192572/how-read-local-email-in-thunderbird/199453#199453 - user76204
@Mik,如果在开头加上一些关于安装后缀的内容,这将是一个不错的回答。 - Gilles 'SO- stop being evil'
@Gilles 谢谢,虽然我可能需要缩短或删除其他问题的答案,以避免重复。 - user76204
@Mik 不,重新发布基本相同的答案是可以的(不完全相同,因为这里你需要先安装一个MTA)。这些问题并不是重复的:这里有一些答案在其他问题上行不通,反之亦然。有时候一个答案的90%可以被用于另一个问题,这是可以接受的。 - Gilles 'SO- stop being evil'
@Gilles 啊,我明白了,谢谢你澄清这个观点。 - user76204
6个回答

Gilles的评论中受到鼓舞,我改编并扩展了另一个答案:

(我正在运行Ubuntu 12.04.1 LTS,但一般的设置过程应适用于之前和之后的Ubuntu版本)


第一件要做的事情是安装一个邮件传输代理(MTA),以便将邮件中继到邮件用户代理(MUA),例如Thunderbird。这只是因为我们处理本地邮件并希望能够发送和接收它;对于普通的远程gmail类型帐户,只需要一个用户代理,如Thunderbird
我使用postfix,它本身是sendmail的替代品,有商业和开源版本。关于postfix的功能的更多信息,请参阅官方网站,如果出现任何问题,用户可能会发现邮件列表包含有用的信息。
因此,要安装该程序,请运行
sudo apt-get install postfix

您可以在安装时进行配置,或者拒绝该提议并稍后运行。
sudo dpkg-reconfigure postfix

创建重要的配置文件(/etc/postfix/main.cfg)。如果您曾手动编辑过此文件,虽然不一定推荐,但您必须在之后运行sudo newaliasessudo service postfix restart来应用更改。 Postfix的设置相当简单,尽管您可能有一些特定的设置需要应用。在下面的第一个屏幕中,您必须选择邮件的本地选项:

enter image description here

然后在下一个屏幕上选择您的“邮件名称”;通常与/etc/hostname相同。对于接下来的大多数屏幕,您可以接受默认设置。

enter image description here

当提到/etc/aliasesRoot和Postmaster收件人(如上所述)时,您可以填写您的用户名,但请确保通过阅读本教程的下一节来检查您的别名文件是否正确。
首先,正如在此讨论中建议的那样,如果设置正确,您的/etc/aliases应该是这样的:
postmaster:    root
root:   mike 

如果不是的话,请用sudo nano /etc/aliases进行编辑,然后运行sudo newaliasessudo service postfix restart以更新配置。Postfix的别名功能允许邮件重定向,所以对于本教程的其余部分来说,这个设置非常重要。
正如在上述链接中提到的那样,您需要创建一个包含您的用户名和localhost的.forward文件:例如mike@localhost,以便将root的邮件转发给您。要执行此操作,请输入以下命令:
sudo touch /root/.forward

然后运行
sudo nano /root/.forward

在文件中添加并保存你的用户,例如mike@localhost
此外,我发现有必要将你的用户添加到邮件组中,以便Thunderbird可以访问邮件文件。
sudo adduser $USER mail

然后注销并重新登录以使更改生效。无需像某些文章可能建议的那样进行任何文件的chown或chmod操作,将用户添加到邮件组是更好的做法,并避免直接更改根文件系统的权限。
现在来配置 Thunderbird。转到“编辑”>“账户设置”>“账户操作”>“添加其他账户”,选择“Unix spoolmail”并在下一页中将用户名放入第一个框,并在第二个框中放置“yourusername@localhost”。

enter image description here enter image description here

现在,转到帐户设置中的新帐户,并选择服务器设置,将本地目录设置为/var/mail/var/mail/username(如果已设置),如下图所示。

enter image description here

根据本文中的指示,如果您想通过向root@localhost发送邮件并在Thunderbird中单击获取邮件来测试帐户,则需要配置smtp服务器,因为root的邮件正在重定向到youruser@localhost
转到帐户设置>传出服务器,并选择添加新服务器。设置应如下截图所示:

enter image description here

现在,最后通过给root@localhost发送一封邮件,并在几秒钟后点击获取邮件按钮来测试您的账户。您应该会看到一封如下的电子邮件:

enter image description here

一些程序或日志需要进行配置,以便将邮件发送到 root,但您可以根据需求来决定。本文应该对您有所帮助,因为设置 Thunderbird 来接收本地邮件并不总是那么直观。

适用于17.04版本,我没有修改过群组。 - Artyom
这篇文章中提到的链接(http://linux.eaton.net.nz/?p=108)已经失效了。你有新的链接吗? - Chelmite
Thunderbird的Unix Mailspool选项已被移除 =( https://bugzilla.mozilla.org/show_bug.cgi?id=1625741 。解决方法:sudo apt install mailutils-pop3d,重新启动您的系统,并添加一个普通的邮件账户user@localhost,使用您的登录密码。也可能可以使用mailutils-imap4d(未经测试)。 - Madacol

如果这是一个服务器,我强烈建议您将root别名设置为真实的电子邮件地址,这样您的管理员就能收到您的电子邮件。 只需简单地添加即可。
# Person who should get root's mail
root:   all_administrators@mydomain.com

将/etc/aliases的末尾添加以下内容:
或者,您可以将邮件配置为别名为您的本地用户名,然后当您登录时会收到消息“您有新邮件”,您可以使用mail命令检查或在服务器上安装pine/mutt/alpine等类似软件来查看。

1谢谢,对于一个服务器管理员来说,这已经是一个足够好的解释了。但是我该如何向那些绝对不会使用命令行的普通桌面用户解释呢?他们只想知道自己的硬盘是否出现故障。 - Gilles 'SO- stop being evil'
1你的问题是:“Ubuntu系统管理员接收系统通知的方式是什么...”。但无论如何,对于桌面用户,他们可以使用gnome-system-log来查看日志(它已经作为gnome-utils软件包的默认安装在Ubuntu桌面上),或者将“root:username”添加到/etc/aliases的末尾以监视系统消息。我同意这是一个弱化的解决方案,也许应该提出一个错误报告,以便将此功能重新添加到默认的Ubuntu安装中,因为没有GUI方式可以实现这一点。 - Richard Holloway
服务器管理员的别名是最好的。你也可以使用sudo su -然后使用CLI客户端。但是,如果你真的在管理一个盒子,最好创建别名。普通用户不需要看到这封邮件。他们有其他方式接收通知消息。如果他们想要,他们可以创建别名。默认情况下关闭这个功能是完全合理的。 - coteyr
一旦您设置了别名,是否有办法将所有已存在的邮件转发? - John
似乎没有/etc/aliases文件。需要运行邮件服务器才能生成它吗? - Thufir
@Thufir:你可以自己创建一个,只包含答案中的那些行。你可能需要运行sudo newaliases来使更改生效。 - MestreLion

我个人使用一个叫做nullmailer的邮件代理。它充当邮件代理,将发送给root的所有邮件转发到您选择的邮件地址。
您需要在/etc/nullmailer的配置文件中设置其设置。基本上:提供您的邮件提供商的地址和凭据,以及您想要接收root电子邮件的地址。
您可以使用以下命令进行安装。
sudo apt-get install nullmailer

你可以在这里获取有关其设置的更多信息: http://jviz.research.iat.sfu.ca/wiki/index.php?title=HOWTO_Setup_Nullmailer

+1 谢谢你提供的链接(以及其中体现的微小MTA概念)。 - msw

目前没有通知用户存在根本地邮箱,因为 user != root 如果您需要检查邮箱,可以键入以下命令:sudo mail 以 root 身份启动邮件应用程序。

您也可以作为 root 在该服务器上登录。要解锁 root 密码,只需键入:sudo passwd 并为 root 输入新密码。


1在使用10.04版本的测试用户中,无论是默认的基于Gnome的界面,还是默认的基于KDE的界面,或者是默认的基于LXDE的界面,我都没有看到任何关于/var/mail/$USER目录中是否有新消息的通知。 - Gilles 'SO- stop being evil'

在您的会话中使用任何邮件兼容客户端(如Thunderbird)

您可以轻松地使用POP3 / IMAP协议公开您的本地邮件

  1. 将根邮件重定向到您的用户

    sudo echo "root: $USER" > /etc/aliases # $USER 是我的用户名
    
  2. 使用mailutils将本地邮件公开为POP3或IMAP

    sudo apt install mailutils-pop3d  # POP3
    

    或者

    sudo apt install mailutils-imap4d # IMAP
    
  3. 重新启动系统

  4. 将其添加到您的邮件客户端

在Thunderbird中,您只需输入user@localhost和您的用户登录密码。

一个替代方案 - 我将所有的根邮件存档到一些文件中,然后删除原始邮件。
我使用cron定时运行一个脚本(这是关键部分) -
#!/bin/bash
if `/usr/bin/mail -e`; then
   /usr/bin/mail --print 2>&1 > /tmp/email_${date +"%Y-%m-%d_%H.%M").log
   echo ‘d *’ | /usr/bin/mail -N > /dev/null
fi
exit 0

这样可以保持整洁,我可以随时关注。 我可以将每日邮件文件发送到外部电子邮件地址等等...