web-dev-qa-db-ja.com

0022のumaskでファイルを書き込むようにSudoに指示するにはどうすればよいですか?

最近、SnowLeopardにアップグレードしました。 MacPortsによって書かれたいくつかのファイルが間違った許可でインストールされていることに気づきました-それらは0077のumaskで書かれています。私は問題を絞り込んだと思います:

  1. portコマンドは、Sudoを介して呼び出されます。
  2. 私の.bashrcファイルは0077のumaskを指定しています。
  3. 古いバージョンのOSX(10.5以下)では、Sudoはrootユーザー(0022)のumaskを使用していました。ただし、現在は0077のmyumaskを使用しています。

とにかくSudoに古い振る舞いを使わせることはありますか? port installedport outdatedなどの単純なコマンドを実行するには、Sudoを使用する必要があるため、今のところ、ちょっと面倒です。

(この問題については、この MacPortsチケット で詳しく説明しています。)

編集

Sudoのumaskオプションを発見し、/etc/sudoersに次の行を追加しました。

Defaults umask=0022

ただし、Sudoで使用されるrealumaskはであるため、これは期待どおりに機能しませんでした。このデフォルトマスクを使用したユーザーマスクのunionSudoのumaskの動作をオーバーライドし、デフォルトを直接使用するため(つまり、ユーザーのunionとデフォルトのSudoマスクではありません) )、以下を追加できます。

Defaults umask_override
11
mipadi

.bashrc構成スクリプトに次を追加することになりました。

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

Mac OS X 10.7(Lion)には、umask_overrideをサポートするバージョンのSudoがついに登場しました。記録のために、これは私のために働きます:

Defaults umask_override
Defaults umask=0022
7
Alec Thomas

どうですか:

Sudo22() {
   local UMASK=`umask`;
   umask 22;
   Sudo "$@";
   umask $UMASK
}
3
akira

あなたの.bashrcで

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

ちなみに、新しいオプション 'umask_override'としてのSudoの現在のバージョン。これにより、umaskがマージされなくなるため、umaskも下げることができるはずです。残念ながら、Mac OS X10.6.6はこのバージョンのSudoを搭載していないようです...

2
Gabriel