ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как редактировать файл Sudoers на Ubuntu и CentOS

Как редактировать файл Sudoers на Ubuntu и CentOS

Разделение привилегий является одним из основных парадигм безопасности, реализованных в Linux и Unix-подобных операционных систем. Обычные пользователи работают с ограниченными правами в целях сокращения масштабов их влияния на их собственной среде, а не более широкую операционную систему.

Специальный пользователь, который называется root, имеет привилегии “super-user”. Это административная учетная запись без ограничений, которая присутствуют у обычных пользователей. Пользователи могут выполнять команды с привилегиями “super-user” или “root” в ряде различных способов.

В этой статье мы рассмотрим, как правильно и надежно получить привилегии root, с особым акцентом на редактирование файла /etc/sudoers.

Мы завершим эти шаги на сервере Ubuntu 16.04, но большинство современных дистрибутивов Linux должны действовать таким же образом.

Эта статья предполагает, что вы уже завершили первоначальную настройку сервера. Войдите на свой сервер через ssh как обычный, не суперпользователь.

Как получить привилегии суперпользователя

Существуют три основных способа получить привилегии root, которые варьируются по уровню сложности.

 

Войти как root

Самый простой и наиболее прямой метод получения привилегий root просто войти на свой сервер как пользователь root с самого начала.

При входе в локальную машину, просто введите “root” в качестве имени пользователя при входе в систему строке и введите пароль root, когда его спросили.

При входе через SSH, укажите пользователя root перед IP – адресом или имя домена в строке подключения SSH:

ssh root@server_domain_or_IP

 

Если вы не настроили ключи SSH для пользователя root, введите пароль root при появлении соответствующего запроса.

 

Используйте “su”, чтобы стать root

Входить в систему, как root не рекомендуется, потому что легко начать использовать систему для неадминистративных задач, что является опасным.

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

Мы можем сделать это, вызвав команду su, которую указывают перед  пользователем. Для того, чтобы получить привилегии root, просто наберите:

su

 

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

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

exit

 

Используйте “sudo” для выполнения команд, как root

Окончательный, и самый сложный, способ получения привилегий root, которые мы обсудим это с командой sudo.

Команда sudo позволяет выполнить однократные команды с привилегиями root, без необходимости плодить новую оболочку. Она выполняется следующим образом :

sudo command_to_execute

 

В отличие su, команда sudo будет запрашивать пароль пользователя, команду вызывающего, а не пароль root.

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

В следующем разделе мы рассмотрим, как изменить конфигурацию более подробно.

Что такое visudo?

Команда sudo настраивается с помощью файла, расположенного по адресу /etc/sudoers.

Из-за неправильного синтаксиса в файле /etc/sudoers может оставить вас с системой, где невозможно будет получить повышенные привилегии, важно использовать команду visudo для редактирования файла.

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

Традиционно открывает visudo файл /etc/sudoers с текстовым редактором vi. Ubuntu, однако, настроен использовать visudo текстовый редактор nano вместо этого.

Если вы хотели бы изменить его обратно на vi, выполните следующую команду:

sudo update-alternatives --config editor

 

Output
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press <enter> to keep the current choice[*], or type selection number:

 

Выберите номер, который соответствует выбору, который вы хотели бы сделать.

На CentOS, вы можете изменить это значение, добавив следующую строку в файл ~/.bashrc:

export EDITOR=`which name_of_editor`

 

Файл Source, чтобы осуществить изменения:

. ~/.bashrc

 

После того, как вы настроили visudo, выполните команду , чтобы получить доступ к файлу /etc/sudoers:

sudo visudo

 

Как изменить файл sudoers

Вам будет предложен файл /etc/sudoers в выбранном текстовом редакторе.

Мы скопировали и вставили файл с Ubuntu 16.04, комментариями удалены. В CentOS файл /etc/sudoers имеет намного больше строк, некоторые из которых мы не будем обсуждать в этой статье.

/etc/sudoers
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

 

Давайте посмотрим на то, что делают эти строки.

 

По умолчанию

Первая строка, “Defaults env_reset”, сбрасывает терминальную среду, чтобы удалить любые пользовательские переменные. Это мера безопасности используется для очистки потенциально вредных переменных из сессии sudo.

Вторая линия, Defaults mail_badpass, сообщает системе по почте уведомления о плохих попыток ввода пароля sudo на настроенный пользователем mailto. По умолчанию это учетная запись root.

Третья линия, которая начинается с “Defaults SECURE_PATH = …”, определяет PATH (место в файловой системе операционной системе будет выглядеть для приложений) , которые будут использоваться для операций sudo. Это предотвращает пользователей с использованием путей, которые могут быть вредными.

 

Привилегированный пользователь

Четвертая строка, которая диктует пользователю root привилегии sudo, отличается от предыдущих линий. Давайте посмотрим на то, что означают различные поля:

Это означает, что наш пользователь root может выполнить любую команду с помощью sudo до тех пор , пока они обеспечивают свой пароль.

Группа Privilege

Следующие две строки похожи на привилегии root, но они задают правила для групп sudo.

Имена, начинающиеся с “%” обозначают имена групп.

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

Включение /etc/sudoers.d

Последняя строка может выглядеть следующим комментарием на первый взгляд:

/etc/sudoers
. . .

#includedir /etc/sudoers.d

Это действительно начинаются с #, который обычно указывает на комментарий. Тем не менее, эта линия на самом деле указывает на то, что файлы в каталоге /etc/sudoers.d будут получены и применены.

Файлы в этой папке следуют тем же правилам, что и сам файл /etc/sudoers. Любой файл, который не заканчивается на ~ и не имеет . в нем будут читаться и применяться к конфигурации sudo.

Это в основном предназначено для приложений, чтобы изменить привилегии sudo при установке. Ввод всех соответствующих правил в пределах одного файла в каталоге /etc/sudoers.d может сделать его легко увидеть, какие привилегии связаны с которыми приходится и нейтрализация учетные данные легко, без необходимости, чтобы попытаться манипулировать файл /etc/sudoers напрямую.

Как и сам файл /etc/sudoers, вы всегда должны редактировать файлы в каталоге /etc/sudoers.d с visudo. Синтаксис для редактирования этих файлов будет выглядеть так:

sudo visudo -f /etc/sudoers.d/file_to_edit

 

Как дать пользователю привилегии Sudo

Наиболее распространенной операцией, которую пользователи хотят, чтобы выполнить при управлении с правами sudo заключается в предоставлении нового общего пользовательского sudo доступа. Это полезно, если вы хотите дать полный административный доступ к системе.

Самый простой способ сделать это на системе, созданной с общей целью группы администрирования, как системы Ubuntu в данном руководстве, на самом деле просто добавить пользователя в вопрос к этой группе.

К примеру, на Ubuntu 16.04, то группа sudo имеет полные права администратора. Мы можем предоставить пользователю такие же привилегии, добавляя их к группе, примерно так:

sudo usermod -aG sudo username

 

Команда gpasswd также может быть использована:

sudo gpasswd -a username sudo

 

Они оба будут делать то же самое.

На CentOS, это, как правило, группа wheel вместо группы sudo:

sudo usermod -aG wheel username

 

Или, используя gpasswd:

sudo gpasswd -a username wheel

 

На CentOS, при добавлении пользователя к группе не сразу работает, вам, возможно, придется отредактировать файл /etc/sudoers имя группы:

sudo visudo

 

/etc/sudoers
. . .
%wheel ALL=(ALL) ALL
. . .

Как настроить пользовательские правила

Теперь, когда мы стали знакомы с общим синтаксисом файла, давайте создадим некоторые новые правила.

Как создать aliases

Файл sudoers может быть организован более легко группируя вещи с различными видами “aliases”.

Например, мы можем создать три различные группы пользователей, с дублированием членства:

/etc/sudoers
. . .
User_Alias      GROUPONE = abby, brent, carl
User_Alias      GROUPTWO = brent, doris, eric, 
User_Alias      GROUPTHREE = doris, felicia, grant
. . .

 

Имена групп должны начинаться с заглавной буквы. Затем мы можем разрешить членам GROUPTWO обновить apt базу данных путем создания правила, как здесь:

/etc/sudoers
. . .
GROUPTWO    ALL = /usr/bin/apt-get update
. . .

 

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

Мы можем позволить членам GROUPTHREE выключать и перезагружать машину, создав “команду alias” и используя в правиле для GROUPTHREE:

/etc/sudoers
. . .
Cmnd_Alias      POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE  ALL = POWER
. . .

 

Мы создаем команду псевдоним с именем POWER которое содержит команды для выключения питания и перезагрузки машины. Затем мы позволяем членам GROUPTHREE выполнить эти команды.

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

/etc/sudoers
. . .
Runas_Alias     WEB = www-data, apache
GROUPONE    ALL = (WEB) ALL
. . .

 

Это позволит любому, кто является членом GROUPONE для выполнения команд в качестве пользователя www-data или пользователя apache.

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

Как заблокировать правила

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

Команда updatedb, связанная с пакетом mlocate относительно безвредны на однопользовательской системе. Если мы хотим, чтобы пользователи могли выполнить его с привилегиями root без необходимости вводить пароль, мы можем создать правило, следующим образом:

/etc/sudoers
. . .
GROUPONE    ALL = NOPASSWD: /usr/bin/updatedb
. . .

 

NOPASSWD является “тэг”, это означает, что пароль не будет предложен. Он имеет команду под названием PASSWD, которая является поведением по умолчанию. Тег имеет важное значение для остальной части правила, если оно не будет отменено меткой “twin” позже вниз по линии.

Например, мы можем иметь такую ​​строку:

/etc/sudoers
. . .
GROUPTWO    ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

 

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

Например, некоторые программы, такие как “less”, могут порождать другие команды, введя это из их интерфейса:

!command_to_run

 

Это в основном выполняет любую команду пользователя выдает его с теми же правами, что и “less” работая под управлением, которые могут быть весьма опасными.

Чтобы ограничить это, мы могли бы использовать такую ​​строку:

/etc/sudoers
. . .
username  ALL = NOEXEC: /usr/bin/less
. . .

Различная информация

Есть еще информации, которая может быть полезна при работе с sudo.

Если вы указали пользователя или группу, чтобы “запустить” в конфигурационном файле, вы можете выполнять команды с помощью других пользователей, с помощью флагов “-u” и “-g”, соответственно:

sudo -u run_as_user command
sudo -g run_as_group command

 

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

В целях безопасности, если вы хотите очистить этот таймер, когда вы закончите работать с административными командами, вы можете запустить:

sudo -k

 

Если же, с другой стороны, вы хотите “prime” команду sudo, так что вам не будет предложено позже, или продлить sudo, вы всегда можете набрать:

sudo -v

 

Вам будет предложено ввести пароль, который будет кэшируются для последующего использования sudo, пока не истекут временные рамки sudo.

Если вам просто интересно, какие привилегии определены для вашего имени пользователя, вы можете ввести:

sudo -l

 

Это будет список всех правил в файле /etc/sudoers, которые применяются к вашему пользователю. Это дает вам хорошее представление о том, что вам будет или не будет позволено делать с любым пользователем sudo.

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

sudo !!

 

Двойной восклицательный будет повторять последнюю команду. Мы указали sudo, чтобы быстро изменить непривилегированную команду к привилегированному команде.

Вы можете добавить следующую строку в файл /etc/sudoers с visudo:

sudo visudo

 

/etc/sudoers
. . .
Defaults    insults
. . .

Это приведет к тому, sudo чтобы вернуть сообщение, когда пользователь вводит неправильный пароль для sudo. Мы можем использовать sudo -k чтобы очистить предыдущий sudo кэшированный пароль, чтобы попробовать его:

sudo -k
sudo ls

 

Вывод
[sudo] password for demo:    # enter an incorrect password here to see the results
Your mind just hasn't been the same since the electro-shock, has it?
[sudo] password for demo: 
My mind is going. I can feel it.

Вывод

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

Помните, что привилегии супер-пользователя не даются обычным пользователям по известной причине. Крайне важно, чтобы вы поняли, что каждая команда что-то делает, когда вы выполняете с привилегиями root. Не берите на себя ответственность легкомысленно. Знайте, лучший способ использовать эти инструменты для вашего сценария использования, и заблокировать любую функциональность, которая не требуется.

Exit mobile version