Есть ли общие рекомендации, которым нужно следовать, чтобы узнать, почему я получаю ошибку «Отказано в доступе» при выполнении определенной команды?

Я недавно попытался переместить файл для перезаписи /dev/null и обнаружил ошибку Permission denied. Используя Ubuntu в течение последних нескольких лет, я знаю, что если я получу эту ошибку, мне нужно быть sudo, чтобы вызвать команду, и тогда она завершится успешно. Это то, что я сделал, чтобы перезаписать /dev/null.

Тем не менее, artbristol разместил там комментарий , в котором говорится, что слепое обращение sudo для запуска команды не является хорошей привычкой, и мы должны знать, почему нам отказывают в разрешении выполнить эту команду, прежде чем продолжить. Я склонен согласиться с ним вместе со всеми людьми, которые активно поддержали этот комментарий. Но я не знаю, как поступить, чтобы узнать «почему» .

Недавно я наткнулся на этот ответ и попытался выполнить команду, как упомянуто (393222 - это индекс файла examples.desktop в ~):

$ find . -inum 393222 -exec nano {} \;
find: `./.gvfs': Permission denied
find: `./.cache/dconf': Permission denied

Выполнение вышеуказанной команды открыло файл examples.desktop в nano, но также дало Permission denied для двух папок. Ниже приведены атрибуты двух папок (усеченный вывод ls -la):

drwx------  2 root   root    4096 Mar 11 21:04 .gvfs
drwx------  2 root   root    4096 Mar 11 21:04 dconf

Есть ли какое-либо общее руководство, которому нужно следовать, чтобы узнать «почему» Я получаю ошибку «Отказано в доступе» при выполнении определенной команды?

1
задан 13 April 2017 в 15:24

3 ответа

Необходимо использовать мозг немного и задать себе вопрос:

Что приложение на самом деле пытается сделать?

Там не будет единственным ответом на это, поскольку "Разрешение, отклоненное" ошибки, превышает файловые системы, сети и режимы аутентификации (для именования всего три)... Нет только никакого единственного способа найти проблему... Кроме сказать, "у Вас, вероятно, нет разрешения сделать то, что Вы делаете".

Но мы можем посмотреть на Ваши примеры и разработать, где проблема находится в тех.


В mv testfile /dev/null Вы читаете из ./testfile и запись в /dev/ (для вытеснения /dev/null). Это что mv делает, когда Вы пытаетесь переместить файл в файл.

Быстрое stat testfile /dev/null /dev/ покажет Вам:

  File: ‘testfile’
  Size: 7944        Blocks: 16         IO Block: 4096   regular file
Device: fc01h/64513d    Inode: 5284807     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     oli)   Gid: ( 1000/     oli)
Access: 2014-03-19 11:35:42.027427288 +0000
Modify: 2014-03-19 12:25:17.343476867 +0000
Change: 2014-03-19 12:25:17.343476867 +0000
 Birth: -

  File: ‘/dev/null’
  Size: 0           Blocks: 0          IO Block: 4096   character special file
Device: 5h/5d   Inode: 31128501    Links: 1     Device type: 1,3
Access: (0666/crw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-03-18 14:33:16.742165089 +0000
Modify: 2014-03-18 14:33:16.742165089 +0000
Change: 2014-03-18 14:33:16.742165089 +0000
 Birth: -

  File: ‘/dev/’
  Size: 4740        Blocks: 0          IO Block: 4096   directory
Device: 5h/5d   Inode: 1025        Links: 17
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-03-20 09:51:04.408762425 +0000
Modify: 2014-03-20 09:51:04.396762425 +0000
Change: 2014-03-20 09:51:04.396762425 +0000
 Birth: -
  • У Вас есть доступ для чтения к ./testfile
  • У Вас есть доступ для записи в/dev/null псевдо устройство посимвольного ввода-вывода.
  • У Вас нет разрешения записать в/dev/(который необходимо было бы заменить/dev/null),
  • Разрешение отклонено.

Второй пример намного легче считать. От Вашего вывода:

drwx------  2 root   root    4096 Mar 11 21:04 .gvfs
drwx------  2 root   root    4096 Mar 11 21:04 dconf

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

3
ответ дан 13 April 2017 в 15:24

там какое-либо общее руководство для следования для знания, "почему" я получаю Разрешение Отклоненная ошибка при выполнении конкретной команды?

общее представление состоит в том, что те каталоги не принадлежат пользователю, с которым Вы раньше искали, и это находится также не в группе. Таким образом, команда сообщает Вам, что не может ввести тот каталог для выполнения находки. Внутри / домой существуют некоторые файлы, не принадлежащие пользователю.

можно использовать это:

 find /home/ -uid 0

(или подобная команда: ls -la| awk '{ if ($3 == "root") print $9}') для нахождения всех файлов в / домой принадлежавшими корню. Регистрирует это сам не даст ошибку с находкой, просто каталоги, таким образом, Вы могли развернуть это до find /home/ -type d -uid 0 (-type f для просто файлов).

относительно этого примера:

drwx------  2 root   root    4096 Mar 11 21:04 .gvfs
drwx------  2 root   root    4096 Mar 11 21:04 dconf

Ваша команда, в этом случае, должна была включать sudo для предотвращения сообщения, так как те 2 не принадлежат имени пользователя, и и группа и другие исключены из r (ead). Так...

sudo find . -inum 393222 -exec nano {} \;

, Но уведомление о самом разрешении безопасно. Можно даже подавить сообщения об ошибках путем добавления 2>/dev/null к находке.

И да, мы все согласимся, что любая команда должна быть исследована впереди. Существуют некоторые общие вещи искать хотя: как rm или mv, /dev/null, /dev/random и вещи как fork-бомбы (не предоставление примеров тех:)).

0
ответ дан 13 April 2017 в 15:24

Все это зависит от того, что делает команда. Список очень длинен. Давайте возьмем Ваш пример сверху.

Вы пытаетесь использовать nano открыть каталог, названный .gvfs. Если Вы не root (через sudo) затем Вы не сможете.

Почему?

Посмотрите на полномочия файла слева.

Первый символ d. Это означает, что .gvfs является каталогом. Открытие каталога в текстовом редакторе не собирается делать Вас много пользы, но это возможно все равно.

Следующие три символа rwx. R=read, W=write и X=execute. Это означает что пользователь root прочитал, пишут и выполняют полномочия на том каталоге.

Как мы знаем только root имеют эти полномочия?

Обычно существует 10 символов, которые Вы видите для разрешения файла. В этом случае они drwx------.

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

Так, каталог, как мы видим, принадлежит пользователю root и атрибуты группы также root как видно root root бит. Поэтому только root у пользователя есть любое разрешение сделать что-либо с .gvfs. Любой другой пользователь, который является членом root у группы нет полномочий - как видно со вторым блоком 3 полномочий файла: ---. То же идет для любого другого пользователя независимо от их состава группы как видно с третьим блоком 3 полномочий файла: ---.

Если .gvfs имеет полномочия drwxrw-r--, следующее будет применяться:

  • rwx = владелец (root) из каталога прочитал, пишут и выполняют полномочия на этом каталоге.

  • rw- = любой пользователь в группе root прочитал, пишут полномочия, но не выполняют разрешение.

  • r-- = у любого другого пользователя есть разрешение только для чтения. Никакая запись или не выполняет полномочия.

Каждый раз, когда Вы получаете Разрешение Отклоненная ошибка, необходимо знать то, что это - Вы, или команда, которую Вы выполняете, пытается сделать.

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

Я надеюсь, что это не смутило Вас еще больше.

1
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: