您可以使用 sudo 执行此操作,而无需向 apache 授予“root”权限。
apache <hostname> = (root) NOPASSWD: /bin/date
Run Code Online (Sandbox Code Playgroud)
这在英语中大致翻译为:
让 apache 用户
/bin/date
以 root 用户身份运行命令,而无需在服务器上输入密码<hostname>
。
使用 sudo(或在任何 RBAC 模型中执行等效操作)允许您仅向特定用户公开您需要的权限,以实现您的目标。
然后在 PHP 中,只需将 sudo 与命令一起传入:
exec("sudo -su /bin/date <newdate>");
Run Code Online (Sandbox Code Playgroud)
另外,如果这对您不起作用,请检查您的/etc/sudoers
文件requiretty
:
Defaults requiretty
Run Code Online (Sandbox Code Playgroud)
您需要将其注释掉,以便 sudo 与 apache 一起使用。