特定のグループに対してパスワードのない su を許可するには、 pam_succeed_if.so を使用します。

特定のグループに対してパスワードのない su を許可するには、 pam_succeed_if.so を使用します。

srvuserサービスユーザーとグループがありますmaintainers。グループだけがコマンドになることをmaintainers許可するにはどうすればよいですか?私は編集しようとしています:srvusersu/etc/pam.d/su

auth            sufficient      pam_succeed_if.so use_uid user = maintainers and user ingroup maintainers

ただし、andconfファイルでは明らかに許可されていません。この問題を解決する方法はありますか?

ベストアンサー1

ドキュメントにはpam_succeed_ifマルチ接続がサポートされていることを示す内容がないように見えるので、これはモジュールの外部で行う必要があります。

ルールを作成する場合は、required2つの別々のルールを作成して簡単に組み合わせることができます。

auth  required  pam_succeed_if.so user = srvuser
auth  required  pam_succeed_if.so use_uid user ingroup maintainers

ただし、正の結果が返された場合に処理を終了するルールなどのルールがある場合、sufficientこれは機能せず、代わりにまたは代わりに条件。ただし、PAM は一種のフロー制御をサポートしているため、古いモジュールの戻り値に基づいていくつかのルールをスキップできます。よりここのドキュメント

pam_permitpam_succeed_ifモジュールはtrueを返す限り、この規則に従うべきですが、success

auth  [success=ok default=2]  pam_succeed_if.so user = srvuser
auth  [success=ok default=1]  pam_succeed_if.so use_uid user ingroup maintainers
auth  [success=done default=ignore]  pam_permit.so
... # other modules

ご覧のとおり、構文がひどいので、実際にどこでも使用する前に設定をテストすることをお勧めします。


suもちろん、グループメンバーが他のユーザーの権限でプロセスを実行できるようにするために、必ずしもPAMは必要ではありませんsudo。一般的なファイル権限を使用して setuid バイナリを作成し、特定のグループのメンバーだけを実行できるようにします。

# chown srvuser.maintainers ls
# chmod 4510 ls
# ls -l ls
-r-s--x--- 1 srvuser maintainers 118280 Mar 26 19:03 ls

ここでの欠点は、とは異なり、 susetuidsudoバイナリ実行はどこにも記録されず、ターゲットユーザーとして実行されるプロセスによってsetuidバイナリが変更または削除される可能性があることです。この問題を解決するには、ターゲットのsetuid実行を記録し、実際execのコマンドを記録する単純な固定関数ラッパーを作成できます。

おすすめ記事