![Cron 权限(root,用户组)-无法打开输入文件](https://linux22.com/image/803626/Cron%20%E6%9D%83%E9%99%90%EF%BC%88root%EF%BC%8C%E7%94%A8%E6%88%B7%E7%BB%84%EF%BC%89-%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E8%BE%93%E5%85%A5%E6%96%87%E4%BB%B6.png)
我有一台服务器,我为其创建了一个 cron 作业“sendalerts”来向用户发送消息。请注意,这个“sendalerts.php”应该可以通过两种方式运行(通过浏览器和 cron 作业)
因此 cron 的工作是执行一个 php 文件,然后发送警报,如下所示:
01 01 * * * /usr/bin/php -f /var/www/vhosts/xxxxx.com/xxx/sendalerts.php
但它总是失败并显示日志消息:
Could not open input file: /var/www/vhosts/xxxxx.com/xxx/sendalerts.php
因此,我检查了“sendalerts.php”的文件组和所有者,发现它是“另一个组”(因为它是通过 Plesk 文件管理器创建的),而“root”不是其成员。然后,我使用 root 从 SSH 删除并重新创建了“sendalerts.php”。但这不会授予我在浏览器中运行同一文件的权限,而我有时想要这样做(手动发送警报)。
然而,当 cron 尝试执行时,我收到相同的日志错误(Could not open input file: /var/www/vhosts/xxxxx.com/xxx/sendalerts.php
)
目前我可能的解决方案是:
使用 Plesk 文件管理器重新创建相同的文件,然后将“root”用户添加到“anothergroup”组。 但对于这个我的问题是:这样做是否安全可靠?考虑到现在组“anothergroup”可能具有“root”用户权限(如果我的理解没错的话)
寻找其他更好的解决方案,如果有人有更好的解决方案,请就此提出建议/建议。谢谢,
博克斯姆卢
答案1
将 root 添加到上述组不会有帮助,因为 root 应该已经能够访问“另一个组” GID 拥有的文件。
检查审计日志(有时位于 下/var/log/audit/
)是否有任何错误消息。例如,SELinux 或 Apparmor 可能阻止 root 通过 cron 进入您的目录。
其他可能的解释可能是目录/var/www/vhosts/xxxxx.com/xxx/
位于 NFS 共享或类似位置,而 root 被压缩了?在这种情况下,我建议您创建一个属于“anothergroup”组的用户,看看是否有帮助。
答案2
将命令放入属于“anothergroup”的用户的 crontab 中。
不过,我很疑惑,通常 root 可以访问任何内容,为什么这里不可以?
无论如何,让 root 成为“另一个组”的成员也不会有什么坏处。系统上没有任何东西是“以组身份运行”的。东西只能以组成员身份运行。