我如何告诉 sudo 用 umask 0022 写入文件?

我如何告诉 sudo 用 umask 0022 写入文件?

我最近升级到了 Snow Leopard。我注意到 MacPorts 写入的某些文件安装时权限错误——它们的 umask 为 0077。我想我已经缩小了问题的范围:

  1. port命令通过 调用sudo
  2. 我的.bashrc文件指定了 umask 为 0077。
  3. 在旧版本的 OS X(10.5 及以下)中,sudo 使用用户(原为 0022);但是,现在它使用我的umask 为 0077。

有没有办法sudo使用旧的行为?目前,这有点烦人,因为我必须使用sudo来运行简单的命令,例如port installedport outdated等。

(这个问题在这篇文章中有更详细的描述MacPorts 票

编辑

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

Defaults umask=0022

然而,这并没有发挥预期的作用,因为真实的sudoumask使用的联盟用此默认掩码替换用户掩码。为了覆盖sudoumask 的行为并直接使用默认值(即,不是联盟和默认 sudo 掩码),可以添加以下内容:

Defaults umask_override

答案1

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

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

答案2

Mac OS X 10.7 (Lion) 终于有了一个支持 umask_override 的 sudo 版本。顺便说一下,这对我来说是有效的:

Defaults umask_override
Defaults umask=0022

答案3

怎么样:

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

答案4

记录:当前版本的 sudo 有一个新的选项“umask_override”,它应该可以防止 umask 被合并,所以你也可以降低 umask。遗憾的是,Mac OS X 10.6.6 似乎不支持这个版本的 sudo...

相关内容