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


11

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

  1. portコマンドを経由して起動されますsudo
  2. 私の.bashrcファイルは0077のumaskを指定しています。
  3. 古いバージョンのOS X(10.5以下)では、sudoはrootユーザー(0022)のumaskを使用していました。ただし、現在は0077のumaskを使用しいます。

とにかくsudo古い動作を使用することはありますか?私が使用する必要があるため今のところ、それは一種迷惑なのだsudoような単純なコマンドを実行するためにport installedport outdatedなど、

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

編集する

umaskはsudo のオプションを発見し/etc/sudoers、次の行を追加しました:

Defaults umask=0022

必要に応じて、しかし、これは、機能しませんでしたリアルで使用されるのumaskがsudoある労働組合このデフォルトマスクとユーザ・マスクの。sudoのumaskの動作をオーバーライドしてデフォルトを直接使用する(つまり、ユーザーとデフォルトのsudoマスクの結合ではない)ために、次のコードを追加できます。

Defaults umask_override

回答:


7

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

Defaults umask_override
Defaults umask=0022

1
コマンドごとにこれを機能させることはできますか?私は通常0022をumaskしたいのですが、単一の状況でumask 0006を呼び出しますが、上記はそれを無視します。
Michael

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 2009

次に、他の回答にリストされている関数の回避策を使用する必要があります。
ダレンホール

2

記録としては、現在のバージョンのsudoを新しいオプション 'umask_override'として使用すると、umaskがマージされないため、umaskも下げることができるはずです。悲しいことに、Mac OS X 10.6.6はこのバージョンのsudoをサポートしていないようです...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.