首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Systemd服务失败,退出代码状态=203/EXEC

Systemd服务失败,退出代码状态=203/EXEC
EN

Unix & Linux用户
提问于 2021-08-15 21:26:08
回答 1查看 19.3K关注 0票数 3

我正在尝试创建一个在引导上运行的服务。该服务是我用C++编写并编译的程序,位于我的用户主目录中。该程序打开一些UDP套接字,并处于无限循环中,因此不会自动退出。我可以手动运行程序,一切都按预期运行,但是当我运行systemctl start myservice时,检查程序的状态,就会发现它没有运行。下面的错误结果+其他有用的信息。操作系统是CentOS流。

输出来自systemctl status myservice

代码语言:javascript
运行
复制
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)

日志

中的错误消息

代码语言:javascript
运行
复制
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

系统单元文件

代码语言:javascript
运行
复制
[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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-08-17 12:32:07

SELinux阻止您的程序运行: AVC拒绝状态为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策略模块:

代码语言:javascript
运行
复制
ausearch -m avc -ts recent --comm ster_myservice | audit2allow -a -M ster-myservice
semodule -i ster-myservice.pp
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/664811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档