cd后的umask设置更改

时间:2012-08-16 21:45:37

标签: linux redhat umask

我有些奇怪的报道。在我新配置的RHEL5服务器上,我的shell设置为/ bin / bash我在.bashrc中将umask设置为002。

首次登录时,umask似乎正常工作:

$ touch a
$ ls -l a
-rw-rw-r-- etc.....

如果我创建另一个文件,它可以工作:

$ touch b
$ ls -l b
-rw-rw-r-- etc.....

但是......如果我更改目录(到任何目录),那么umask会被设置回022:

$ cd /var/www/whatever
$ touch c
$ ls -l c
-rw-r--r-- etc.....

完全奇怪。

有人见过这样的事吗?他们能想到要检查的东西吗?

为什么在cd'ing之后umask设置会发生变化?

谢谢,

-Charlie

2 个答案:

答案 0 :(得分:4)

感谢Barry Brown上面的评论 - 我正在解决这个问题(在OSX上,而不是Linux上),而且确实是rvm,这是我案件中的罪魁祸首。 检查你的.profile,.bash_profile等代码如下:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

注释掉,重新启动你的shell,这应该可以解决问题。 我不知道rvm是如此粗鲁和侵扰。最好只在需要时加载它而不是每个shell。

答案 1 :(得分:1)

简短的回答是:umask有四位数字并且不会随意更改,但/ etc / profile和恶魔默认会将其设置为022;

更新
我有点不知所措,忘了正确回答你的问题:

检查安装在您更改的文件夹上的分区(如果有),没有设置umask。 (只需输入 mount

答案很长:

man chmod §6: 数字模式是从一​​到四个八进制数字(0-7),通过加总得出 值为4,2和1的位。假定省略的数字为前导 零。第一个数字选择设置的用户ID(4)并设置组ID(2)和 限制删除或粘性(1)属性。第二个数字选择 拥有该文件的用户的权限:read(4),write(2)和execute (1);第三个选择文件组中其他用户的权限 相同的价值观;和第四个不在文件组中的其他用户 相同的价值观。

GNU coreutils 8.14 2011年10月


我记得几年前曾多次读过这个手册页,而且从来没有 在设置表格之前,要完全理解所有这些意味着什么。自从我 丢失了我的参考表,我将在这里重新创建它。因为我不喜欢象征性的 因为打字比较麻烦(例如chmod u + x),我会遗漏 任何提及它。


解释 chmod umask

可能的设定: 4:阅读 2:写 1:执行

每个数字的可能值,带有示例

domain  setuid  user    group   world
digit   1       2       3       4
values  0-7     0-7     0-7     0-7

花括号{}中的“可能的设置”值可能是 总计得出一个有效的权限位(数字)。

常见示例

0755 :用户可以输入文件夹并在该文件夹中写入(删除)文件         如果在文件上设置了此掩码,则用户可以执行该文件(即         ./filenme.bin)。最后两位数表示该组所在的组         文件属于世界(系统中的任何其他人),可以执行         该文件也是如此。应用于指挥它意味着该组和         世界可能会进入该目录。

0644 :用户可以读写文件,但不能执行。集团与世界         可能只读取文件。应用到文件夹,这个面具将防止         任何人进入该目录。

0600 :只有所有者可以使用此掩码读取和写入文件

0700 :只有文件夹的所有者可以输入,读取和写入a的内容         带有这个面具的文件夹。

0000 :用于“隐藏”文件或用于向文件发送信号(对自己)         或者不应该使用文件夹。

毫无意义的面具

0200 :如果用户可以写一个文件,那么他们也可以改变文件的umask。

危险面具

0666 :每个人都可以使用此面具读取,写入和删除文件

0777 :文件夹也是如此。如果二进制文件设置为 777 ,则任何人都可以放置         他们想要进入该文件并运行它,即使它在系统中 -         宽二进制目录,例如/ usr / bin。

4755 :超级用户(root)拥有的二进制文件将与超级用户一起运行         权限。这应该是明确的含义。也许,反对者 -         直观地用4755设置解释脚本将无效         因为/ bin / bash仍然运行脚本(例如bash脚本)。该         存储脚本的文本文件实际上不是可执行文件。

在所有上述示例中,为方便起见,可省略前导零。

将umask转换为chmod

要设置正确的umask,需要做的就是减去不需要的umask 来自`maximum mask'的权限,对于文件夹是0777,对于文件夹是666 文件。

强制shell创建默认权限为644的文件,将umask设置为 0022.对于文件夹,典型的(期望的)umask可能是755并且是通过 将umask设置为0022。

 0666  0777
-0022 -0022
 ____  ____
 0644  0755

相关链接: https://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts