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

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

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

Недавно я комментировал там и попытался запустить команду, как упоминалось (393222 - это inode файла 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

2 ответа

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

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

Вы можете использовать это:

 find /home/ -uid 0

(или аналогичную команду: ls -la| awk '{ if ($3 == "root") print $9}'), чтобы найти все файлы в / home принадлежит root. Файлы, которые он сам не даст ошибку с помощью find, просто каталоги, чтобы вы могли расширить это до 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 и такие вещи, как forkbombs (не приводя примеры из них :)).

1
ответ дан 24 May 2018 в 10:35

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

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

Почему?

Посмотрите на права доступа к файлам слева.

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

Следующие три символа: rwx. R = чтение, W = запись & amp; X = выполнить. Это означает, что пользователь root имеет права на чтение, запись и выполнение в этом каталоге.

Как мы знаем, что только root имеет эти разрешения?

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

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

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

Если .gvfs имеет разрешения [ f16], будет применено следующее:

rwx = владелец (root) каталога прочитал, напишет & amp; выполнить разрешения для этого каталога. rw- = любой пользователь в группе root имеет права на чтение, запись, но не разрешение на выполнение. r-- = любой другой пользователь имеет разрешение только на чтение. Нет прав на запись или выполнение.

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

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

Надеюсь, что это hasn 't смутил вас еще больше.

1
ответ дан 24 May 2018 в 10:35

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

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