我刚开始使用莱尼斯(请不要认为我拼错了 Linux)。运行后,系统建议我设置umask
并/etc/login.defs
改为/etc/init.d/rc
默认027
的022
。
我想知道这会对文件权限产生什么影响。另外,为什么值存储在两个文件中?它们的工作原理不同吗?
如果需要更多信息,我使用 Ubuntu 12.10,我是该系统的唯一用户。
答案1
027 umask 设置意味着所有者组也可以读取新创建的文件。这使权限授予模型不再处理权限位,而是以组所有权为基础。
这将创建具有权限 750 的目录。
请查看这篇精彩的文章027 umask — 安全性和简单性之间的折衷。
答案2
模式掩码
去引用维基百科:
umask 实用程序用于控制文件创建模式掩码,它决定了新创建文件的文件权限位的初始值。
模式位
三个八进制数字分别对应用户、组和其他人的权限。通过将第三个数字从 2 更改为 7,其他权限已改变。
为了理解这些数字,把它们写成二进制形式,每个位对应一个读,写, 和执行。简而言之,2 对应于写;7 对应于读,写和执行。目录有点不同,读表示获取目录中的项目(文件和目录)列表,而执行意味着只要知道这些项目的名称就可以访问它们。
它是如何掩盖的
确切地说,模式掩码决定哪些权限被屏蔽,或者默认从新创建的文件中删除。因此,掩码值为 2 表示使文件不可写;7 表示删除所有权限。请注意,即使某些权限没有被模式掩码删除,它们也可能因为其他限制而不可用。例如,Linux 不允许创建具有执行权限的文件,因此默认情况下它们永远不会被执行。
合理的价值
因此,回答第一个问题:022 意味着写权限被屏蔽其他,因此默认情况下文件可以被读取,但不能被其他人写入或修改。尽管执行权限未被屏蔽,其他人将无法执行文件,因为上述限制;但是,他们可能能够访问带有目录的项目。将其更改为 027,然后读和执行也被屏蔽了。因此,新创建的文件和目录对其他人来说是私密的;新创建的目录中的项目将始终无法被其他人访问。
在许多情况下,只有一个人类用户。但是,通常有多个系统用户用于运行服务,例如nobody
。在某些罕见情况下,例如当以无人身份运行的程序受到攻击时,限制性权限可能会阻止其读取敏感数据。
然而,在多用户环境中,共享文件变得更加复杂:除了设置文件的权限外,至少执行需要在所有父目录上设置权限。
设置值
至于第二个问题,模式掩码只需设置一次。如果设置多次,则最后一个很重要。大多数发行版在中设置了默认模式掩码/etc/profile
,因此我建议编辑此文件。