srvuser
サービスユーザーとグループがありますmaintainers
。グループだけがコマンドになることをmaintainers
許可するにはどうすればよいですか?私は編集しようとしています:srvuser
su
/etc/pam.d/su
auth sufficient pam_succeed_if.so use_uid user = maintainers and user ingroup maintainers
ただし、and
confファイルでは明らかに許可されていません。この問題を解決する方法はありますか?
ベストアンサー1
ドキュメントにはpam_succeed_if
マルチ接続がサポートされていることを示す内容がないように見えるので、これはモジュールの外部で行う必要があります。
ルールを作成する場合は、required
2つの別々のルールを作成して簡単に組み合わせることができます。
auth required pam_succeed_if.so user = srvuser
auth required pam_succeed_if.so use_uid user ingroup maintainers
ただし、正の結果が返された場合に処理を終了するルールなどのルールがある場合、sufficient
これは機能せず、代わりにまたは代わりに条件。ただし、PAM は一種のフロー制御をサポートしているため、古いモジュールの戻り値に基づいていくつかのルールをスキップできます。よりここのドキュメント。
pam_permit
pam_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
ここでの欠点は、とは異なり、 su
setuidsudo
バイナリ実行はどこにも記録されず、ターゲットユーザーとして実行されるプロセスによってsetuidバイナリが変更または削除される可能性があることです。この問題を解決するには、ターゲットのsetuid
実行を記録し、実際exec
のコマンドを記録する単純な固定関数ラッパーを作成できます。