Как заставить 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$
В 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) произойдет одно из двух:
root
.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
. Команда не будет "дважды исправлять" какой-либо файл, поэтому его можно chron
ed или установите для запуска при запуске, чтобы убедиться, что ваши файлы в порядке. Обновления и установки могут перезаписывать их или создавать новые, у которых нет UGROUPS=
директива.
После того, как все это настроено и протестировано, вы должны отключить пользователя root:
$ sudo passwd -l root
Это строчная L, как в LOCK.
Затем следует установить или изменить PermitRootLogin no
в твоем /etc/ssh/sshd_config
файл. Это полезно, даже если вы заблокируете учетную запись root, на случай, если кто-то включит ее в будущем. sudo su -
все равно будет работать, даже если вы установите это значение, см. ниже, так что нет причин не устанавливать его.
Если вы решите не блокировать учетную запись root, это не идеально, поскольку любой может войти в консоль text / X / GNOME как root
и тогда случаются плохие вещи (консоль остается в системе или вы случайно удаляете кучу файлов ОС [спросите меня, откуда я знаю], лучше всего заблокировать учетную запись.
Иногда, например, при установке программного обеспечения, необходимо выполнить множество команд как root
и нежелательно иметь префикс каждого с sudo
. В этом случае у вас есть два варианта:
root
учетная запись: $ sudo su -
Эта команда предоставит вам ту же командную оболочку, как если бы вы вошли в учетную запись как root.$ sudo passwd root
Это позволит вам установить пароль и разблокировать учетную запись; тем не мение это не временно и вы должны не забыть заблокировать учетную запись пользователя после того, как закончите.