Pengguna Apache www-data
perlu diberikan hak istimewa untuk menjalankan aplikasi tertentu menggunakan sudo
.
- Jalankan perintah
sudo visudo
. Sebenarnya kami ingin mengedit file etc/sudoers
. Untuk melakukannya, dengan menggunakan sudo visudo
di terminal, itu menduplikat (temp) sudoers
file untuk diedit.
- Di akhir file, tambahkan contoh berikut: -jika kami ingin menggunakan perintah untuk
restart
merokok dan php
memerintahkan tindakan lain dalam pertanyaan Anda,
www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, usr/bin/php
(Ini dengan asumsi bahwa Anda ingin menjalankan restart
dan php
perintah menggunakan hak pengguna super (root). Dan Anda menggunakan php
perintah di usr/bin/
jalur)
Namun, jika Anda ingin menjalankan setiap aplikasi menggunakan hak pengguna super, maka tambahkan yang berikut daripada apa yang di atas. Anda mungkin tidak ingin melakukan itu, bukan untuk ALL
perintah, sangat berbahaya.
www-data ALL=NOPASSWD: ALL
3. Setelah mengedit file sudoers (oleh visudo
kami mengedit file temp sudoers
jadi simpan dan keluar file temp (visudo) untuk menulis dalam sudoers
file. ( wq!
)
4. Hanya itu, sekarang gunakan exec()
atau shell_exec
dengan cara berikut di dalam xxx.php
skrip Anda . tetap ingat untuk menggunakan sudo
sebelum menggunakan perintah dalam skrip php.
ex:-
exec ("sudo /etc/init.d/smokeping restart 2>&1");
atau
shell_exec("sudo php -v");
Jadi dalam masalah Anda, tambahkan perintah yang ingin Anda gunakan di step no (2.)
saat saya menambahkan dan mengubah skrip php Anda seperti yang Anda inginkan.
di sini adalah masalah yang sama seperti milikmu /programming//a/22953339/1862107
Demikianlah Sumanadasa
sumber
Coba tentukan seluruh path ke biner php .. Misalnya,
/usr/bin/php
Jika Anda tidak mengetahuinya, temukan menggunakan:
which php
sumber
/var/log/httpd/error*
.Biasanya Anda ingin menentukan jalur penuh untuk aplikasi seperti
whoami
,ls
, danphp
. Jika Anda tidak yakin apa lokasi program (path lengkap), Anda bisa mengetahui seperti:Kemudian sebutkan seperti di skrip Anda.
sumber
echo shell_exec("/usr/bin/php somefile.php 2>&1")
:?hu
. Jadi, Anda perlu memastikan bahwa scriptphp
berupaya untuk jangka diatur seperti ini:chmod 755 somescript.php
. Ini akan memungkinkan pengguna yang menjalankan Apache, untuk dapat mengeksekusi & membaca.php
file Anda .Apakah php.ini Anda membatasi set perintah yang tersedia?
Ini dari saya
/etc/php5/php.ini
sumber
Cara men-debug masalah shell_exec
OK, di sini kita punya masalah: beberapa hal bekerja di terminal dan tidak berfungsi di shell_exec php (atau exec, spawn, apa pun). Mari kita pikirkan: apa perbedaan antara Anda dan php? Inilah tiga:
PHP dijalankan dari aturan server HTTP
Memang, terminal Anda berjalan dari
yourname
pengguna dan php dijalankan dariwww-data
. Jadi, ide pertama adalah membuka terminal dariwww-data
pengguna dan mencoba perintah yang sama. Begitu..../etc/passwd
file, temukan baris denganwww-data
pengguna dan ubah shell login-nya (yang terakhir) dari/bin/false
(atau apa pun) menjadi/bin/bash
.www-data
's terminal:su www-data
/etc/passwd
file saat Anda selesaiPHP dijalankan dari PHP .
PHP adalah enogh paranoid dan ada banyak opsi dalam konfigurasi apache / nginx dan php.ini yang dapat merusak upaya Anda.
Ini sedikit lebih rumit untuk di-debug. Ada dua opsi di sini:
Aktifkan log di browser dan lihat masalahnya. Edit Anda
php.ini
, nyalakandisplay_errors
dan semua bendera lainnya untuk melihat kesalahan di browser. Mereka Anda dapat membaca dan men-debug mereka.Dapatkan
www-data
shell (lihat bagian pertama) dan jalankan sesuatu sepertiecho '<?php shell_exec("php -v"); ?>' | php
yang akan mengeksekusi kode php yang sama di konsol dan Anda akan dapat melihat kesalahan dan debug.
PHP dijalankan dari SELinux / apparmor
Selinux dan apparmor adalah hal-hal keamanan yang melarang aplikasi untuk melakukan tindakan tertentu (misalnya, menelurkan aplikasi lain atau beberapa aplikasi spesifik lainnya). Mungkin itu diaktifkan di server Anda.
Untuk memeriksa - menonaktifkan selinux / apparmor dan memeriksa apakah ada masalah.
Untuk memperbaiki - baca manual yang sesuai dan perbaiki aturan permisif tulis untuk kasus Anda.
sumber
Bagi saya cara paling sederhana adalah masuk ke dalam php.ini dan berkomentar di baris yang dimulai dengan
sumber