umask
システムユーザー ( で作成useradd --system username
)に を設定することは可能ですか?
答え1
ユーザーの umask を設定する一般的な方法は 3 つあります。
- 始まる
UMASK
/etc/login.defs
pam_umask.so
PAM設定に追加する/etc/pam.d
- シェルの起動ファイルで設定します。例:
/etc/profile
この点では、システム ユーザーと通常のユーザーの間に違いはありません。
しかし、カスタム umask を使用してデーモンを起動しようとしていると想定していますか?
問題は、上記のオプションはすべて、ユーザーがログインしたときに実行されることです。デーモンを実行している場合は、デーモンはログインしません。デーモンは init によって起動され、その後、root として実行されるか、setuid
指定したシステム ユーザーとして実行するように呼び出されます。
主なオプションは次のとおりです。
umask
初期化スクリプトに入力します(grep umask /etc/init.d/*
例として を実行してください)- initを設定して、カスタムumaskでプログラムを起動します(システムd.exec アップスタート umask)
- を使用する場合は
start-stop-daemon
、umask オプション - プログラム自体を変更して、umask関数またはシステムコール
答え2
システム ユーザーは、パスワードの有効期限、ホーム ディレクトリ (システム ユーザーにはホーム ディレクトリがありません)、UID (システム ユーザーは通常、任意のしきい値を下回っています) の 3 つの点で「通常の」ユーザーと異なります。
一般的なケースでは、運が悪ければほぼ不可能です。PAM を使用して umask を設定することはできますが、PAM はこれら 3 つの違い以外のものに基づいて動作を選択します。
言い換えると、PAM で「システム」ユーザーと「非システム」ユーザーを区別することはできません。この場合、2 つのオプションが残ります。
PAM を使用して全員の umask を設定し (例: チェックイン
/etc/login.defs
)、次に でシステム以外のユーザーの umask を明示的に設定します/etc/bash.bashrc
(または同様の設定)。または、これを行うために独自の PAM モジュールを作成します。umask の設定は一般的な要求であるため、これは多くの人々に歓迎されると思います。
この回答は、あまり疑ってかかる必要はありません。この種のリクエストはよくあることなので、今ではもっと良い/適切な方法が存在するとしても驚きません。
答え3
@Mikel が示唆しているように、デーモンであるシステム アカウントを構成しようとしている場合は、デーモン自体を構成してみてください。
MacOS で _www アカウントの umask を設定する方法を調べていて、この質問にたどり着きました。上記の回答が示唆するようにこれは難しいですが、Apache サービスを (この場合は) ユーザー == デーモンとして構成することで解決できることが分かりました。
不思議なことに、起動スクリプト (通常は /etc/init.d/ にありますが、Mac では Library/LaunchDaemons/ にあります) が見つかりませんでした。しかし、次の助けがありました:http://krypted.com/mac-security/apache2-umasks/Apache には独自の環境スクリプトがあることを発見しました。
$ sudo vim /usr/sbin/envvars
umask 002
おそらく他のデーモンにも同様のメソッドがあり、特定のケースでは役立つかもしれません。