Ошибка разрешения Bash Script при попытке запуска

Вопрос или проблема

Я не могу запустить свой Bash-скрипт, доступ на выполнение всегда отклоняется.

Я изменил свои файлы с помощью команды, например:

chmod u+x bash_script1.sh 

и получил следующее:

-rwxr--r-- 1 user group 1947 Jun 18 16:04 bash_script1.sh
-rwxr--r-- 1 user group 2430 Jun 18 15:59 bash_script2.sh
-rw-r--r-- 1 user group    1 Jun 18 10:57 runs.txt

Тем не менее, я продолжаю получать следующую ошибку при запуске из командной строки:

Команда:

./bash_script1.sh

Ошибка:

-sh: ./bash_script1.sh: Permission denied

Когда я запускаю следующую команду, я не получаю ошибку, но я не хочу использовать bash для запуска моего скрипта:

bash bash_script1.sh

#!/usr/bin/env bash находится в заголовке.

Как видно из вывода findmnt -T ., файловая система, на которой хранится скрипт, смонтирована с опцией noexec. Это предотвращает выполнение скриптов (а также бинарных исполняемых файлов) непосредственно, тогда как bash bash_script1.sh все еще работает, потому что исполняемый файл bash хранится в другом месте и нужно только прочитать скрипт.

Чтобы временно изменить поведение, можно использовать команду mount:

sudo mount -o remount,exec /home

Чтобы сделать изменение постоянным, вам нужно будет изменить ваш файл /etc/fstab и удалить опцию монтирования noexec для этого блочного устройства.

В моем случае исполняемые файлы выполнялись, но никакие скрипты, будь то bash или c-shell, не работали. Виной были эти параметры монтирования в /etc/fstab, для раздела, где располагаются скрипты:

user,data-ordered

(как-то сгенерированы по умолчанию во время установки).

Решением было заменить эти параметры на:

acl,user_xattr

(найдено на другой машине, где все работало хорошо – man mount даст объяснение).

.

Ответ или решение

Когда вы пытаетесь выполнить Bash-скрипт и сталкиваетесь с ошибкой "Permission denied", это может быть связано с несколькими причинами. В вашем описании вы выполнили команду chmod u+x bash_script1.sh, которая добавляет разрешение на выполнение для пользователя. В результате права на файл выглядят следующим образом: -rwxr--r--, что подтверждает, что пользователь действительно имеет право на выполнение.

Однако, несмотря на наличие всех необходимых прав, проблема может заключаться в конфигурации монтирования файловой системы. Как вы указали, вывод команды findmnt -T . показывает, что файловая система, где хранится скрипт, смонтирована с опцией noexec, которая запрещает выполнение бинарных файлов и скриптов.

Пример: Если вы собираетесь запустить bash_script1.sh и получаете ошибку "Permission denied", хотя у вас есть права на выполнение, это указывает на возможную проблему с монтированием. При монтировании раздела с опцией noexec скрипт не может быть выполнен напрямую. В результате команда bash bash_script1.sh работает, потому что она вызывает оболочку bash для интерпретации файла, не полагаясь на системные права выполнения.

Применение: Чтобы временно изменить поведение и разрешить выполнение скриптов, вы можете использовать команду mount с параметром exec. Например, выполните sudo mount -o remount,exec /home, чтобы временно разрешить выполнение в вашем домашнем каталоге. Однако для постоянного решения проблемы необходимо внести изменения в файл /etc/fstab, удалив опцию noexec для соответствующего устройства. Если проблему создают случайные параметры, сгенерированные при установке, такие как user,data-ordered, подумайте о замене их на параметры, которые поддерживают выполнение скриптов, например, acl,user_xattr.

Таким образом, решение вашей проблемы зависит от изменения настроек файловой системы для разрешения выполнения скриптов. Это может подразумевать временную или постоянную модификацию параметров монтирования в зависимости от ваших потребностей и административных возможностей.

Оцените материал
Добавить комментарий

Капча загружается...