systemd -- su:权限被拒绝,在 /etc/init.d 脚本中

systemd -- su:权限被拒绝,在 /etc/init.d 脚本中

我们正在从 RHEL6 迁移到 RHEL8,我想保留旧/etc/init.d脚本,因为我们有大量应用程序需要重写和测试。

对于许多初始化脚本来说,向后兼容性工作正常。

但对于从 root 切换到特定于应用程序的用户的其他脚本,我们这样做:

  su - username -c "application-start-script"

他们在重新启动期间失败

  su: Pemission denied.

仍然,手动启动它们systemctl 作品。只有在重新启动期间我们才会遇到此故障。

我已经验证(使用whoami)该脚本运行为在这两种情况下。

所以,我的问题是:

su在 systemd 启动期间以 root 身份运行时如何/为什么会失败?

答案1

我想插话一下,尽管它已经被标记为已解决,因为有些人没有禁用 SELinux 的选项。

init.d目录中,使用ls -Z查看所有文件的 SELinux 上下文。与其他启动脚本相比,您的脚本可能具有错误的上下文,因此您需要更改它以匹配。最简单的是运行

sudo chcon --reference=nameofascriptthatworks yourscriptname

并验证上下文是否已与另一个正确设置ls -Z

答案2

我在这里看到了同样的问题,启动 Oracle 的脚本不起作用。如果你查看 /var/messages,你会看到一个 selinux 错误,指出这是不允许的。我正在 CentOS 上工作,我将 selinux 配置从强制更改为宽松。之后一切顺利。对我来说,这只是一个开发虚拟机,因此安全性不是问题。消息文件还有一种方法可以免除单个 init.d 服务,这也可能值得一试。

猫 /etc/selinux/config

# This file controls the state of SELinux on the system on boot.

# SELINUX can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=permissive

相关内容