web-dev-qa-db-ja.com

すべてのユーザーにumaskを設定する

CentOSボックスのrootを含むすべてのユーザーに対して、デフォルトのumaskを002に設定しようとしています。

this およびその他の回答によると、これは/etc/profileを編集することで実現できます。ただし、そのファイルの上部にあるコメントには次のように書かれています。

何をしているかわからない場合は、このファイルを変更することをお勧めしません。 /etc/profile.d/にcustom.shシェルスクリプトを作成して、環境にカスタムの変更を加えることをお勧めします。これにより、将来の更新でマージする必要がなくなるためです。

そこで、先に進んで次のファイルを作成しました。
/ etc/profile.d/myapp.sh
1行で:

umask 002

これで、rootとしてログインしたファイルを作成すると、ファイルは664のアクセス許可で作成されます。これは私が望んでいた方法です。しかし、私のApache mod_wsgiアプリケーションによって作成されたファイル、またはSudoで作成されたファイルは、デフォルトで644のアクセス許可に設定されています...

$ touch newfile(ルートとして):
結果= 664(機能)

$ Sudo touch newfile
結果= 644(機能しません)

Apache mod_wsgiアプリによって作成されたファイル:
結果= 644(機能しません)

PythonのRotatingFileHandlerによって作成されたファイル:
結果= 644(機能しません)

これが発生するのはなぜですか。また、ファイルの作成に関係なく、システム全体で664のファイルアクセス許可を確保するにはどうすればよいですか。

3
Yarin

profileは、シェルのスタートアップファイルです。設定umask 002 in profile.dは、ログインシェルからプロセスを開始するすべてのユーザーに設定します。

あなたの2つの例は異なる性質のものです。 Apacheの場合は、init.d httpサーバーを起動するスクリプト。

Sudoで始まるプロセスの場合、sudoersファイルでumaskオプションを使用できます。

5
Dmitri Chubarov

Umaskを実行する最良の方法は、ルートの/etc/bashrcファイルと他のユーザーの~/.bashrcファイルを編集することです。特定のユーザーのために~/.bashrcに入力したものはすべて、/ etc/profileに入力したものを上書きします。

したがって、Apacheが実行されているユーザーを見つけて、umaskを~./bashrcファイルに入れます。

これはユーザーに当てはまります。インタラクティブなユーザーログインが含まれており、ファイルを入手することで作業を開始できます。ログアウトおよびログインする必要はありません。

ただし、デーモンにumaskを設定する場合は、initスクリプトにアクセスし、/etc/rc.d/init.d/functionsファイルをソースした後にumaskをそこに配置する必要があります。その前にumaskを設定すると、機能しない場合があります。しかし、initスクリプトでumaskを設定しても機能しないデーモンを見たことがあります。簡単な例は、RHELのcobblerdです。そのためには、umaskを/etc/rc.d/init.d/functionsファイル自体に配置する必要があります。

しかし、ほとんどの場合、umask値を~/.bashrcファイルに入れることで機能します。

これが私がこれまでに機能させてきた方法ですが、他の意見が出てきたら、喜んで知っています。

3