システムユーザーの umask を設定するにはどうすればいいですか?

システムユーザーの umask を設定するにはどうすればいいですか?

umaskシステムユーザー ( で作成useradd --system username)に を設定することは可能ですか?

答え1

ユーザーの umask を設定する一般的な方法は 3 つあります。

  1. 始まるUMASK/etc/login.defs
  2. pam_umask.soPAM設定に追加する/etc/pam.d
  3. シェルの起動ファイルで設定します。例:/etc/profile

この点では、システム ユーザーと通常のユーザーの間に違いはありません。

しかし、カスタム umask を使用してデーモンを起動しようとしていると想定していますか?

問題は、上記のオプションはすべて、ユーザーがログインしたときに実行されることです。デーモンを実行している場合は、デーモンはログインしません。デーモンは init によって起動され、その後、root として実行されるか、setuid指定したシステム ユーザーとして実行するように呼び出されます。

主なオプションは次のとおりです。

  1. umask初期化スクリプトに入力します(grep umask /etc/init.d/*例として を実行してください)
  2. initを設定して、カスタムumaskでプログラムを起動します(システムd.exec アップスタート umask
  3. を使用する場合はstart-stop-daemonumask オプション
  4. プログラム自体を変更して、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

おそらく他のデーモンにも同様のメソッドがあり、特定のケースでは役立つかもしれません。

関連情報