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하고 문제를 해결했습니다.

관련 정보