systemd 서비스의 ExecStart의 selinux 컨텍스트 사용자 정의

systemd 서비스의 ExecStart의 selinux 컨텍스트 사용자 정의

나는 Type=simple /etc/systemd/system/custom.service. 그것은 있다 ExecStart=/root/scripts/custom.sh. 나는 이것을 사용하여 시작 시 다양한 관리 작업이 자동으로 발생하도록 합니다. Redhat 7.9에서는 잘 실행되며 selinux=enforcingselinux 설정에는 문제가 없습니다.

RHEL 8.8에서는 /var/log/messages.

systemd[1]: Started custom service.
systemd[96691]: custom.service: Failed to execute command: Permission denied
systemd[96691]: custom.service: Failed at step EXEC spawning /root/scripts/custom.sh: Permission denied
systemd[1]: custom.service: Main process exited, code=exited, status=203/EXEC
systemd[1]: custom.service: Failed with result 'exit-code'.

SELinux is preventing /usr/lib/systemd/systemd from execute access on the file custome.sh. For complete SELinux messages run: sealert -l 84fa818f-e23a-4686-afb5-3f2399d0d6ea

setroubleshoot[96693]: SELinux is preventing /usr/lib/systemd/systemd from execute access on the file custom.sh.#012#012
*****Plugin catchall (100. confidence) suggests
**************************#012#012If you believe that systemd should be allowed execute access
on the custom.sh file by default.#012Then you should report this as a bug.#012You can generate a
local policy module to allow this access.
#012Do#012allow this access for now by executing:
#012# ausearch -c '(ation.sh)' --raw | audit2allow -M my-ationsh#012# semodule -X 300 -i my-ationsh.pp#012

/root/scripts/custom.sh그래서 내 스크립트에 올바른 selinux 컨텍스트가 없다는 것을 알고 있습니다 . 그런데 무엇을 사용해야 합니까?

내 것은 자동으로 가져 /etc/systemd/system/custom.servicesystemd_unit_file_t으므로 모든 것이 설정되었다고 믿습니다.

나는 /root/scripts/custom.sh현재 그것을 가지고 있습니다 unconfined_u:object_r:admin_home_t:s0.

해당 폴더의 다른 서비스에 대해 다른 ExecStart 프로젝트를 확인할 때 ls -ldZ다음이 표시됩니다.

-rwxr-xr-x. 1 root root system_u:object_r:bluetooth_exec_t:s0      1375048 May 17  2022 /usr/libexec/bluetooth/bluetoothd
-rwxr-xr-x. 1 root root system_u:object_r:NetworkManager_exec_t:s0   67752 Feb 23 04:51 /usr/libexec/nm-dispatcher
-rwxr-xr-x. 1 root root system_u:object_r:avahi_exec_t:s0           146208 Nov  3  2020 /usr/sbin/avahi-daemon
-rwxr-xr-x. 1 root root system_u:object_r:xdm_exec_t:s0             471744 Dec 12  2022 /usr/sbin/gdm
-rwxr-xr-x. 1 root root system_u:object_r:modemmanager_exec_t:s0   2203464 Dec 13  2022 /usr/sbin/ModemManager
-rwxr-xr-x. 1 root root system_u:object_r:syslogd_exec_t:s0         742168 Jan 10 06:46 /usr/sbin/rsyslogd
-rwxr-xr-x. 1 root root system_u:object_r:timedatex_exec_t:s0        33984 Aug 12  2018 /usr/sbin/timedatex
  • customservice_exec_t유형 컨텍스트를 만들어야 합니까 ? 그렇다면 어떻게 해야 할까요?
  • bin_t검색할 때 일부 서비스에 해당하는 구문이 표시되지 않는 상황을 발견했다고 생각했습니다 . 컨텍스트를 생성하는 데 따른 오버헤드를 절약할 수 있는 좋은 컨텍스트가 exec_t있습니까 ?bin_t
  • 내가 뭔가 잘못했기 때문에 나중에 작동하지 않게 하려면 내가 하고 있는 일에 대한 올바른 규칙은 무엇입니까? selinux=enforcing해결책이 아닌 허용으로 설정 해야 합니다 .

답변1

customservice_exec_t 유형 컨텍스트를 생성해야 합니까? 그렇다면 어떻게 해야 할까요?

이 작업을 수행할 필요는 없습니다. 매우 구체적인 규칙을 만들고 해당 규칙에 액세스하는 모든 유형을 제어하려는 경우에만 이 작업을 수행하면 됩니다. 이는 생성하는 데 시간이 많이 걸리고 유지 관리하는 데 비용이 많이 듭니다. 유지 관리가 적은 최고의 selinux 사례를 사용하려는 것 같습니다. 확인할 수는 있지만여기그것을하는 방법.

bin_t를 컨텍스트로 만난 줄 알았는데, 검색해보니 일부 서비스에 해당하는 exec_t 구문이 표시되지 않았습니다. bin_t는 컨텍스트 생성에 따른 오버헤드를 절약하는 데 사용할 수 있는 좋은 컨텍스트입니까?

예, bin_t여기에서 사용하기 좋은 컨텍스트입니다. 많은 컨텍스트에 실행 권한을 제공하는 일반 컨텍스트입니다.

내가 뭔가 잘못했기 때문에 나중에 작동하지 않도록 하기 위해 내가 하고 있는 일에 대한 올바른 규칙은 무엇입니까?

스크립트를 /binthen 에 복사 restorecon -RF /bin/custom.sh하거나 다음 명령을 사용하여 scripts폴더에 올바른 컨텍스트를 부여할 수 있습니다.

semanage fcontext -a -t bin_t "/root/scripts(/.*)?"
restorecon -RF /root/scripts

관련 정보