종료 코드 상태 = 203/EXEC로 인해 시스템 서비스가 실패했습니다.

종료 코드 상태 = 203/EXEC로 인해 시스템 서비스가 실패했습니다.

시작 시 실행되는 서비스를 만들려고 합니다. 이 서비스는 내 사용자의 홈 디렉터리에 있는 C++로 작성하고 컴파일한 프로그램입니다. 프로그램은 일부 UDP 소켓을 열고 무한 루프에 있으므로 자동으로 종료되지 않습니다. 프로그램을 수동으로 실행할 수 있고 모든 것이 예상대로 작동하지만, 실행 systemctl start myservice하고 상태를 확인하면 프로그램이 실행되고 있지 않은 것을 볼 수 있습니다. 아래 오류 결과 + 기타 유용한 정보. 참고로 운영체제는 CentOS Stream입니다.

출력은 다음에서 비롯됩니다.systemctl status myservice

myservice.service - my serivce
    Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor present: disabled)
    Active: failed (Result: exit-code) since <redacted unnecessary timestamp>
    Process 2101 ExecStart=/home/user/program (code=exited, status=203/EXEC)
  Main PID: 2101 (code=exited, status=203/EXEC)

Journalctl의 오류 메시지

myservice.service: Main process exited, code=exited, status=203/EXEC
myservice.service: Failed with result 'exit-code'
myservice.service: Service RestartSec=2s expired, scheduling restart

시스템 단위 파일

[Unit]
Description=my service
After=network.target

[Service]
Type=simple
ExecStart=/home/user/program
User=user
WorkingDirectory=/home/user/
Restart=always
RestartSec=2
KillMode=process

[Install]
WantedBy=multi-user.target

203 상태는 일반적으로 파일이 존재하지 않거나 적절한 권한이 없음을 의미하므로 아래 출력은 이것이 그러한 문제 중 하나가 아님을 증명합니다(희망적으로).

출력은 다음에서 비롯됩니다.ls -laZ /home/user/program

-rwxrwxrwx. 1 root root unconfined_u:object_r:user_home_t:s0 803168 Aug 14 23:35 /home/user/program

출력은 다음에서 비롯됩니다.sestatus

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33

출력은 다음에서 비롯됩니다.ausearch -ts recent -m avc -i

type=PROCTITLE msg=audit(08/16/2021 20:14:04.216:698) : proctitle=(ster_myservice)
type=SYSCALL msg=audit(08/16/2021 20:14:04.216:698) : arch=x86_64 syscall=execve success=no exit=EACCES(Permission denied) a0=0x5572ff82e7a0 a1=0x5572ff6ff6d0 a2=0x5572ff7f54b0 a3=0x1 items=0 ppid=1 pid=2568 auid=unset uid=user gid=user euid=user suid=user fsuid=user egid=user sgid=user fsgid=user tty=(none) ses=unset comm=(ster_myservice) exe=/usr/lib/systemd/systemd subj=system_u:system_r:init_t:s0 key=(null)
type=AVC msg=audit(08/16/2021 20:14:04.216:698) : avc:  denied  { execute } for  pid=2568 comm=(ster_myservice) name=program dev="dm-2" ino=137 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0

답변1

SELinux로 인해 프로그램이 실행되지 않습니다: AVC Deny status type=AVC msg=audit(08/16/2021 20:14:04.216:698) : avc: denied { execute } for pid=2568 comm=(ster_myservice) name=program dev="dm-2" ino=137 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0.

이는 init_t프로세스 컨텍스트에서 실행되는 systemd가 표시된 프로그램을 시작할 수 없음을 의미합니다 user_home_t.

이를 완화하려면 프로그램을 표준 바이너리 디렉터리(예: )로 옮긴 /usr/local/bin다음 restorecon -Rv /usr/local/bin.

아니면 당신이필요홈 디렉토리 외부에서 프로그램을 실행하려면 사용자 정의 SELinux 정책 모듈을 컴파일하십시오.

ausearch -m avc -ts recent --comm ster_myservice | audit2allow -a -M ster-myservice
semodule -i ster-myservice.pp

답변2

내 경우에는 최근 서버 업그레이드로 인해 /usr/sbin 디렉토리의 권한이 변경되어 mysql 사용자가 해당 디렉토리에 액세스할 수 없게 되었습니다.

노력하다:

sudo chmod 755 /usr/sbin

관련 정보