Saya mencoba memahami flag NOEXEC saat memasang.
Saya mengalami masalah eksekusi di dalam direktori / tmp pada mesin orang lain yang saya tidak dapat mengakses atm di mana direktori / tmp dipasang ke drive yang berbeda dari '/' dan NOEXEC hadir. Saya ingin mencoba dan membuat ulang skenario ini di komputer saya, tetapi saya tidak memiliki hard drive kedua. Saya mencoba melakukan perintah berikut:
mount --bind /test1 /test2
Saya kemudian menghapus bind
bendera dan menambahkan NOEXEC
/ etc / fstab. Lalu, saya membuat file di / test2 bernama test.sh di mana itu hanya echo 'hello world'. Saya mencoba dan menjalankannya dan tertulis 'izin ditolak'. Saya kemudian berlari chmod 777 test.sh
dan dapat menjalankan file dengan baik. Saya pikir bendera NOEXEC seharusnya tidak memungkinkan saya untuk mengeksekusi apa pun?
Apakah mount --bind /test1 /test2
tidak sama dengan pemasangan dari drive fisik yang sama sekali berbeda? Seperti pada / test1 dan / test2 pada drive yang berbeda?
sumber
Jawaban:
Opsi bendera 'NOEXEC' pada
mount
perintah tidak memungkinkan eksekusi binari yang dapat dieksekusi dalam sistem file yang di-mount 1 . Namun, ketika skrip (file teks yang dimulai dengan she-bang line; yaitu, sebuah baris yang dimulai dengan#!
) diberikan ke beberapa shell (bash), itu akan menjalankan executable bernama pada baris itu (misalnya,/usr/bin/perl
) dan meneruskan jalur skrip shell sebagai argumen pertama. Penerjemah yang sebenarnya mungkin tidak ada di mountpoint itu.__________
1 The
mount
Perintah biasanya mount sistem file . (Bisa dibilang, loop-back ataubind
mount dapat dianggap pengecualian untuk generalitas ini.) Dalam beberapa kasus (misalnya,/tmp
), sistem file ini hanya akan berisi satu direktori.sumber
#!/bin/sh
di bagian atas. Saya tidak tahu bagaimana skrip shell dieksekusi selain melalui java dan referensi / bin / sh. Jika referensi / bin / sh dan direktori bin telah mengeksekusi hak istimewa, mengapa skrip shell tidak mengeksekusi seperti yang mereka lakukan dalam pengujian saya?