Запуск сценарію sh: «Дозвіл відхилено», незважаючи на біт та права root


17

Я встановив Debian у VirtualBox (для різних експериментів, які зазвичай ламали мою систему) і спробував запустити скрипт гостьового додатка VirtualBox. Я ввійшов як root і намагався запустити autorun.sh, але мені дісталося «Відмовлено у дозволі». 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набором опцій, тому ви не можете запускати будь-які виконувані файли. З документації щодо монтажу :

noexec

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

Спробуйте:

mount | grep noexec

Потім перевірте, чи вказана ваша файлова система у виході.

Якщо так, ви можете вирішити цю проблему, повторно встановивши файлову систему з execопцією:

mount -o remount,exec filesystem

Це не працювало для мене. Мені довелося нормально зняти, а потім перезавантажити. Тоді це спрацювало чудово.
datakid

@datakid: Яка ваша фс?
cuonglm

У мене виникає проблема з debian 9, деяким файлам відмовлено у дозволі, якщо сценарії виконуються як root, але він визначається як root ... як поведінка Windows, якщо я видаляю і сценарій працював! = [
Лучано Андресс Мартіні

Я отримував дуже дивне повідомлення, яке виявилося через noexec: "sh: 75: script.sh: Дозвіл відхилено"
tmm1

2

bash -x ./filename.filetypeповинен працювати. Це працювало для мене, коли мені, як кореневому користувачеві, було дозволено відмовити в дозволі.


Ні, оскільки врешті-решт проблема виявилася noexecопцією кріплення, це не спрацює, оскільки може бути більше файлів, які потрібно виконати; тобто filename.filetypeзадихається, намагаючись виконувати інші файли з тієї ж файлової системи. Ви можете легко перевірити це за допомогою спрощеного тесту: створити сценарій з двома рядками, який друкує "привіт", а потім просто зателефонує собі ще раз, але не встановлює права на виконання. Якщо ви будете виконувати його -x, він надрукував би "привіт", але тоді рекурсивна лінія виклику призведе до помилки.
Привіт-Ангел

1

Моє рішення цієї проблеми - використовувати джерело . Я був на об'ємі зберігання дуже важливих даних. Цей об'єм встановлений як noexec. У мене простий скрипт оболонки, який можна виконати, але отримав проблему з дозволом.

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

source fixsamplesheet.sh # worked fine

Тестується лише на моєму Ubuntu.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.