Есть ли способ удалить корневые требования для конкретной команды в Linux? Если да, то как?

Я использую Ubuntu 12.04 LTS, и я пытаюсь сделать так, чтобы конкретная команда

dhclient

не требует привилегий root. Я провел некоторое исследование, которое заставило меня поверить, что я могу разблокировать пользователя "su", который не требует рута для чего-либо, но боюсь, что я что-то сломаю таким образом.

Может быть, я задаю два отдельных вопроса:

  1. Где все команды, которые не требуют привилегий root, находятся в моей ОС?

  2. Могу ли я переместить эту команду туда?

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

2 ответа

Решение

Лучший способ сделать это с помощью sudo, который очень настраивается в зависимости от того, какой пользователь может выполнять какие команды. использование visudo редактировать /etc/sudoers (никогда не редактируйте этот файл напрямую - если вы допустите ошибку, вы полностью заблокируете себя). Следующая запись позволит пользователю bob бежать dhclient без пароля.

bob ALL = (root) NOPASSWD: /sbin/dhclient

Боб побежит sudo dhclient когда для того, чтобы выполнить его.

Если конкретный пользователь может или не может успешно выполнить программу (двоичную или скриптовую), это зависит от двух вещей:

  • Пользователю нужны права на выполнение файла.

    Это не проблема: ls -l показывает, что любой пользователь может выполнить /sbin/dhclient,

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

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

Для получения дополнительной информации см. Chmod - Wikipedia.

Обычный способ выполнить команду с привилегиями root sudo, Из справочной страницы:

sudo позволяет разрешенному пользователю выполнять команду от имени суперпользователя или другого пользователя, как указано в файле sudoers. Действительные и эффективные uid и gid устанавливаются так, чтобы они совпадали с целевыми пользователями, как указано в файле passwd, и вектор группы инициализируется на основе файла группы (если не была указана опция -P). Если вызывающий пользователь является пользователем root или целевой пользователь совпадает с вызывающим пользователем, пароль не требуется. В противном случае sudo требует, чтобы пользователи аутентифицировали себя с паролем по умолчанию (ПРИМЕЧАНИЕ: в конфигурации по умолчанию это пароль пользователя, а не пароль root). Как только пользователь прошел аутентификацию, отметка времени обновляется, и пользователь может затем использовать sudo без пароля в течение короткого периода времени (5 минут, если он не отменен в sudoers).

Основной синтаксис в вашем конкретном случае:

sudo dhclient

По поводу других ваших вопросов:

1. Где все команды, которые не требуют привилегий root, находятся в моей ОС?

Большинство двоичных файлов для всех пользователей находятся внутри /bin, /usr/bin а также /usr/local/bin,

Большинство системных двоичных файлов (требуются права суперпользователя) находятся в /sbin,

Это просто правило. Вы можете разместить двоичные файлы везде, где вы хотите.

Смотрите также: Стандарт иерархии файловой системы

2. Могу ли я переместить эту команду туда?

Помимо возможного нарушения чего-либо, это не будет иметь абсолютно никакого эффекта.

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