Apa arti flag NOEXEC saat memasang direktori di RHEL?

11

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 bindbendera 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.shdan dapat menjalankan file dengan baik. Saya pikir bendera NOEXEC seharusnya tidak memungkinkan saya untuk mengeksekusi apa pun?

Apakah mount --bind /test1 /test2tidak sama dengan pemasangan dari drive fisik yang sama sekali berbeda? Seperti pada / test1 dan / test2 pada drive yang berbeda?

pengguna972276
sumber
Saya curiga Anda mungkin menjadi korban kekhasan bind mount. Lihat jawaban ini .
Kamil Maciorowski

Jawaban:

7

Opsi bendera 'NOEXEC' pada mountperintah 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 mountPerintah biasanya mount sistem file . (Bisa dibilang, loop-back atau bindmount dapat dianggap pengecualian untuk generalitas ini.) Dalam beberapa kasus (misalnya, /tmp), sistem file ini hanya akan berisi satu direktori.

KJ4IPS
sumber
Jadi, meskipun file sh berada di / test2, itu dieksekusi di / bin / sh, bukan / test2? Di mesin lain, ada proses java yang menulis skrip shell ke direktori / tmp dan kemudian menjalankannya. Saya rasa saya ingat skrip shell yang dibuatnya ada #!/bin/shdi 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?
user972276
Itu semua tergantung pada panggilan shell / program, skrip shell bukan ELF dan tidak dapat dieksekusi secara langsung, namun beberapa shell, tidak akan membiarkan skrip pada FS yang dipasang NOEXEC berjalan, mereka hanya akan mati. Saya tidak yakin apa perilaku / bin / sh seharusnya dalam kasus ini. (Terutama karena saya tidak tahu yang mana yang Anda gunakan, ada beberapa rasa).
KJ4IPS
Kalau dipikir-pikir, ketika Anda menggunakan shell, sistem memperhatikan #! baris, dan memanggil interpereter yang sesuai (/ bin / bash /tmp/file.sh), tetapi jika bit java hanya memanggil (/tmp/file.sh), itu tidak akan berfungsi.
KJ4IPS
contoh java tidak ada di direktori / tmp dan perlu menggunakan juru bahasa untuk menjalankan skrip shell, kan? Kecuali java memiliki fungsionalitas bawaan, yang berarti eksekusi masih tidak akan terjadi di direktori / tmp.
user972276
Menurut pendapat saya jawaban Anda salah mengklaim bahwa tugas shell adalah untuk membaca shebang. Lihat jawaban ini .
Kamil Maciorowski