Баш - перекладач; він приймає вклад і робить все, що хоче. Тут не потрібно прислухатися до виконуваного біта. Фактично, Bash є портативним і може працювати в операційних системах і файлових системах, які не мають жодної концепції виконуваного біта.
Що стосується виконавчого біта - це ядро операційної системи. exec
Наприклад, коли ядро Linux виконує , наприклад, перевіряє, чи не встановлена файлова система з noexec
опцією, вона перевіряє виконуваний біт програмного файлу та виконує будь-які вимоги, що пред'являються модулями безпеки (наприклад, SELinux або AppArmor).
Зауважте, що виконуваний біт є досить дискреційним видом контролю. Наприклад, у системі Linux x86-64, ви можете обійти верифікацію ядра виконуваного біта шляхом явного виклику /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
в якості інтерпретатора :
cp /bin/ls /tmp/
chmod -x /tmp/ls
/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /tmp/ls
Це дещо аналогічно пошуку вихідного коду Bash у Bash, за винятком того, що ld.so
це інтерпретатор, а код, який він виконує, є машинним кодом у форматі ELF.
chmod
може дозволити вам встановлювати дозволи (включаючи `x) з восьмеричним числом, дає певну підказку до того, з якої епохи він походить. Я не був би здивований, якби він розпочався як швидкий і брудний "це показник бінарного файлу, який ви можете виконати", від днів до того, як вона була винайдена, але я не маю доказів тому