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

Вступление

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

У специального пользователя, называемого root, есть привилегии суперпользователя. Это административная учетная запись без ограничений, которые имеются у обычных пользователей. Пользователи могут выполнять команды с привилегиями «суперпользователя» или «root» несколькими способами.

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

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

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

Как получить корневые привилегии

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

Вход как корень

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

Если вы входите на локальный компьютер (или используете вне конфигурированный доступ к консоли, если используете DigitalOcean), просто введите «root» в качестве своего имени в приглашении для входа и введите rootпароль при запросе.

Если вы регистрируетесь через SSH, укажите rootпользователя до IP-адреса или имени домена в строке подключения SSH:

  • ssh root@server_domain_or_IP

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

Используйте «su», чтобы стать корнем

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

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

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

  • su

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

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

  • exit

Используйте «sudo» для выполнения команд как корень

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

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

  • sudo command_to_execute

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

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

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

Что такое Visudo?

Команда sudoнастраивается через файл, расположенный в /etc/sudoers.

Предупреждение

Никогда не редактируйте этот файл с помощью обычного текстового редактора! Всегда используйте visudoкоманду вместо этого!

Поскольку неправильный синтаксис в /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`

Отправьте файл, чтобы выполнить изменения:

  • . ~/.bashrc

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

  • sudo visudo

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

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

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

/ и т.д. / 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

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

Строки по умолчанию

В первой строке «По умолчанию env_reset» сбрасывается среда терминала для удаления любых пользовательских переменных. Это мера безопасности, используемая для очистки потенциально опасных переменных окружающей среды от sudoсеанса.

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

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

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

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

  • root ALL=(ALL:ALL) ALL
    В первом поле указывается имя пользователя, которое правило применимо к ( root).
  • demo ALL=(ALL:ALL) ALL
    Первый «ALL» указывает, что это правило применяется ко всем хостам.
  • demo ALL=(ALL:ALL) ALL
    Это «ВСЕ» указывает, что rootпользователь может запускать команды как все пользователи.
  • demo ALL=(ALL:ALL) ALL
    Это «ВСЕ» указывает, что rootпользователь может запускать команды как все группы.
  • demo ALL=(ALL:ALL) ALL
    Последний «ВСЕ» указывает, что эти правила применяются ко всем командам.

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

Групповые привилегированные линии

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

Имена, начинающиеся с «%», указывают имена групп.

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

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

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

/ и т.д. / 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

/ и т.д. / sudoers

. . .
%wheel ALL=(ALL) ALL
. . .

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

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

Как создать псевдонимы

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

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

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

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

/ и т.д. / sudoers
. . .
GROUPTWO    ALL = /usr/bin/apt-get update
. . .

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

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

/ и т.д. / sudoers
. . .
Cmnd_Alias      POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE  ALL = POWER
. . .

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

Мы также можем создавать псевдонимы «Запуск от имени», которые могут заменить часть правила, определяющего пользователя для выполнения команды как:

/ и т.д. / sudoers
. . .
Runas_Alias     WEB = www-data, apache
GROUPONE    ALL = (WEB) ALL
. . .

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

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

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

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

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

/ и т.д. / sudoers
. . .
GROUPONE    ALL = NOPASSWD: /usr/bin/updatedb
. . .

NOPASSWDявляется «тегом», что означает, что пароль не запрашивается. Он имеет команду сопутствующей команды PASSWD, которая является поведением по умолчанию. Тег релевантен для остальной части правила, если не будет отменен его «близнецом» тегом позже по строке.

Например, у нас может быть такая строка:

/ и т.д. / sudoers
. . .
GROUPTWO    ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

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

Например, некоторые программы, такие как «меньше», могут порождать другие команды, введя это из интерфейса:

!command_to_run

Это в основном выполняет любую команду, которую пользователь дает ему с теми же правами, что и «меньше», что может быть довольно опасным.

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

/ и т.д. / 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

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

  • sudo -v

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

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

  • sudo -l

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

Существует много раз, когда вы выполняете команду, и она терпит неудачу, потому что вы забыли ее предисловие sudo. Чтобы избежать повторного ввода команды, вы можете воспользоваться функцией bash, которая означает «повторить последнюю команду»:

  • sudo !!

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

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

  • sudo visudo

/ и т.д. / sudoers

. . .
Defaults    insults
. . .

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

  • sudo -k
  • sudo ls

Output

[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привилегиями. Не принимайте на себя ответственность легкомысленно. Изучите лучший способ использования этих инструментов для вашего прецедента и заблокируйте любую функциональность, которая не нужна.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *