Разрешение Linux отклонено после chmod a=rwx

Итак, у меня есть небольшая проблема с Linux, господи, которая научит меня проводить столько лет в Windows. Во всяком случае, я сделал небольшое java-приложение, красиво обернутое скриптом Java Service Wrapper, но когда я запускаю этот скрипт:

sh ./wrapper.sh console

Мне сразу отказывают в доступе. Сообщение об отказе в разрешении выглядит так:

eval: 1: /home/user1/MyApp/bin/wrapper: Permission denied

Мой маленький файл wrapper.sh находится в папке MyApp/bin. Каталог MyApp/bin/wrapper содержит 2 файла:

  • обертка-linux-x86-32
  • обертка-linux-x86-64

В качестве теста я выполнил следующую команду chmod:

chmod a=rwx MyApp -R

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

Кто-нибудь знает, что я мог бы попробовать сделать, чтобы ребенок побежал?

Спасибо, Ланселот


person Lancelot    schedule 07.04.2009    source источник
comment
Каково содержимое обертки? Может ли быть так, что он вызывает команду eval? Мой человек говорит мне, что есть команда eval - построить команду, объединив аргументы. Возможно, проблема в скрипте-оболочке.   -  person lothar    schedule 08.04.2009
comment
Я надеюсь, что вы удалили общедоступное разрешение на запись файлов и каталогов. Редко можно защитить файлы или каталоги с общедоступным разрешением на запись — /tmp является особым случаем и требует, чтобы набор sticky-bit был удаленно безопасным.   -  person Jonathan Leffler    schedule 22.04.2009


Ответы (6)


Я только что заметил, что сообщение об ошибке ссылается на имя каталога, в котором находится ваш файл:

eval: 1: /home/user1/MyApp/bin/wrapper: Permission denied

Мы знаем, что это каталог, поскольку вы упомянули: «Каталог MyApp/bin/wrapper содержит 2 файла».

Не могли бы вы проверить свой скрипт, например, где вы используете имя каталога в качестве команды? Например, использовать оболочку (имя каталога) вместо wrapper/wrapper-linux-x86-32 (это имя файла) или подобные ошибки?

Подобные ошибки часто возникают при использовании пробелов в именах файлов и забывании кавычек названных имен файлов (хотя, вероятно, здесь это не так).

В противном случае, не могли бы вы отредактировать свой вопрос, включив в него содержимое сценария-оболочки, который вы вызываете?

(Новый ответ, так как он совершенно не связан с предыдущей идеей noexec, и его можно оставить для справки.)

person Mihai Limbășan    schedule 07.04.2009
comment
Ты да человек. Именно это и происходило. Система запуталась и попыталась выполнить папку вместо файла. Обратите внимание: если бы моя структура изначально была пуленепробиваемой, система не запуталась бы. Машины делают только то, что мы им говорим! Миллион раз спасибо. - person Lancelot; 08.04.2009
comment
Не упоминайте об этом, рад, что смог помочь. - person Mihai Limbășan; 08.04.2009

Файловая система, в которой размещается ваш скрипт, может быть смонтирована с флагом noexec. Проверьте запись /etc/fstab для этой файловой системы и, если там есть noexec, попробуйте удалить ее, а затем перемонтировать эту файловую систему через mount /path/to/mountpoint -o remount

Если подумать, проверьте вывод команды mount на наличие экземпляров noexec вместо /etc/fstab (возможно, файловая система была смонтирована динамически).

person Mihai Limbășan    schedule 07.04.2009
comment
нет, нет опции noexec ни в одной из файловых систем. Но спасибо, что указали на этот файл, полезно знать, где находится эта информация. - person Lancelot; 08.04.2009
comment
Это очень простая установка Ubuntu. После запуска ничего не монтируется. Дисководы и компакт-диск монтируются автоматически при загрузке системы. - person Lancelot; 08.04.2009

вам, возможно, придется также предоставить сценарий выполнения вашей оболочке

chmod +x обертка.sh

РЕДАКТИРОВАТЬ: я только что заметил, что ваш файл wrapper.sh находится в папке MyApp/EDIT

также, если вы убедитесь, что у вас есть

#!/bin/sh

в верхней части вашего файла .sh вы можете выполнить его следующим образом:

.wrapper.sh

person Roy Rico    schedule 07.04.2009
comment
Привет Рой, когда я делаю ls -Al, вот что он печатает для моего файла wrapper.sh: -rwxrwxrwx 1 user1 user1 19035 07 апреля 2009 г. 15:32 wrapper.sh - person Lancelot; 08.04.2009
comment
chmod с = вполне приемлем, он уже установил бит выполнения. - person paxdiablo; 08.04.2009

Сначала попробуйте открыть его в текстовом редакторе, чтобы убедиться, что у вас есть доступ для чтения. Если да, то сделайте

chmod +x wrapper.sh

И убедитесь, что у вас есть #!/bin/sh в начале скрипта

person Zifre    schedule 07.04.2009
comment
Привет Zifre, я только что проверил #!/bin/sh. - person Lancelot; 08.04.2009

Вы можете попытаться выполнить файл, который находился в домашнем каталоге другого пользователя, вы можете дать разрешение пользователю «пользователь»

chmod -R a+x /home/user1 или chmod -R o+x /home/user1 chmod -R g+x /home/user1

person Community    schedule 22.04.2009

Хотя моя проблема была немного другой, этот вопрос появлялся в моем поиске несколько раз при поиске похожей проблемы, поэтому я опубликую свои выводы здесь.

Моя проблема заключалась в том, что я не мог получить доступ к хранилищу/папке после команды chmod.

После выполнения команды:

sudo chmod -755 storage -R    //notice -755 is wrong, it should be 755

Я больше не мог получить доступ к хранилищу/папке.

Я пробовал ls -l:

разрешения на хранение d---------

Также после git status:

storage/.gitignore: доступ запрещен

После выполнения правильной команды:

sudo chmod 755 storage -R // without -

все пришло в норму.

person boroboris    schedule 04.04.2017