Назад | Перейти на главную страницу

Настройте RHEL / CentOS 5 для использования SUDO в командной строке и X

Как заставить CentOS / RHEL запрашивать мой пароль (а не корни), когда я запускаю привилегированную команду. Я нашел много руководств, в которых подробно описано, как это сделать для командной строки, но я хочу, чтобы это работало и для приложений X windows.

Или другими словами: как заставить RHEL / CentOS вести себя как Ubuntu.

Настройка терминала

Как root нам нужно отредактировать /etc/sudoers файл, запустив visudo (ПРИМЕЧАНИЕ: вы можете export EDITOR=vim чтобы получить подсветку синтаксиса, или воспользуйтесь редактором по вашему выбору).
Вокруг строк 83,86 вы должны увидеть две похожие строки (в vim вы можете запустить :set number чтобы показать номера строк):

83 # %wheel  ALL=(ALL)       ALL
84
85 ## Same thing without a password
86 # %wheel  ALL=(ALL)       NOPASSWD: ALL

Разница в том, что строка №83 потребует от пользователя ввести их пароль для аутентификации, тогда как строка № 86 позволит пользователю sudo без повторного запроса пароля. Лучшие практики безопасности заявляют, что # 83 более безопасен; однако, в зависимости от вашей ситуации, # 86 может быть подходящим (например, я обычно использую # 86 при настройке сервера, а затем переключаюсь на # 83).

Выйдите и сохраните этот файл.

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

$ usermod -a -G wheel erebusbat

Эта команда добавит пользователя erebusbat в группу wheel, в сочетании с нашим предыдущим изменением, все они будут запускать любую команду от имени root:

erebusbat@centos$ sudo whoami
root
erebusbat@centos$

Настройка X / GNOME

В CentOS / RHEL 5 и ниже аутентификация X обрабатывается набором программ, называемых consolehelper и userhelper. В основном происходит следующее: когда пользователь выполняет программу (скажем, pirut) он проверяет, есть ли файлы с именем pirut в папке /etc/security/console.apps/ если мы посмотрим на один из этих файлов, он будет выглядеть так:

USER=root
PROGRAM=/usr/sbin/pirut
SESSION=true
KEEP_ENV_VARS=http_proxy,ftp_proxy

Это говорит consolehelper/userhelper чтобы позволить пользователю аутентифицироваться и запускать программу как root. Если мы man userhelper мы видим, что можем добавить UGROUPS= директива, чтобы, если бы пользователь был в этой группе, ему было бы разрешено аутентифицироваться как они сами, но запускать приложение от имени пользователя, указанного в USER= директива. Так что pirut файл должен выглядеть так:

USER=root
UGROUPS=wheel
PROGRAM=/usr/sbin/pirut
SESSION=true
KEEP_ENV_VARS=http_proxy,ftp_proxy

Как только мы вносим это изменение всякий раз, когда пытаемся запустить pirut как обычный пользователь (Установка и удаление программ из меню GNOME) произойдет одно из двух:

  1. Нам будет предложено ввести НАШ пароль, и программа запустится как root.
  2. Нам будет предложено ввести rootпароль, если текущего пользователя нет в wheel группа.

Однако изменение всех этих файлов вручную может быть PIA, поэтому мы работаем с умом, а не усерднее:

$ cd /etc/security/console.apps/
$ sudo su -
$ pcregrep -ML '^UGROUPS=' * | xargs sed -i 's/^USER=root/USER=root\nUGROUPS=wheel/' 

В sudo su - команда не нужна, если вы сейчас root. Команда не будет "дважды исправлять" какой-либо файл, поэтому его можно chroned или установите для запуска при запуске, чтобы убедиться, что ваши файлы в порядке. Обновления и установки могут перезаписывать их или создавать новые, у которых нет UGROUPS= директива.

Отключение пользователя root

После того, как все это настроено и протестировано, вы должны отключить пользователя root:

$ sudo passwd -l root

Это строчная L, как в LOCK.

Затем следует установить или изменить PermitRootLogin no в твоем /etc/ssh/sshd_config файл. Это полезно, даже если вы заблокируете учетную запись root, на случай, если кто-то включит ее в будущем. sudo su - все равно будет работать, даже если вы установите это значение, см. ниже, так что нет причин не устанавливать его.

Если вы решите не блокировать учетную запись root, это не идеально, поскольку любой может войти в консоль text / X / GNOME как root и тогда случаются плохие вещи (консоль остается в системе или вы случайно удаляете кучу файлов ОС [спросите меня, откуда я знаю], лучше всего заблокировать учетную запись.

Запуск от имени root в течение длительного времени

Иногда, например, при установке программного обеспечения, необходимо выполнить множество команд как root и нежелательно иметь префикс каждого с sudo. В этом случае у вас есть два варианта:

  1. Временно переключитесь на root учетная запись: $ sudo su - Эта команда предоставит вам ту же командную оболочку, как если бы вы вошли в учетную запись как root.
  2. Разблокируйте учетную запись root: $ sudo passwd root Это позволит вам установить пароль и разблокировать учетную запись; тем не мение это не временно и вы должны не забыть заблокировать учетную запись пользователя после того, как закончите.