Saya mencoba untuk mengeksekusi skrip .sh dari PHP, namun tidak dieksekusi.
Saya memeriksa log kesalahan, dan saya mendapatkan kesalahan 'sh: Izin ditolak'. Saya memeriksa di mana pengguna php sedang dijalankan, dan itu dilakukan di bawah pengguna apache.
Saya mencoba mengubah kepemilikan .sh kepada pengguna apache, tetapi tidak ada hasilnya.
Saya pikir pada awalnya ini karena skrip berada di luar www / dir, namun bahkan ketika saya meletakkan skrip di direktori yang sama, kesalahan masih diberikan.
Apakah ada solusi untuk ini selain menambahkan pengguna apache ke daftar SUDOers?
Script sh berfungsi dengan baik jika saya meluncurkannya dari dempul menggunakan perintah 'php filename.php'.
bash
permissions
script
php
Robin Presto
sumber
sumber
x
) pada file? Apakah Anda menentukan penerjemah skrip dalam baris shebang?chmod 775 yourscript.sh
. Itu akan memberikanr-x
(membaca dan mengeksekusi) izin untuk pengguna "Lain" pada file itu.Jawaban:
Coba saran berikut:
php -r "echo exec('whoami');"
r-x
izin bendera:chmod 755 dir; chmod 755 file
+s
flag (sudo) ke file (tidak disarankan):chmod u+s file
,safe_mode
.include_path
, misalnya:php.ini
mengajukan:include_path ".:/usr/local/lib/php:/your/dir"
.htaccess
file:php_value include_path ".:/usr/local/lib/php:/your/dir"
/bin/sh
) Untuk pengguna Apache Anda (mis. Periksa denganfinger
:).php.ini
tidak menggunakan:disable_functions
untukexec
fungsiselinux-utils
menginstal (sistem Linux yang disempurnakan dengan Keamanan), periksagetenforce
/setenforce
konfigurasi seperti dijelaskan dalam jawaban @Tonin .Penyelesaian masalah:
php.ini
atauhttpd.conf
file Anda, jangan lupa untuk me-restart server web,php.ini
semua jenis kesalahan (display_error
,error_reporting
, dll).sumber
Masalah seperti itu mungkin tergantung pada OS yang Anda gunakan dan bagaimana hal itu dikonfigurasi. Beberapa distro linux (terutama yang berbasis pada RHEL seperti CentOS atau Fedora) datang dengan SELinux diaktifkan secara default. Ini dapat diperiksa, dan sementara diubah, dengan perintah berikut:
Anda juga dapat memiliki tampilan yang lebih lengkap tentang konfigurasi saat ini dengan:
Perubahan ini dapat dibuat permanen dengan mengedit
/etc/selinux/config
file dan mengaturSELINUX
variabel kepermissive
ataudisabled
.Tapi, cara yang benar untuk menyelesaikan masalah seperti ini , jika Anda memang dalam situasi ini, adalah dengan memeriksa
/var/log/audit/audit.log
file log. Ini akan berisi semua acara yang terkait dengan aturan SELinux. Maka Anda mungkin harus memberikan naskah Anda konteks yang benar, yaitu diizinkan untuk dijalankan oleh pengguna apache / php. Memeriksa konteks keamanan SELinux dilakukan denganls -Z
:Ini daftar Pengguna, Peran dan Jenis setiap file / direktori. Di sini
httpd_sys_script_exec_t
tipe memberikan file dalam direktori cgi izin untuk dieksekusi oleh httpd. Script shell Anda mungkin harus memiliki tipe yang sama.Anda juga bisa memberi makan
audit.log
garis keaudit2allow
perintah. Ini akan menampilkan Anda perubahan yang diperlukan untuk membuat SELinux bahagia. Tetapi biasanya perubahan yang disarankan perlu dilakukan pada kebijakan SELinux itu sendiri yang bukan apa yang harus Anda lakukan dalam kasus Anda (masih, output ini dapat memberikan petunjuk tentang apa yang sedang terjadi).Halaman berikut menjelaskan masalah yang serupa dan berbagai cara untuk menyelesaikannya: http://sheltren.com/stop-disabling-selinux
sumber
Jadi saya sampai di sini setelah mencari masalah serupa di Google. Saya berpikir untuk menjatuhkan bahwa komentar tentang SELinux menunjuk saya ke arah yang benar.
Dalam kasus saya sendiri, saya menggunakan skrip deploy Git kustom yang menggunakan perintah shell. Perintah berfungsi dengan baik pada BASH tetapi kemudian memiliki "izin ditolak" dan "bukan repositori" di Git. Ini benar-benar aneh dan saya mengalami beberapa perbaikan sampai saya menemukan jawaban ini.
root@ls:~# /usr/sbin/setenforce Permissive
memecahkan masalah bagi saya.sumber
Situasi saya sedikit berbeda, tetapi Google membawa saya ke sini, jadi saya pikir saya akan membagikan ...
Server saya menjalankan stabil debian dan mencoba untuk mengeksekusi skrip shell berfungsi sekali maka izin secara otomatis berubah menjadi 644 dan upaya berikutnya untuk menjalankan skrip didapat
Permission denied
. Ternyata masalah server samba bagi saya dan saya tidak melihat pola sampai sekarang.Izin QA Strange berubah ketika menyimpan file pada partisi Samba dari editor Windows adalah perbaikannya. Saya tidak tahu tentang
map archive = no
opsi bahkan setelah menggunakan saham samba selama satu dekade.Sesuatu tentang menggunakan Notepad ++ di desktop Windows akan mengubah izin file target menjadi 675 alih-alih 775 saat umask diatur.
sumber
Menjalankan perintah root di PHP melalui Apache
Saya memiliki aplikasi web yang perlu melakukan perintah shells sebagai root di dalam fungsi PHP, dan Anda akan berpikir itu akan sangat mudah ... tapi memang butuh beberapa googles saya untuk mendapatkan semua detail, jadi di sini adalah catatan berguna saya di Itu. Ini ada di sistem Linux yang menjalankan Apache, dan kita akan menggunakan "sudo" di dalam "shell_exec" untuk menjalankan perintah.
Hal utama adalah mengedit file / etc / sudoers, dan biasanya Anda dapat (sebagai root) menggunakan perintah "visudo" untuk melakukannya.
Pastikan apache dapat menjalankan perintah, DAN tidak memerlukan kata sandi:
Maka Anda perlu mengomentari baris ini:
Jika tidak, maka Anda akan melihat kesalahan ini di / var / log / secure: "maaf, Anda harus memiliki tty untuk menjalankan sudo". Sekarang Anda siap untuk pergi, dan kode PHPnya sederhana:
$ results = shell_exec ('sudo date');
sumber