我正在学习UNIX文件权限,我看到在我的Ubuntu系统上,/var/mail设置了setgid位。为什么会这样呢?
$ ls /var/mail/ -dl
drwxrwsr-x 2 root mail 4096 Feb 23 05:57 /var/mail/我正在读的这本书说:
当需要共享大量文件的用户组时,Setgid非常有用。让它们使用setgid属性从公共目录中工作,意味着将自动为新文件设置正确的组所有权,即使组中的人员不共享相同的主组。
这种描述听起来对/var/mail没有任何帮助,因为用户不会直接操作该目录。
在/var/mail中创建的文件以组所有者"mail“结束,但这不是已经发生了吗?只有“邮件”才能在目录(和根目录)中创建新文件。
我能想到的唯一有用的情况是,系统管理员在sudo touch /var/mail/<user>中添加了一个新的邮件帐户。该文件仍然有"mail“组所有者。
发布于 2023-02-26 13:27:26
本地电子邮件不是由一个服务处理,而是由多个服务处理。除了实际的邮件传输代理(MTA :通常是postfix、exim、sendmail或类似的)之外,还有邮件过滤/后处理实用程序(如旧的procmail)、支持远程访问用户邮箱的服务(各种POP和IMAP服务)、邮件列表管理实用程序等。
从历史上看,这类服务过去是以root用户的身份运行的,因为它们需要能够访问每个用户的邮箱,而且邮箱只能由其所有者访问。但很快就发现,让电子邮件系统作为根用户运行是一大块适合利用的代码。发现并修复了许多漏洞,但最终认识到将邮件系统作为根用户运行是个坏主意。解决方案是创建组mail,并将需要将邮件传递到用户邮箱的电子邮件服务的所有组件设置为该组。
但是到了那个时候,邮件相关工具的数量已经很大了,以至于不可能保证一个完美的改变。因此,作为保险,用户收件箱的父目录/var/mail/也被设置为setgid邮件,以确保所有向用户收件箱发送邮件的软件都会自动创建任何具有正确组的新收件箱。剩下的任务是修补或配置所有邮件传递程序,以便对用户的收件箱使用正确的umask :当邮件系统以根用户身份运行时,他们可以使用umask 077 (用于权限-rw-------),但对于有效的组mail,需要umask 007 (用于权限-rw-rw----)。但这是对预先存在的要求的调整,而不是增加新的责任来强制执行正确的组,所以这是一个简单的改变。
(当然,添加正确组的强制执行肯定是个好主意--但让/var/mail setgid mail使代码更改成为可选的和不那么紧急的。)
是的,大多数在/var/mail/中将邮件发送到用户收件箱的程序会自动为用户创建一个邮箱文件,如果该文件不存在,那么在用户收到第一封电子邮件之前,让用户没有邮箱文件是完全有效的。
概括地说:拥有/var/mail/ setgid mail是针对配置不当的邮件传递程序的一份保险单,也是摆脱黑暗时代的历史遗留物,当时电子邮件服务一直以root的形式全面运行。
发布于 2023-02-26 04:03:23
在/var/mail/中,单个文件都是发送用户的uid。这允许任何用户在没有权限的目录中写入或读取自己的uid文件。如果不是setgid,用户就无法删除自己的邮件。
而且用户也会阅读和删除他们自己的邮件文件-- vide。
https://unix.stackexchange.com/questions/736929
复制相似问题