pam_execはSELinuxのためにsystemctlを呼び出すことはできません。

pam_execはSELinuxのためにsystemctlを呼び出すことはできません。

SSHセッションが開始および終了するたびにCentOS 7でスクリプトを実行しようとします。このスクリプトはsystemdサービスを開始/停止する必要があります。

これは私の設定です。


では、/etc/pam.d/sshdとの間に次の行を追加しました。pam_selinux.so closepam_selinux.so open

session    optional     pam_exec.so seteuid log=/tmp/pam_sshd_session.log /etc/pam_session.sh

スクリプトを追加しました/etc/pam_session.sh。ほとんどは関係ありません。簡単に言えば、

#!/bin/bash
systemctl stop some-service.service

この設定でサービスを実行できませんでした。次の場所で確認できます/tmp/pam_sshd_session.log

Failed to stop some-service.service: Access denied

この行はどこで/var/log/audit/audit.log見ることができますか?

type=USER_AVC msg=audit(1701099322.109:12223): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='avc:  denied  { status } for auid=1001 uid=0 gid=0 path="/etc/systemd/system/some-service" cmdline="systemctl stop some-service.service" scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:systemd_unit_file_t:s0 tclass=service  exe="/usr/lib/systemd/systemd" sauid=0 hostname=? addr=? terminal=?'

私が見つけたこの問題呼び出しスクリプト自体と同様の問題について説明します。しかし、私の場合、スクリプトが呼び出されると、その質問で提案された解決策を私の問題に適用することはできません。これは(私の状況で見ると)ここに示されているコマンドの有効なパラメータがsshd_t明らかにないからです。/usr/sbin/semanage

pam_exec電話をかけるにはどうすればよいですかsystemctl

編集する

権限は次/etc/pam_session.shのとおりです。

-rwxr-xr-x. root root unconfined_u:object_r:sshd_exec_t:s0 /etc/pam_session.sh

以前に試したときに設定しましたがsshd_exec_t、私が知っている限り。pam_selinux.so close間のファイルを実行する限り、必要ありませんpam_selinux.so open

答え1

audit2allowこのファイルを作成するのに役立ちましたsshd_selinux_config.te

module sshd_selinux_config 1.0;

require {
    type systemd_unit_file_t;
    type sshd_t;
    class service { start status stop };
}

#============= sshd_t ==============
allow sshd_t systemd_unit_file_t:service { start status stop };

コンパイルされたバージョンでsshd_selinux_config.pp。その後、有効にしてsemodule -i sshd_selinux_config.pp問題を解決しました。

関連情報