![我如何告诉 sudo 用 umask 0022 写入文件?](https://linux22.com/image/1224111/%E6%88%91%E5%A6%82%E4%BD%95%E5%91%8A%E8%AF%89%20sudo%20%E7%94%A8%20umask%200022%20%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我最近升级到了 Snow Leopard。我注意到 MacPorts 写入的某些文件安装时权限错误——它们的 umask 为 0077。我想我已经缩小了问题的范围:
- 该
port
命令通过 调用sudo
。 - 我的
.bashrc
文件指定了 umask 为 0077。 - 在旧版本的 OS X(10.5 及以下)中,sudo 使用根用户(原为 0022);但是,现在它使用我的umask 为 0077。
有没有办法sudo
使用旧的行为?目前,这有点烦人,因为我必须使用sudo
来运行简单的命令,例如port installed
、port outdated
等。
(这个问题在这篇文章中有更详细的描述MacPorts 票。
编辑
我发现了umask
sudo 选项,并/etc/sudoers
添加了以下行:
Defaults umask=0022
然而,这并没有发挥预期的作用,因为真实的sudo
umask使用的联盟用此默认掩码替换用户掩码。为了覆盖sudo
umask 的行为并直接使用默认值(即,不是联盟和默认 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...