PHP tidak boleh mengakses RNDC
P粉794851975
P粉794851975 2024-02-21 21:33:27
0
2
404

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粉794851975
P粉794851975

membalas semua(2)
P粉545956597

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粉463291248

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 ).

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan