Bash adalah seorang juru bahasa; ia menerima input dan melakukan apa pun yang diinginkannya. Tidak perlu memperhatikan bit yang dapat dieksekusi. Bahkan, Bash bersifat portable, dan dapat berjalan pada sistem operasi dan sistem file yang tidak memiliki konsep bit yang dapat dieksekusi.
Apa yang peduli dengan bit yang dapat dieksekusi adalah kernel sistem operasi. Ketika kernel Linux melakukan exec
, misalnya, ia memeriksa apakah sistem file tidak di-mount dengan noexec
opsi, ia memeriksa bit yang dapat dieksekusi dari file program, dan memberlakukan persyaratan yang diberlakukan oleh modul keamanan (seperti SELinux atau AppArmor).
Perhatikan bahwa bit yang dapat dieksekusi adalah jenis kontrol yang agak diskresioner. Pada sistem Linux x86-64, misalnya, Anda dapat mem-bypass verifikasi kernel dari bit yang dapat dieksekusi dengan secara eksplisit memanggil /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
sebagai interpreter :
cp /bin/ls /tmp/
chmod -x /tmp/ls
/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /tmp/ls
Ini agak analog dengan sumber kode sumber Bash di Bash, kecuali itu ld.so
adalah interpreter, dan kode yang dijalankannya adalah kode mesin dalam format ELF.
chmod
dapat memungkinkan Anda menetapkan izin (termasuk `x) dengan angka oktal memberikan petunjuk tentang dari mana era itu berasal. Saya tidak akan terkejut jika itu dimulai sebagai indikator cepat dan kotor "ini adalah file biner yang dapat Anda jalankan", dari hari-hari sebelum dia-bang diciptakan, tetapi saya tidak punya bukti untuk itu