Melaksanakan Perintah Root melalui PHP
Anda telah menyatakan hasrat untuk melaksanakan perintah dengan keistimewaan root daripada kod PHP anda pada pelayan CentOS anda. Mari kita terokai isu dan kemukakan penyelesaian yang berpotensi.
Isu:
Anda telah cuba menggunakan fungsi exec() untuk memulakan semula perkhidmatan sshd, tetapi ia memerlukan akses root, yang tidak diberikan kepada pengguna Apache. Walaupun anda telah mencuba penyelesaian seperti menjalankan Apache dengan keistimewaan root atau mengubah suai fail sudoers anda, mereka tidak menyelesaikan isu tersebut.
Penyelesaian Menggunakan Pembungkus Binari (Dengan Suid Bit):
Tetapkan Pemilikan dan Kebenaran: Pastikan pengguna root memiliki skrip dan ia mempunyai kebenaran berikut:
Buat Pembungkus Binari: Buat pembungkus binari yang akan melaksanakan skrip shell anda dengan keistimewaan root. Berikut ialah contoh pembungkus:
# cat > wrapper.c <<CONTENT #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main (int argc, char *argv[]) { setuid (0); system ("/bin/sh /path/to/php_shell.sh"); return 0; } CONTENT
Kompil dan Tetapkan Kebenaran: Susun pembungkus binari dan tetapkan dengan bit suid:
Daripada menggunakan skrip shell luaran, anda boleh membenamkan arahan terus ke dalam pembungkus binari. Hanya gantikan kandungan dalam langkah 3 dengan arahan yang anda mahu laksanakan dengan keistimewaan akar.
Awas:Adalah penting untuk menggunakan laluan mutlak kepada skrip yang anda mahu laksanakan menghalang pengguna berniat jahat daripada mengeksploitasi binari untuk melaksanakan arahan sewenang-wenangnya.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Perintah Root dari PHP pada CentOS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!