Rop*_*Rop 5 rhel su systemd sysvinit
我们正在从 RHEL6 迁移到 RHEL8,我想保留旧/etc/init.d
脚本,因为我们有大量应用程序需要重写和测试。
对于许多初始化脚本来说,向后兼容性工作正常。
但对于从 root 切换到特定于应用程序的用户的其他脚本,我们这样做:
su - username -c "application-start-script"
Run Code Online (Sandbox Code Playgroud)
他们在重新启动期间失败
su: Pemission denied.
Run Code Online (Sandbox Code Playgroud)
尽管如此,仍然可以使用Works手动启动它们。只有在重新启动期间我们才会遇到此故障。systemctl
我已经验证(使用whoami
)脚本在这两种情况下都以root 身份运行。
所以,我的问题是:
su
在 systemd 启动期间以 root 身份运行时如何/为什么会失败?
小智 7
我想插话一下,尽管它已经被标记为已解决,因为有些人没有禁用 SELinux 的选项。
在init.d
目录中,使用ls -Z
查看所有文件的 SELinux 上下文。与其他启动脚本相比,您的脚本可能具有错误的上下文,因此您需要更改它以匹配。最简单的是运行
sudo chcon --reference=nameofascriptthatworks yourscriptname
Run Code Online (Sandbox Code Playgroud)
并验证上下文是否已与另一个正确设置ls -Z
。
小智 1
我在这里看到了同样的问题,启动 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9712 次 |
最近记录: |