Heim > Fragen und Antworten > Hauptteil
Ich bearbeite eine Zonendatei /var/named/rpz.local
und muss rndc neu laden, nachdem ich diesen Befehl ausgeführt habe:
cd /var/named rndc reload rpz.local
Mit cli als Root-Benutzer ist alles in Ordnung, aber das Problem ist, dass ich es nicht über Nginx (PHP) ausführen kann /usr/sbin/rndc
. Können Sie mir also einen Hinweis geben?
Ich kann das ausführen:
$Output = shell_exec("uptime"); print($Output);
Aber wenn ich diesen Befehl ausführe, ist die Ausgabe leer:
system('rndc 重新加载');
oder
shell_exec('rndc 相关');
Anscheinend habe ich keinen Zugriff auf rndc
, weil ich nicht einmal Folgendes ausführen kann:
rndc 状态
Aber wenn ich das ausführe:
system(`uptime`); // Sun Aug 20 22:36:51 +0330 2023 $Test = shell_exec(`rndc status`); // return nothing print($Test); system('uptime');// 00:28:03 up 18 days, 10:47, 2 users, load average: 0.00, 0.02, 0.05
Ich habe das Ergebnis von uptime
and uptime
command. But there is nothing f或者 shell_exec('rndc reload')
. Ich habe auch den folgenden Befehl ausgeführt, aber es hat nicht funktioniert:
setfacl -m u:nginx:rwx rpz.local setfacl -m u:nginx:rwx /usr/sbin/rndc
P粉5459565972024-02-22 00:36:26
如果您在 Nginx 中的 PHP 以 root 身份运行,您就会遇到一个严重的问题,然后还会出现更多问题。
请查阅您的操作手册,了解 root 用户的角色及其用途。然后相应地管理系统。
或者简而言之:只有您可以作为 root 执行某些操作,并不意味着您应该从 PHP 内部执行此操作。 了解原因。真的。说真的。
如果不能,请联系了解您所操作系统的负责系统管理员,并当面澄清要求。
P粉4632912482024-02-22 00:06:56
问题已解决。如何?
当尝试运行 rndc
命令时,我得到 NULL
。正如提到的这篇文章我将命令更改为:
$Test = shell_exec(`rndc reload rpz.local 2>&1`); // return permission denied for rndc.key file print($Test);
所以我做到了:
setfacl -m u:nginx:rwx /etc/rndc.key
问题解决了。
非常感谢亲爱的@hake
P.S正如@hake提到的,我们将nginx作为sudoer运行或将nginx添加到sudoer组是错误的,所以不要犯错误,尽管调试是可以的和测试(不超过 1-2 小时)。