如何告诉sudo编写umask为0022的文件?


11

我最近升级到了雪豹。我注意到有些MacPorts编写的文件安装时权限错误-它们的umask值为0077。我想我已经缩小了问题的范围:

  1. port命令通过调用sudo
  2. 我的.bashrc文件将umask指定为0077。
  3. 在OS X的较早版本(10.5及更低版本)上,sudo使用了用户的umask (其值为0022);但是,现在它使用的0077 umask。

反正有sudo使用旧行为吗?现在,它是一种烦人,因为我必须使用sudo运行像简单的命令port installedport outdated等等。

(此MacPorts票证中对此问题进行了详细描述。)

编辑

我发现了umasksudo 的选项,并在其中/etc/sudoers添加了以下行:

Defaults umask=0022

然而,这并没有起到期望的,因为实际所用的umask sudo工会与此默认掩码用户掩码的。为了重写的行为sudo的umask的,直接使用默认的(即不是工会的用户和默认sudo的面膜),可以添加以下内容:

Defaults umask_override

Answers:


7

Mac OS X 10.7(Lion)终于有了支持umask_override的sudo版本。记录下来,这对我有用:

Defaults umask_override
Defaults umask=0022

1
您可以按命令执行这项工作吗?我想正常地umask 0022,但随后在单个情况下调用umask 0006,但是上面忽略了这一点。
迈克尔

6

我最终在我的.bashrc配置脚本中添加了以下内容:

# Mimic old behavior of `sudo` on OS X Snow Leopard
sudo() {
    old=$(umask)
    umask 0022
    command sudo "$@"
    umask $old
}

3

怎么样:

sudo22() {
   local UMASK=`umask`;
   umask 22;
   sudo "$@";
   umask $UMASK
}

2

与您的.bashrc

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi

2
好主意!不幸的是,一项调查显示,Snow Leopard sudo并没有真正(重新)获取资源.bashrc,而是从调用sudo的用户那里继承了当前设置。
mipadi

然后,您必须使用其他答案中列出的功能解决方法。
达伦·霍尔

2

记录一下:sudo的当前版本作为新选项'umask_override',这应该防止umask合并,因此您也应该能够降低umask。可悲的是,Mac OS X 10.6.6似乎不支持此版本的sudo ...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.