由于 SELinux,pam_exec 无法调用 systemctl

由于 SELinux,pam_exec 无法调用 systemctl

我试图在 CentOS 7 上每次 SSH 会话启动和结束时执行一个脚本。该脚本应该启动/停止 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并解决了问题。

相关内容