我们正在从 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