步骤 EXEC 生成失败...权限被拒绝

步骤 EXEC 生成失败...权限被拒绝

我读了很多关于这方面的内容,但仍然不确定为什么它不起作用。据我所知,所有目录都有正确的权限,即使所有内容都是 777,当我尝试将此程序作为服务运行时,我仍然会拒绝权限。我尝试作为服务器运行的程序称为 xTeVe。我尝试在所有不同的目录和用户下运行它,但似乎没有任何效果。

以下是单元文件:

[Unit]
Description=XTeVe For Plex
After=network.target network-online.target

[Service]
ExecStart=/root/IPTV/xteve
user=root
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

我确实知道这不应该以 root 身份运行,但那只是我尝试的最后一个用户

当我尝试启动服务时,收到以下信息:

14:20 xteve.service: Failed with result 'exit-code'.
14:02 xteve.service: Main process exited, code=exited, status=203/EXEC
14:02 xteve.service: Failed at step EXEC spawning /root/IPTV/xteve: Permission denied
14:02 xteve.service: Failed to execute command: Permission denied
14:02 Started XTeVe For Plex.

这是文件权限:

[root@skynet IPTV]# ls -la
total 12084
drwxr-xr-x. 2 root root       19 Mar  6 13:58 .
dr-xr-x---. 5 root root      175 Mar  6 13:58 ..
-rwxr-xr-x. 1 root root 12370316 Mar  6 13:58 xteve

的结果file

[root@skynet IPTV]# file xteve
xteve: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=lt4S9w02Ylf_MXsFeRkj/jdmwTx5YSsQSDaa6tfuz/vCzfZlCyl5qUEBD7IuD0/AEI-OmWm1iNuziWA7R0P, with debug_info, not stripped

输出cat audit.log | grep xteve

type=AVC msg=audit(1551898814.098:1342): avc:  denied  { execute } for pid=11002 comm="(xteve)" name="xteve" dev="dm-0" ino=30958 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file permissive=0
type=SERVICE_STOP msg=audit(1551898814.100:1343): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=xteve comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'UID="root" AUID="unset"
type=SERVICE_START msg=audit(1551898814.420:1344): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=xteve comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'UID="root" AUID="unset"
type=SERVICE_STOP msg=audit(1551898814.420:1345): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=xteve comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'UID="root" AUID="unset"
type=SERVICE_START msg=audit(1551898966.689:1385): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=xteve comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=?res=success'UID="root" AUID="unset"    

我尝试过但没有效果的事情:

systemd 步骤 EXEC 生成脚本失败:权限被拒绝

systemd 自定义服务:步骤 EXEC 生成失败...权限被拒绝

即使具有适当的组权限,仍会出现“步骤 EXEC 生成失败”的情况

答案1

SELinux 阻止您运行二进制文件位于用户主目录(或在您的情况下,位于 root 用户主目录)中的系统服务。

要修复此问题,请将二进制文件复制到适当的目录(例如),/usr/local/bin然后从那里调用它。

答案2

我也遇到了这个问题。不过,就我而言,我用来启动服务的脚本位于 下/usr/bin/...,因此显然不在用户目录(/home/<name>/.../root/...)内。

但是,我希望WorkingDirectory=/home/...使用用户主目录进行定义。这就是导致问题的原因。该服务的 CHDIR 失败,就像您上面提到的一样。

因此,我创建了一个具有<package>.sysuser文件并在文件--with sysuser中对应的系统用户debian/rules

%:
    dh $@ --parallel --with sysuser

<package>.sysuser文件如下所示:

# Create a user "<Name>" and corresponding group "<Name>"
# and create a home directory (a.k.a. /var/lib/<Name>)
#
# see: man dh_sysuser
#
# Name            Options
<user-name>       home

我的绝密用户名在哪里。如果您还没有安装扩展程序,则<user-name>必须安装。dh_sysuser

sudo apt-get install dh-sysuser

您可能还需要将其作为debian/control文件中的依赖项:

Build-Depends: dh-sysuser, ...

现在我的系统用户有一个主文件夹,/var/lib/<user-name>/...并且从那里启动服务可以按预期进行,不再有 CHDIR 错误。

相关内容