web-dev-qa-db-ja.com

ログインしないアカウントにumask設定をどのように適用しますか?

Ubuntu 11.04x64サーバーで、ログインせず、ホームディレクトリを持たないサービスアカウントを実行しています。これらのサービスアカウントは、サービスとして呼び出されるプロセスを実行する責任があります。

これらのサービスが新しいファイルを作成したとき、アクセス許可664(UMASK 002)で作成する必要があります。

これを反映するように/ etc/profileumask設定を編集しました。ユーザーアカウントがこの新しいumask設定を反映するファイルを作成するようになりましたが、アカウントを使用して手動でファイルを作成した場合、サービスアカウントは作成されません(Sudo -u serviceaccount touch newfile)。

助言がありますか?

5
nfarrar

Upstartまたは/etc/init.dを介してサービスを開始する場合は、適切なinitscriptを編集します。

  • init.d:umask 02スクリプトの先頭(通常のshスクリプト)
  • pstartumask 02どこでも

Linuxには「ログイン」の厳密な定義はなく、アカウントはname/homedir/etcに関連付けることができる(またはできない)UIDにすぎません。

コンソール/ SSH経由でログインすると、ログインプログラム(またはSSHデーモン)はPAMを使用して環境(おそらくpam_umask)をセットアップし、「ログイン」フラグを使用してシェルを起動します。 /etc/profileスクリプトは、shおよびbashシェルに属しており、「ログイン」呼び出しに対してのみ読み取ります。

Sudo touch ...またはSudo /etc/init.d/foo startを使用する場合、Sudoは認証/アカウント/セッションのセットアップのためにPAMを呼び出しますが、シェルをまったく開始しません。 「profile」または「bashrc」ファイルは無視されます。 (つまり、Sudo -i ...を使用しない限り。)

Upstartがサービスを実行すると、「プロファイル」スクリプトまたはPAM構成をスキップして、UIDをサービスのUIDに切り替えるだけです。読み取られる唯一の構成は、/etc/initにあるサービスのファイルです。ここに、umask設定を配置する必要があります。

3
user1686