Що означає прапор NOEXEC під час монтажу каталогів на RHEL?


11

Я намагаюся зрозуміти прапор NOEXEC під час монтажу.

У мене виникає проблема виконання в каталозі / tmp на машині когось інше, що я не можу отримати доступ до atm, де каталог / tmp встановлений на інший диск, ніж '/', і NOEXEC присутній. Я хотів спробувати відтворити цей сценарій на своїй машині, але у мене немає другого жорсткого диска. Я спробував виконати таку команду:

mount --bind /test1 /test2

Потім я видалив bindпрапор і додав NOEXECу / etc / fstab. Потім я створив файл у / test2 під назвою test.sh, де він просто перегукується з "привіт світом". Я спробую запустити його, і він сказав "відмовлено у дозволі". Потім я побіг chmod 777 test.shі міг добре виконати файл. Я думав, що прапор NOEXEC не повинен мені дозволити нічого стратити?

Хіба це mount --bind /test1 /test2не те саме, що кріплення з зовсім іншого фізичного приводу? Як в / test1 і / test2 є на різних дисках?


Я підозрюю, що ви можете стати жертвою якоїсь особливості кріплення прив'язки. Дивіться цю відповідь .
Каміль Маціоровський

Відповіді:


7

Прапор опції "NOEXEC" в mountкоманді не дозволяє виконувати виконувані файли бінарних файлів у змонтованій файловій системі 1 . Однак, коли сценарій (текстовий файл, який починається з рядка she-bang; тобто рядок, що починається з #!), надається деяким оболонкам (bash), він запустить виконуваний файл, названий у цьому рядку (наприклад, /usr/bin/perl) і передасть пропуск шлях сценарію оболонки як перший аргумент. Фактичний перекладач може бути не на цій точці монтажу.
__________
1mount команда зазвичай монтує файлову систему . (Можливо, зворотний зв'язок або bindкріплення можуть вважатися винятком із цієї загальності.) У деяких випадках (наприклад, /tmp) ця файлова система буде містити лише один каталог.


Отже, хоча файл sh знаходиться у / test2, він виконується у / bin / sh, а не / test2? На іншій машині є процес java, який записує скрипти оболонки до каталогу / tmp, а потім виконує їх. Я думаю, що я пам’ятаю сценарії оболонок, які він створює, є #!/bin/shвгорі. Я не знаю, як виконується сценарій оболонки, крім того, що він проходить через java та посилання / bin / sh. Якщо це посилання / bin / sh і каталог бін має права привілеїв, то чому б сценарії оболонки не виконувались так, як вони робили в моєму тесті?
користувач972276

Це все до виклику оболонки / програми, скрипти оболонки не є ELF і не можуть бути безпосередньо виконані, проте деякі оболонки не дозволять запускати скрипт на FS, встановленому NOEXEC, вони просто загинуть. Я не впевнений, якою має бути поведінка / bin / sh у цьому випадку. (Тим більше, що я не знаю, який саме ви використовуєте, є кілька ароматів).
KJ4IPS

Подумайте про це, коли ви використовуєте оболонку, система помічає #! рядок і викликає відповідний інтерперетер (/ bin / bash /tmp/file.sh), але якщо біт Java просто дзвонить (/tmp/file.sh), це не працює.
KJ4IPS

екземпляр java відсутній у каталозі / tmp і йому потрібно буде використовувати інтерпретатор для виконання скриптів оболонки, правильно? Якщо у Java не є вбудований функціонал, це означає, що виконання досі не відбудеться в каталозі / tmp.
user972276

На мою думку, ваша відповідь неправильно стверджує, що робота шкаралупи - читати шибанг. Дивіться цю відповідь .
Каміль Маціоровський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.