RPM仕様でのサービスアカウントの管理


16

私たちが書いているサービスの部分的に完全なRPM仕様が与えられました。必要なディレクトリの作成、ファイルのコピー、アクセス許可の設定などが行われますが、サービスが実行される必要なシステムアカウントは作成されません。RPMがこれを処理するのが最善であると言われたので、

Requires(pre): /usr/sbin/useradd

%pre
useradd -r -d /path/to/program -s /bin/false myservice

これにより、ユーザーアカウント(および関連付けられたグループ)が作成されるので、後でサービスのファイルに所有権/アクセス許可を設定しようとすると成功します。

私の現在の問題は、a)ユーザーアカウントが既に存在する場合、RPMのインストールは失敗するためですuseradd(ユーザーが既に存在するため)。およびb)rpm -e myservice関連するユーザーとグループも削除する方法がわかりません。


// FPMの使用を検討しますか?
ネイサンバサネーゼ

回答:


18

同様のことをする他のRPM仕様を見て、実際にこれを個別に解決しました。(条件付きで)ユーザーを追加するだけの場合は、Ignacioのリンクを使用します。これは私がしました:

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin myservice

%postun
/usr/sbin/userdel myservice

これにより、RPMは「自動的にクリーンアップ」されますが、アカウントがすでに存在する場合でもインストールすることができます。


13
これは質問に答えますが、ユーザー/グループを削除することが望ましくない理由について、Ignacioが投稿したFedoraリンクリンクのメモを読む価値があります。
CoverosGene

1
UIDとGIDの再利用の問題があり(削除されたユーザーのUID / GIDが最も高い場合)、userdelの自動使用は悪い考えになります。
Bruno9779

1
CentOS 6.7では、useraddコマンドがグループ自体を作成するため、/ usr / sbin / groupaddコマンドを削除しました。また、同じ名前のグループが既に存在する場合、useraddはエラーで終了します。
ラファエル

RPMLintのレポート「W:危険なコマンド・イン%postun userdelの」あなたがそれを使用する場合
Rfraile

5

パッケージがアップグレードされている場合、これらのメソッドはユーザーを削除するため、前述の2つの回答のいずれかは本番環境で使用できます。Yumは新しいパッケージをインストールし、古いパッケージを削除します。これにより、ユーザーがいなくなります。クールではありません!

代わりにこのメソッドを使用してください。

%postun
case "$1" in
   0) # This is a yum remove.
      /usr/sbin/userdel myservice
   ;;
   1) # This is a yum upgrade.
      # do nothing
   ;;
 esac

4

Codererからの応答は良好ですが、2番目のpreコマンドではCentos 7でエラーが発生します。グループを指定する必要があります。

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice > /dev/null || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice > /dev/null || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin -g myservice myservice

%postun
/usr/sbin/userdel myservice

また、/ dev / nullへのリダイレクトを追加して、不要なエコーを無視しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.