web-dev-qa-db-ja.com

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

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

14
sid_com

ユーザーのumaskを設定するには、通常3つの方法があります。

  1. UMASK/etc/login.defsに設定
  2. pam_umask.so/etc/pam.dのPAM構成に追加します
  3. シェルのスタートアップファイルに設定します。 /etc/profile

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

しかし、私はカスタムumaskでデーモンを起動しようとしていると思いますか?

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

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

  1. umaskをinitスクリプトに入れます(例としてgrep umask /etc/init.d/*を実行します)
  2. カスタムumaskでプログラムを開始するようにinitを構成します( systemd.execpstart umask
  3. start-stop-daemonを使用する場合は maskオプション を渡します
  4. mask 関数またはシステムコールを呼び出すようにプログラム自体を変更する
14
Mikel

システムユーザーは、「通常の」ユーザーとは3つの点で異なります。パスワードの有効期限、ホームディレクトリ(システムユーザーにはない)、およびUID(システムユーザーは通常、任意のしきい値を下回ります)。

一般的なケースでは、あなたはほとんど完全に運が悪いです。 PAMを使用してumaskを設定できますが、PAMはこれら3つの違い以外に基づいて動作を選択します。

つまり、PAMで「システム」ユーザーと「非システム」ユーザーを区別することはできません。これには2つのオプションがあります。

  • PAMを使用して全員のumaskを設定し(たとえば、/etc/login.defsでチェックイン)、システム以外のユーザーのumaskを/etc/bash.bashrc(または同様の)で明示的に設定します。

  • または、これを行うために独自のPAMモジュールを記述します。 umaskの設定は一般的な要求なので、これは多くの人に歓迎されると思います。

この答えは、たっぷりの塩でとってください。この種の要求はかなり一般的であり、今より良い/適切な方法が存在していても、私は驚かないでしょう。

2
Alexios

@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

おそらく他のデーモンにも同様の方法があり、特定の場合に役立つ場合があります。

1
scipilot