Я пытаюсь понять флаг 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 находятся на разных дисках?
источник
Ответы:
Параметр «NOEXEC» в
mount
команде не разрешает выполнение исполняемых двоичных файлов в смонтированной файловой системе 1 . Однако когда сценарий (текстовый файл, начинающийся со строки she-bang; т.е. строки, начинающейся с#!
) передается некоторым оболочкам (bash), он запускает исполняемый файл, названный в этой строке (например,/usr/bin/perl
), и передает путь сценария оболочки в качестве первого аргумента. Фактический интерпретатор может не находиться в этой точке монтирования.__________
1 Команда
mount
обычно монтирует файловую систему . (Возможно, возврат в петлю илиbind
монтирование могут рассматриваться как исключение из этой общности.) В некоторых случаях (например,/tmp
) эта файловая система будет содержать только один каталог.источник
#!/bin/sh
вверху. Я не знаю, как выполняется сценарий оболочки, кроме как через Java и ссылки / bin / sh. Если он ссылается на / bin / sh и каталог bin имеет права на выполнение, почему сценарии оболочки не будут выполняться так же, как в моем тесте?