Rumah > Soal Jawab > teks badan
Saya sedang mengedit fail zon /var/named/rpz.local
dan perlu memuat semula rndc selepas melaksanakan arahan ini:
cd /var/named rndc reload rpz.local
Semuanya baik-baik saja menggunakan cli sebagai pengguna root, tetapi masalahnya ialah saya tidak dapat menjalankannya melalui nginx (PHP) /usr/sbin/rndc
. Jadi bolehkah anda memberi saya petunjuk?
Saya boleh menjalankan ini:
$Output = shell_exec("uptime"); print($Output);
Tetapi jika saya menjalankan arahan ini, output akan kosong:
system('rndc 重新加载');
atau
shell_exec('rndc 相关');
Nampaknya saya tidak mempunyai akses kepada rndc
kerana saya tidak dapat menjalankan:
rndc 状态
Tetapi jika saya menjalankan ini:
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
Saya mempunyai hasil uptime
and uptime
command. But there is nothing f或者 shell_exec('rndc reload')
Saya juga melakukan arahan di bawah tetapi tidak berjaya:
setfacl -m u:nginx:rwx rpz.local setfacl -m u:nginx:rwx /usr/sbin/rndc
P粉5459565972024-02-22 00:36:26
Jika anda mempunyai PHP berjalan sebagai root dalam Nginx, anda mempunyai satu masalah yang serius dan kemudian beberapa.
Sila rujuk manual operasi anda untuk memahami peranan pengguna akar dan tujuannya. Kemudian uruskan sistem dengan sewajarnya.
Atau ringkasnya: hanya kerana anda boleh melakukan sesuatu sebagai root, tidak bermakna anda harus melakukannya dari dalam PHP. Ketahui sebabnya. sebenar. secara jujur.
Jika tidak, sila hubungi pentadbir sistem yang bertanggungjawab yang mengetahui sistem pengendalian anda dan jelaskan keperluan secara peribadi.
P粉4632912482024-02-22 00:06:56
Masalah telah selesai. bagaimana?
Bila nak lari rndc
命令时,我得到 NULL
. Seperti yang dinyatakan dalam siaran ini Saya menukar arahan kepada:
$Test = shell_exec(`rndc reload rpz.local 2>&1`); // return permission denied for rndc.key file print($Test);
Jadi saya melakukannya:
setfacl -m u:nginx:rwx /etc/rndc.key
Selesai masalah.
Terima kasih banyak sayang@hake
P.S Seperti yang @hake sebutkan, adalah salah untuk kami menjalankan nginx sebagai sudoer atau menambah nginx ke kumpulan sudoer, jadi jangan buat kesilapan, walaupun penyahpepijatan adalah ok dan menguji (tidak lebih daripada 1-2 jam ).