![Есть ли способ убрать требования root для определенной команды в Linux? Если да, то как?](https://rvso.com/image/1316781/%D0%95%D1%81%D1%82%D1%8C%20%D0%BB%D0%B8%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D1%83%D0%B1%D1%80%D0%B0%D1%82%D1%8C%20%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20root%20%D0%B4%D0%BB%D1%8F%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%20%D0%B2%20Linux%3F%20%D0%95%D1%81%D0%BB%D0%B8%20%D0%B4%D0%B0%2C%20%D1%82%D0%BE%20%D0%BA%D0%B0%D0%BA%3F.png)
Я использую Ubuntu 12.04 LTS и пытаюсь сделать так, чтобы конкретная команда
dhclient
не требует прав root. Я провел некоторые исследования, которые привели меня к мысли, что я мог бы разблокировать пользователя "su", который не требовал бы прав root ни для чего, но боюсь, что я сломаю что-нибудь таким образом.
Возможно, я задаю два отдельных вопроса:
Где в моей ОС находятся все команды, не требующие прав root?
Могу ли я переместить эту команду туда?
В моем случае подойдет любой способ, и, честно говоря, я даже не уверен, что именно так команды обычного пользователя отличаются от остальных.
решение1
Лучший способ сделать это — использовать sudo, который очень гибко настраивается в отношении того, какой пользователь может выполнять те или иные команды. Используйте visudo
для редактирования /etc/sudoers
(никогда не редактируйте этот файл напрямую — если вы допустите ошибку, вы полностью заблокируете себя). Следующая запись позволит пользователю bob
работать dhclient
без запроса пароля.
bob ALL = (root) NOPASSWD: /sbin/dhclient
Бобу пришлось бежать, sudo dhclient
чтобы выполнить его.
решение2
Может ли конкретный пользователь успешно выполнить программу (двоичный файл или скрипт) или нет, зависит от двух вещей:
Пользователю необходимы права на выполнение файла.
Это не проблема:
ls -l
показывает, что любой пользователь может выполнить/sbin/dhclient
.Пользователю необходимы права на чтение, запись и/или выполнение файлов, к которым обращается программа.
Эта часть намного сложнее и опаснее, поскольку может включать изменение прав доступа ко многим файлам.
Для получения более подробной информации см.Chmod - Википедия.
Обычный способ выполнить команду с привилегиями root — sudo
. Изстраница руководства:
судопозволяет разрешенному пользователю выполнитькомандакак суперпользователь или другой пользователь, как указано вsudoersфайл. Реальные и эффективные uid и gid устанавливаются в соответствии с uid и gid целевого пользователя, как указано в файле passwd, а вектор группы инициализируется на основе файла группы (если только-Попция была указана). Если вызывающий пользователь — root или целевой пользователь тот же, что и вызывающий пользователь, пароль не требуется. В противном случае,судотребует, чтобы пользователи аутентифицировали себя с помощью пароля по умолчанию (ПРИМЕЧАНИЕ: в конфигурации по умолчанию это пароль пользователя, а не пароль root). После аутентификации пользователя обновляется временная метка, и пользователь может использовать sudo без пароля в течение короткого периода времени (5 минут, если это не изменено вsudoers).
Основной синтаксис в вашем конкретном случае следующий:
sudo dhclient
Относительно других Ваших вопросов:
1. Где в моей ОС находятся все команды, не требующие прав root?
Большинство двоичных файлов для всех пользователей находятся внутри /bin
, /usr/bin
и /usr/local/bin
.
Большинство системных двоичных файлов (требуют прав root) находятся в /sbin
.
Это просто практическое правило. Вы можете размещать двоичные файлы где угодно.
Смотрите также:Стандарт иерархии файловой системы
2. Могу ли я переместить эту команду туда?
Помимо потенциальной поломки чего-либо, это не имело бы абсолютно никакого эффекта.