Запуск скрипта sh: «Отказано в доступе», несмотря на исполняемый бит и права root

17

Я установил Debian в VirtualBox (для различных экспериментов, которые обычно ломали мою систему) и попытался запустить скрипт гостевого аддона VirtualBox. Я вошел в систему как root и попытался запустить autorun.sh, но я получил «Permission denied». ls -lпоказывает, что скрипт имеет права на выполнение.

Извините, что я не могу скопировать вывод - VirtualBox абсолютно бесполезен без надстройки, так как не работает ни общий каталог, ни общий буфер обмена. Но только для вас, чтобы быть уверенным, я скопировал права руками:

#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh

Сначала я подумал, что, возможно, скрипт выполняет что-то, что выдало ошибку. Я пытался заменить /bin/shчто-то вроде #/pathtorealsh/sh -xv, но я не получил вывод - кажется, что сценарий даже не может быть выполнен.

Я даже не представляю, чем это может быть вызвано.

Привет, ангел
источник
2
Похоже, это должно работать. Попробуйте запустить его явно с bash: `bash -x ./autorun.sh". Возможно, это даст дополнительную подсказку.
nobar
2
Что такое выход mount | grep noexec?
Cuonglm
1
@ Gnouc, вы правы, у смонтированного «cdrom» есть noexecнабор. Возможно, вы можете опубликовать это как ответ; тем временем я пытаюсь перемонтировать его с правами exec. Хм, я даже не знал, что файловая система может иметь такой атрибут.
Привет, Ангел,
И если вы попытаетесь запустить его через ход, sh ./autorun.shчто произойдет?
добавлено

Ответы:

29

Возможно, ваша файловая система смонтирована с установленным noexecпараметром, поэтому вы не можете запускать исполняемые файлы. Из документации по креплению :

поехес

Не разрешайте прямое выполнение каких-либо двоичных файлов в смонтированной файловой системе. (До недавнего времени можно было запускать двоичные файлы в любом случае с помощью команды, подобной /lib/ld*.so / mnt / binary. Этот прием не удался с Linux 2.4.25 / 2.6.0.)

Пытаться:

mount | grep noexec

Затем проверьте, указана ли ваша файловая система в выходных данных.

Если да, вы можете решить эту проблему, перемонтировав файловую систему с execопцией:

mount -o remount,exec filesystem
cuonglm
источник
Это не сработало для меня. Мне пришлось размонтировать, а затем перемонтировать как обычно. Тогда все работало нормально.
дата рождения
@datakid: Какой у тебя фс?
Cuonglm
У меня возникла эта проблема с Debian 9, некоторые файлы запрещены, если сценарии выполняются как root, но они идентифицируются как root ... как поведение windows, если я удалю & скрипт сработал! = [
Лучано Андресс Мартини
Я получал очень странное сообщение, которое оказалось из-за noexec: "sh: 75: script.sh: В
доступе
2

bash -x ./filename.filetypeдолжно сработать. Это сработало для меня, когда я получил разрешение как пользователь root.

Стивен Хоу
источник
Нет, так как в итоге проблема оказалась в noexecопции монтирования, это не сработает, потому что может быть больше файлов, которые должны быть выполнены; т. е. он filename.filetypeбы задохнулся, пытаясь выполнить другие файлы из той же файловой системы. Вы можете легко проверить это с помощью упрощенного теста: создайте двухстрочный скрипт, который печатает «привет», затем просто снова вызывает себя, но не устанавливает права на исполняемый файл. Если вы выполните его с помощью -x, он напечатает «привет», но тогда рекурсивная строка вызова вызовет ошибку.
Привет, Ангел,
1

Мое решение этой проблемы заключается в использовании источника . Я был на хранении очень важных данных. Этот том монтируется как noexec. У меня есть простой сценарий оболочки, который является исполняемым, но получил проблемы с правами доступа.

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

Проверено только на моей Ubuntu.

Кемин Чжоу
источник