Рейтинг:0

Отказано в доступе к сценарию Bash при привязке к запуску

флаг in

Я знаю, что есть похожие сообщения, но я следил за тем, что они сделали, но продолжаю сталкиваться с той же проблемой отказа в разрешении при попытке выполнить мой скрипт bash.

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

chmod u+x bash_script1.sh 

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

-rwxr--r-- 1 группа пользователей 1947 18 июня 16:04 bash_script1.sh
-rwxr--r-- 1 группа пользователей 2430 18 июня 15:59 bash_script2.sh
-rw-r--r-- 1 группа пользователей 1 18 июн 10:57 run.txt

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

Команда

./bash_script1.sh

Ошибка

-sh: ./bash_script1.sh: Отказано в доступе

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

bash bash_script1.sh

#!/usr/bin/env bash помещается в моем заголовке

флаг hr
Вы дали разрешение на выполнение только «пользователю» — вы действительно вошли в систему как «пользователь», когда пытаетесь это сделать? что выводит команда `id`? какая именно команда выдает ошибку `-sh: ./bash_script1.sh: Отказано в доступе`?
Joe_Informatics avatar
флаг in
Да, это именно та ошибка, которую я получаю при попытке запустить `./file_script1.sh` в командной строке. Вывод выглядит следующим образом: `uid=19979(пользователь) gid=867800079(группа) groups=867800079(группа),11226(исследование),11765(омикс)`
Joe_Informatics avatar
флаг in
Я только что разрешил всем пользователям выполнять chmod uga+rwx file.sh, и он все равно выдает ошибку отказа в разрешении....
флаг hr
Итак, единственная другая причина, о которой я могу думать, это то, что файловая система, в которой он хранится, смонтирована с параметром `noexec` - проверьте с помощью `findmnt -T` (запустите из каталога, содержащего скрипт)
Joe_Informatics avatar
флаг in
`/home /dev/md126p2 xfs rw,noexec,relatime,attr2,inode64,noquota` вот что я получаю после. Как я могу это изменить? или я должен спросить моего системного администратора?
Рейтинг:4
флаг hr

As we can see from the output of findmnt -T ., the filesystem on which the script is stored is mounted with the noexec option. This prevents scripts (as well as binary executables) from being executed directly, whereas bash bash_script1.sh still works because the bash executable is stored elsewhere and only needs to read the script.

To modify the behavior temporarily you can use the mount command:

sudo mount -o remount,exec /home

To make the change persistent, you will need to modify your /etc/fstab file and remove the noexec mount option for this block device.

Joe_Informatics avatar
флаг in
это все определенно новое для меня, поэтому я должен буду изучить это глубже наверняка. к сожалению, у меня нет прав sudo, поэтому мне придется обратиться к моему системному администратору за дополнительными указаниями. Спасибо большое хотя бы за разъяснение :D
флаг hr
@Joe_Informatics добро пожаловать - tbh Я был немного удивлен, что опция `noexec` так влияет на сценарии (не только на двоичные исполняемые файлы) - на странице руководства `mount` просто написано `noexec Не разрешать прямое выполнение любых двоичных файлов на смонтированная файловая система.`. Но я подтвердил поведение в своей собственной системе, и оно обсуждается более подробно здесь, например [Выполнение сценария bash или двоичного файла c в файловой системе с параметром noexec] (https://unix.stackexchange.com/questions/490402/ выполнение bash-скрипта или c-бинарного файла в файловой системе с параметром noexec)
Joe_Informatics avatar
флаг in
да, это определенно ново для меня, но приятно знать корень проблемы. Посмотрю предоставленный URL: D

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.