나는 Type=simple
/etc/systemd/system/custom.service
. 그것은 있다 ExecStart=/root/scripts/custom.sh
. 나는 이것을 사용하여 시작 시 다양한 관리 작업이 자동으로 발생하도록 합니다. Redhat 7.9에서는 잘 실행되며 selinux=enforcing
selinux 설정에는 문제가 없습니다.
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.service
왔 systemd_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
여기에서 사용하기 좋은 컨텍스트입니다. 많은 컨텍스트에 실행 권한을 제공하는 일반 컨텍스트입니다.
내가 뭔가 잘못했기 때문에 나중에 작동하지 않도록 하기 위해 내가 하고 있는 일에 대한 올바른 규칙은 무엇입니까?
스크립트를 /bin
then 에 복사 restorecon -RF /bin/custom.sh
하거나 다음 명령을 사용하여 scripts
폴더에 올바른 컨텍스트를 부여할 수 있습니다.
semanage fcontext -a -t bin_t "/root/scripts(/.*)?"
restorecon -RF /root/scripts