1

В Linux, в каких ситуациях, если таковые имеются, выполнение команды без полномочий root для доступа к файлу / папке или создания / удаления файла / папки с использованием sudo может привести к "отказу в доступе" при выполнении той же команды, что и root пользователь преуспеет? Конечно, предполагается, что пользователь sudoer.

Практический пример в Ubuntu 12: у меня есть этот каталог в / с правами root: владение root:root и drwxr-xr-x и я пробовал sudo date > file в то же время, как и sudo date | tee file но получил то же самое

-bash: file: Permission denied

в обоих случаях. Конечно же, нет проблем, если я root . Это довольно сложно.

2 ответа2

7

sudo только заставляет команду sudo'ed запускаться от имени пользователя root. Случайное практическое различие заключается в том, что в

sudo echo mem > /sys/power/state

(который сообщает ядру о приостановке в RAM)

это не работает, потому что оболочка, в которой вы работаете (как обычный пользователь), пытается установить перенаправление в /sys /power /state, для которого у нее нет разрешения на запись. Вы можете сделать это успешно, запустив суб-оболочку от имени пользователя root

sudo sh -c 'echo mem > /sys/power/state'

или с помощью программы, которая сама открывает файлы, например, dd:

echo mem | sudo dd of=/sys/power/state

или сначала получив корневую оболочку, используя, например, 'su' или 'sudo -s'.

3

Действительно ли sudo делает вас рутом?

Страница man для sudo объясняет:

Нет простого способа помешать пользователю получить корневую оболочку, если ему разрешено запускать произвольные команды через sudo.

Таким образом, если вы запускаете sudo something и вводите свой пароль; затем, если вы не заблокируете свой терминал, другой пользователь сможет запустить sudo su - течение 5 минут, что даст ему доступ к корневой оболочке, если ваш sudo позволяет вам запускать произвольные команды. Чтобы узнать больше об этом тайм-ауте, я процитирую этот соответствующий раздел на странице руководства выше:

Политика sudoers кэширует учетные данные в течение 5 минут, если они не переопределены в sudoers . sudo с параметром -v , пользователь может обновить кэшированные учетные данные, не выполняя команду.

Почему мне отказывают в разрешении?

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

Как показал другой пользователь, это так же просто, как запуск

sudo bash -c 'date > file'

или переписать его так, чтобы вам не нужно было запускать параметр перенаправления от имени пользователя root, например так:

date | sudo tee file

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .