Menjalankan skrip sh: «Izin ditolak» meskipun hak bit dan root dapat dieksekusi

17

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 -lmenunjukkan 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/shdengan sesuatu seperti #/pathtorealsh/sh -xv, tetapi saya tidak mendapatkan hasil - sepertinya skrip tidak dapat dijalankan.

Saya bahkan tidak tahu apa penyebabnya.

Hai Malaikat
sumber
2
Sepertinya itu harus bekerja. Coba jalankan dengan bash secara eksplisit: `bash -x ./autorun.sh". Mungkin ini akan memberikan petunjuk tambahan.
nobar
2
Apa output mount | grep noexec?
cuonglm
1
@ Gnouc, Anda benar, «cdrom» yang terpasang sudah noexecsiap. 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.
Hi-Angel
Dan jika Anda mencoba menjalankannya melalui sh ./autorun.shapa yang terjadi?
Diinstal

Jawaban:

29

Mungkin sistem file Anda sudah di-mount dengan noexecset opsi, jadi Anda tidak dapat menjalankan file yang dapat dieksekusi. Dari dokumentasi mount :

noexec

Jangan izinkan eksekusi langsung binari apa pun pada sistem file yang dipasang. (Sampai saat ini masih dimungkinkan untuk menjalankan binari menggunakan perintah seperti /lib/ld*.so / mnt / binary. Trik ini gagal sejak Linux 2.4.25 / 2.6.0.)

Mencoba:

mount | grep noexec

Kemudian periksa apakah sistem file Anda tercantum dalam output.

Jika ya, Anda dapat mengatasi masalah ini, dengan memasang kembali sistem file dengan execopsi:

mount -o remount,exec filesystem
cuonglm
sumber
Itu tidak berhasil untuk saya. Saya harus melepas dan kemudian memasang kembali secara normal. Kemudian itu bekerja dengan baik.
datakid
@dakakid: Apa fs kamu?
cuonglm
Saya mengalami masalah dengan debian 9, beberapa file ditolak jika skrip berjalan sebagai root, tetapi mengidentifikasi sebagai root ... seperti perilaku windows, jika saya menghapus & skrip bekerja! = [
Luciano Andress Martini
Saya mendapat pesan yang sangat aneh, yang ternyata karena noexec: "sh: 75: script.sh: Izin ditolak"
tmm1
2

bash -x ./filename.filetypeharus bekerja. Itu bekerja untuk saya ketika saya mendapat izin ditolak sebagai pengguna root.

Stephen Howe
sumber
Tidak, karena pada akhirnya masalahnya ternyata adalah noexecopsi mount, ini tidak akan berhasil, karena mungkin ada lebih banyak file yang harus dieksekusi; yaitu filename.filetypeakan 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.
Hi-Angel
1

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.

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

Hanya diuji di Ubuntu saya.

Kemin Zhou
sumber