初始化脚本有权限问题,但使用 /bin/sh 运行可以解决这些问题?

初始化脚本有权限问题,但使用 /bin/sh 运行可以解决这些问题?

有人能告诉我这是怎么回事吗?据我所知,这些执行 init 脚本的方式是相同的。

box:~# whoami
root

box:~# /etc/init.d/nginx restart
nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed

box:~# service nginx restart
nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed

box:~# head -1 /etc/init.d/nginx
#!/bin/sh

box:~# /bin/sh /etc/init.d/nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

我不明白为什么这样做有效,为什么首先存在权限问题。 init 脚本以 root 身份运行,应该可以访问 pid 文件。

更新 1:一些背景信息

我尝试了标准的“权限问题”故障排除方法,甚至将 pid 文件设置为全局可读/可写。之前,我在错误日志中遇到了相同的权限错误,该错误位于自定义位置:在挂载上。我尝试了卸载/重新挂载,但没有成功。之后我使用了“sh”方法,成功了。之后,它似乎使日志权限错误消失,但现在我在 pid 文件上看到了相同的错误(如您所见)。

更新 2:回应评论

box3:~# ls -alZ /var/run/nginx.pid
-rw-rw-rw-. root root unconfined_u:object_r:var_run_t:s0 /var/run/nginx.pid
box3:~# ls -alZ /etc/init.d/nginx
-rwxr-xr-x. root root system_u:object_r:httpd_initrc_exec_t:s0 /etc/init.d/nginx

更新 3:这肯定是 SELinux 的问题

关闭 SELinux 可以解决问题。我需要阅读有关 SELinux 安全上下文的内容。

box:~# setenforce 0
box:~# getenforce
Permissive
box:~# /etc/init.d/nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]
box:~# setenforce 1
box:~# /etc/init.d/nginx restart
nginx: [emerg] open() "/mnt1/logs/nginx-error.log" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed

相关内容