Saya menginstal Debian di VirtualBox (untuk berbagai percobaan yang biasanya merusak sistem saya) dan mencoba meluncurkan skrip addon tamu VirtualBox. Saya login sebagai root dan mencoba meluncurkan autorun.sh
, tetapi saya mendapat «Izin ditolak». ls -l
menunjukkan bahwa skrip memiliki hak yang dapat dieksekusi.
Maaf, saya tidak dapat menyalin output - VirtualBox benar-benar tidak dapat digunakan tanpa addon, karena tidak ada direktori bersama, maupun karya clipboard bersama. Tapi untuk memastikan Anda, saya menyalin hak-hak itu dengan tangan:
#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh
Pada awalnya saya berpikir bahwa mungkin skrip mengeksekusi sesuatu yang memberikan kesalahan. Saya mencoba untuk mengganti /bin/sh
dengan sesuatu seperti #/pathtorealsh/sh -xv
, tetapi saya tidak mendapatkan hasil - sepertinya skrip tidak dapat dijalankan.
Saya bahkan tidak tahu apa penyebabnya.
sumber
mount | grep noexec
?noexec
siap. Mungkin Anda dapat mempostingnya sebagai jawaban; sementara itu saya mencoba untuk mengirim kembali dengan hak eksekutif. Hm, saya bahkan tidak tahu bahwa sistem file dapat memiliki atribut seperti itu.sh ./autorun.sh
apa yang terjadi?Jawaban:
Mungkin sistem file Anda sudah di-mount dengan
noexec
set opsi, jadi Anda tidak dapat menjalankan file yang dapat dieksekusi. Dari dokumentasi mount :Mencoba:
Kemudian periksa apakah sistem file Anda tercantum dalam output.
Jika ya, Anda dapat mengatasi masalah ini, dengan memasang kembali sistem file dengan
exec
opsi:sumber
noexec
: "sh: 75: script.sh: Izin ditolak"bash -x ./filename.filetype
harus bekerja. Itu bekerja untuk saya ketika saya mendapat izin ditolak sebagai pengguna root.sumber
noexec
opsi mount, ini tidak akan berhasil, karena mungkin ada lebih banyak file yang harus dieksekusi; yaitufilename.filetype
akan terkesiap mencoba mengeksekusi file lain dari sistem file yang sama. Anda dapat dengan mudah memeriksanya dengan tes yang disederhanakan: buat skrip dua baris yang mencetak "halo", lalu panggil dirinya lagi, tetapi jangan tetapkan hak yang dapat dieksekusi. Jika Anda menjalankannya dengan-x
, itu akan mencetak "halo", tetapi kemudian saluran panggilan rekursif akan memicu kesalahan.Solusi saya untuk masalah ini adalah menggunakan sumber . Saya memiliki volume penyimpanan data yang sangat penting. Volume ini dipasang sebagai noexec. Saya memiliki skrip shell sederhana yang dapat dieksekusi tetapi mendapat masalah izin.
Hanya diuji di Ubuntu saya.
sumber