Где находится файл sudoers

Обновлено: 30.06.2024

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

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

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

Примечание: Данное руководство было выполнено на сервере Ubuntu 12.04, однако большинство современных дистрибутивов Linux будут вести себя аналогичным образом.

Для выполнения руководства нужно предварительно выполнить начальную настройку сервера:

Войдите на сервер как не-root пользователь.

Как получить права root

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

Проще всего, конечно, войти в систему как пользователь root.

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

По запросу введите root-пароль.

Команда su

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

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

Примечание: Команда su – это сокращение от substitute user.

Итак, чтобы получить root-права, просто введите:

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

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

Команда sudo

Последний способ получения привилегий root – команда sudo.

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

Примечание: В отличие от su, команда sudo запрашивает не пароль root, а пароль пользователя, который вызывает команду.

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

Что такое Visudo?

Команда sudo настраивается при помощи файла /etc/sudoers.

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

Неправильный синтаксис, добавленный в этот файл, может полностью нарушить распределение прав между пользователями. Потому для работы с этим файлом используется команда visudo.

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

Как правило, visudo открывает файл /etc/sudoers в редакторе vi. В системе Ubuntu visudo использует nano.

Чтобы настроить команду visudo для использования vi в системе Ubuntu, выполните команду:

sudo update-alternatives --config editor

Выберите число, соответствующее текстовому редактору, который вы хотите использовать.

В системе CentOS это значение можно изменить, добавив в

Чтобы обновить настройки, введите:

Чтобы открыть /etc/sudoers, введите:

Редактирование файла sudoers

Итак, в выбранном вами текстовом редакторе на экране откроется файл sudoers.

Ниже приведены параметры файла системы Ubuntu 12.04 (закомментированные строки опущены, а изменения, внесённые при начальной настройке сервера, сохранены).

Примечание: Файл sudoers системы CentOS гораздо более объёмен; некоторые его параметры в этом руководстве не описаны.

Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root ALL=(ALL:ALL) ALL
demo ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL

Стандартные параметры

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

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

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

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

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

Параметры привилегий групп

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

Имена групп начинаются с символа %.

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

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

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

Создание алиасов

Файл sudoers можно более удобно структурировать при помощи различных алиасов (англ. – alias).

К примеру, можно создать три разные группы пользователей с совмещёнными правами:

User_Alias GROUPONE = abby, brent, carl
User_Alias GROUPTWO = brent, doris, eric,
User_Alias GROUPTHREE = doris, felicia, grant

Имена групп должны начинаться с большой буквы. После этого можно дать пользователям GROUPTWO право на изменение БД apt-get:

GROUPTWO ALL = /usr/bin/apt-get update

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

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

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

Алиас команды POWER содержит команды для отключения и перезапуска машины.

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

Runas_Alias WEB = www-data, apache
GROUPONE ALL = (WEB) ALL

Теперь любой пользователь группы GROUPONE может выполнять команды в сессиях пользователей www-data или apache.

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

Блокировка правил

Существует ряд способов контроля поведения и реакции sudo на вызов.

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

GROUPONE ALL = NOPASSWD: /usr/bin/updatedb

Команда NOPASSWD значит, что система не будет запрашивать пароль. Также существует команда PASSWD, которая отвечает за противоположное поведение и используется по умолчанию.

NOPASSWD распространяется на всё правило, если команда PASSWD не отменяет его. Например, строка может выглядеть так:

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

Ещё одна удобная команда – NOEXEC, которая используется для предотвращения опасного поведения определенных программ. К примеру, некоторые команды, такие как less, могут вызывать другие команды:

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

Чтобы запретить такое поведение, можно использовать следующую строку:

username ALL = NOEXEC: /usr/bin/less

Дополнительные сведения

В данном разделе собраны различные полезные советы по работе с sudo.

Если вы указали пользователя или группу в параметре Run as, вы можете выполнять команды в сессии этого пользователя при помощи флагов -u и –g соответственно:

sudo -u run_as_user command
sudo -g run_as_group command

По умолчанию sudo сохраняет учётные данные в одном терминале на некоторое время. Это означает, что в течение этого периода вам не придется вводить пароль снова.

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

Чтобы узнать права пользователя, введите:

Эта команда выведет все права, указанные в файле /etc/sudoers для данного пользователя.

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

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

Заключение

Теперь у вас есть базовые навыки работы с файлом sudoers и правами root.

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

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

Прокачайте ваш проект, воспользовавшись скидками на VPS-хостинг в Hostinger! Большой выбор планов, как для учебных, так и для крупных коммерческих проектов.

Как Работает Команда Sudo

Чтобы увидеть, как работает команда sudo, сначала следует получить доступ к вашему VPS через SSH. Если возникнут проблемы, ознакомьтесь с нашим руководством по PuTTY.

По умолчанию пользователям root не нужно использовать префикс sudo. У них уже есть все возможные привилегии. Между тем, если пользователь без полномочий root хочет добавить другого пользователя, он должен добавить префикс sudo к команде useradd, например так:

Если пользователь не использует префикс sudo, в выводе он увидит “В разрешении отказано”, или “ Permission denied ”.

Файл Sudoers

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

С помощью команды sudo вы предоставляете привилегии административного уровня обычным пользователям. Обычно первый пользователь, которого вы создаёте при установке Ubuntu, имеет права sudo. В среде VPS это пользователь root по умолчанию. Вы можете изменить настройки таким образом, чтобы другие пользователи также могли запускать команду sudo. Сделать это можно путём редактирования sudoers.

Важно: будьте осторожны! Редактирование файла sudoers с ошибками или неправильным синтаксисом может привести к блокировке всех пользователей в вашем дистрибутиве.

Синтаксис файла Sudoers

Вы можете открыть файл в любом текстовом редакторе, который вам нравится. Мы будем использовать vi :

Наш файл VPS выглядит следующим образом:

Пример Файла Sudoers

Давайте рассмотрим некоторые форматы и правила, которых следует придерживаться, редактируя sudoers:

Редактируем Файл Sudoers

Чтобы изменить файл /etc/sudoers , используйте следующую команду:

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

Чтобы увидеть, какие пользователи входят в группу sudo, мы можем использовать команду grep (англ):

Это действие выведет список имён пользователей.

Чтобы добавить пользователя с именем Билл в группу sudo, мы используем команду adduser в командной строке, например:

Если мы используем команду grep для проверки того, кто входит в группу, мы увидим пользователя с именем Билл.

Если вы хотите дать кому-либо привилегии root, просто добавьте их в sudo.

Чтобы удалить пользователя из sudo:

Команда deluser удалит Билла из группы sudo.

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

Используем Файл Sudoers, Чтобы Настроить Определённые Привилегии

Что, если мы хотим, чтобы Билл мог запускать только определённые виды команд с привилегиями sudo, например команду, связанную с доступом к сети?

Для этого мы создаем файл конфигурации в /etc/sudoers.d/ и называем его networking.

Используйте следующую команду для создания файла:

Добавьте следующий текст в файл:

В приведенном выше файле мы создали группу netadmin. Пользователи в группе netadmin могут запускать команды, указанные в NETALL. NETALL, в свою очередь, включает все команды под псевдонимами CAPTURE и SERVERS. Команда tcpdump находится под псевдонимом CAPTURE, например, /usr/sbin/tcpdump.

Далее мы добавляем пользователя с именем Билл в группу netadmin:

Теперь пользователь Билл сможет запускать команду tcpdump вместе с другими командами, связанными с сетью.

Итоги

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

Ольга уже около пяти лет работает менеджером в сфере IT. Написание технических заданий и инструкций — одна из её главных обязанностей. Её хобби — узнавать что-то новое и создавать интересные и полезные статьи о современных технологиях, веб-разработке, языках программирования и многом другом.

sudo (англ. substitute user do, дословно «подменить пользователя и выполнить») позволяет системному администратору делегировать полномочия, чтобы дать некоторым пользователям (или группе пользователей) возможность запускать некоторые (или все) команды c правами суперпользователя или любого другого пользователя, обеспечивая контроль над командами и их аргументами.

Contents

Обоснование

Sudo - это альтернатива su для выполнения команд с правами суперпользователя (root). В отличие от su, который запускает оболочку с правами root и даёт всем дальнейшим командам root права, sudo предоставляет временное повышение привилегий для одной команды. Предоставляя привилегии root только при необходимости, использование sudo снижает вероятность того, что опечатка или ошибка в выполняемой команде произведут в системе разрушительные действия.

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

Установка

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

Использование

Пользователи могут предварять команды словом sudo , чтобы исполнять их с привилегиями суперпользователя (или другого пользователя).

Например, для использования pacman:

Смотрите руководство по sudo для получения дополнительной информации.

Настройка

Просмотр текущих настроек

Выполните sudo -ll для вывода текущей конфигурации sudo.

Использование visudo

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

  • Крайне важно, чтобы файл sudoers был без синтаксических ошибок! Любая ошибка делает sudo неработоспособным. Всегда редактируйте его только с помощью visudo для предотвращения ошибок.
  • Из visudo(8) : Обратите внимание, что это дыра в безопасности, поскольку позволяет пользователю запускать любую программу, какую он захочет, просто прописав её в VISUAL или EDITOR.

visudo использует vi в качестве текстового редактора по умолчанию. В core репозитории sudo скомпилирована с --with-env-editor по умолчанию и использует переменные VISUAL и EDITOR . EDITOR не используется, если задана переменная VISUAL .

Чтобы сделать nano редактором visudo в течение текущего shell сеанса, задайте и экспортируйте переменную EDITOR перед тем, как выполнять visudo.

Он будет использован, если вы не определили другой редактор, установив переменные окружения VISUAL или EDITOR (используемые в таком порядке) в качестве желаемого редактора, например nano . Выполните команду с правами суперпользователя:

Для изменения редактора на постоянной основе для текущего пользователя, прочтите установка переменных окружения для пользователя. Для того, чтобы установить выбранный редактор на постоянной основе для всей системы, но только для visudo , добавьте следующее в /etc/sudoers (предположим, что вы предпочитаете nano в качестве редактора):

Примеры настроек

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

Разрешить пользователю выполнять все команды от любого пользователя, но только на машине с определенным названием хоста:

Предоставить членам группы wheel доступ sudo:

Чтобы не спрашивать пароль у пользователя:

Разрешить выполнять только конкретные команды и только пользователю на определенном хосте:

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

Разрешить выполнять конкретно определённые команды только для пользователя на определенном хосте и без пароля:

Подробный пример для sudoers доступен в /usr/share/doc/sudo/examples/sudoers . Также смотрите руководство по sudoers для получения более подробной информации.

Права доступа к файлам sudoers по умолчанию

Файл sudoers должен иметь владельца root и группу root (0). Права доступа всегда должны быть установлены как r--r----- (0440). Эти права установлены по умолчанию, однако если вы случайно измените их, они должны быть немедленно изменены обратно, иначе sudo не будет работать.

Время действия введённого пароля

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

Например, чтобы установить тайм-аут на 20 минут:

Совет: Если вы хотите чтобы sudo всегда требовал ввод пароля, установите timestamp_timeout равным 0. Чтобы срок действия пароля никогда не истекал, установите любое отрицательное значение.

Советы и рекомендации

Автодополнение по нажатию Tab в bash

Один тайм-аут на все сеансы терминала

Важно: Это позволит любому процессу воспользоваться вашим открытым сеансом sudo.

Если вы не хотите вводить пароль снова каждый раз, когда открываете новый терминал, отключите tty_tickets:

Всегда показывать замечание о безопасности

По умолчанию, /etc/sudoers настроен так, что sudo выводит замечание о безопасности только при первом открытии сеанса:

или просто добавьте эту строку, если её нет.

Переменные окружения

Если у вас много переменных окружения или вы экспортировали ваши настройки прокси через export http_proxy=". " , когда вы используете sudo, эти переменные не будут переданы в открытый сеанс, если вы не запустите sudo в опцией -E .

Рекомендованный способ сохранения переменных окружения - это прописать их в env_keep :

Перенос псевдонимов

/.bashrc или /etc/bash.bashrc строку:

Шутливые оскорбления

Для проверки, введите sudo -K , чтобы завершить текущий сеанс и позволить sudo заново запросить пароль.

Пароль суперпользователя

Вы можете сконфигурировать sudo так, чтобы он спрашивал пароль суперпользователя вместо пароля текущего пользователя, добавив targetpw или rootpw в список опций Defaults в /etc/sudoers :

Чтобы не разглашать пароль root пользователям, вы можете запретить это определённым группам:

Отключение учетной записи root

Важно: Будьте осторожны. Вы можете попасть в свою ловушку, если отключите вход систему пользователя root. Sudo по умолчанию не установлен, и его стандартная конфигурация не позволяет ни получить доступ к правам root без пароля, ни дать такой доступ вам по вашему собственному паролю. Убедитесь, что пользователь правильно сконфигурирован как sudoer перед отключением аккаунта суперпользователя! Примечание: Если вы уже попали в ловушку, смотрите Password Recovery (Русский) для получения помощи.

Пароль пользователя root можно заблокировать с помощью passwd :

Аналогичная команда разблокирует пароль пользователя root:

Также вы можете отредактировать /etc/shadow и заменить зашифрованный пароль root на "!":

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

Чтобы gksu использовал sudo по умолчанию, выполните:

kdesu

kdesu можно использовать в KDE для запуска графических программ с привилегиями суперпользователя. Вероятно, что kdesu по умолчанию будет пытаться использовать su, даже если аккаунт root отключен. К счастью, можно сказать kdesu использовать sudo вместо su. Создайте/отредактируйте файл

/.config/kdesurc для kf5 версии kdesu):

или используйте следующую команду (используйте kwriteconfig5 для kf5 версии kdesu):

Также вы можете установить kdesudo AUR из AUR, который поддерживает улучшенное автодополнение по Tab при вводе команды.

Еще один пример настройки

Допустим, вы создали 3 пользователей: admin, devel и joe. Пользователь "admin" используется для journalctl, systemctl, mount, kill и iptables; "devel" используется для установки пакетов и редактирования настроек; "joe" - пользователь, под которым вы вошли в систему. Чтобы разрешить "joe" перезагружаться, выключать систему и использовать netctl, мы должны сделать следующее:

Отредактировать /etc/pam.d/su и /etc/pam.d/su-1 Потребовать, чтобы пользователь был в группе wheel, но никого в неё не добавлять.

Ограничить вход по SSH для группы 'ssh'. В эту группу будет входить только "joe".

Добавить пользователей в другие группы.

Установить права на настройки так, чтобы devel мог редактировать их.

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

"Joe" может подсоединиться к своему домашнему WiFi.

"Joe" не может использовать netctl от имени другого пользователя.

Когда "joe" хочет воспользоваться journalctl или убить зависший процесс, он может переключиться на нужного пользователя:

Но "joe" не может переключиться на суперпользователя.

Если "joe" хочет начать gnu-screen сессию как admin, он может сделать это следующим образом:

Настройка sudo с помощью вкладываемых в /etc/sudoers.d файлов

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

  • Вам не понадобится редактировать файл sudoers.pacnew ;
  • Если с новой записью будет проблема, вы можете просто уничтожить соответствующий файл, вместо необходимости редактировать /etc/sudoers .

Формат записей в этих вкладываемых файлах такой же, как и в самом файле /etc/sudoers . Чтобы редактировать их напрямую, используйте visudo -f /path/to/file . Смотрите раздел Including other files from within sudoers в sudoers(5) для дополнительной информации.

Решение проблем

Проблемы с TTY через SSH

По умолчанию SSH не выделяет tty при выполнении удалённой команды. Без tty sudo не может отключить отображение пароля при его вводе. Вы можете воспользоваться ssh опцией -tt , чтобы заставить его выделять tty (или -t дважды).

Defaults опция requiretty всего лишь позволяет запускать sudo пользователям, если они имеют tty.

Показать привилегии пользователя

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

Или узнать ваши собственные привилегии командой:

Наложение umask

Это установит sudo umask в umask суперпользователя по умолчанию (0022) и переопределит поведение по умолчанию, всегда используя указанную umask и независимо от umask пользователя.

Опции по умолчанию

На сайте авторов есть список всех опций, которые можно использовать с командой Defaults в файле /etc/sudoers .

Смотрите [1] список опций (извлечён из исходного кода версии 1.8.7) представленный в формате, оптимизированном для sudoers .

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

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

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

Мы выполним эти действия на сервере Ubuntu 20.04, но данная процедура будет выглядеть примерно так же и на других современных дистрибутивах Linux, таких как Debian и CentOS.

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

Примечание. В этом учебном модуле подробно рассказывается об эскалации прав и о файле sudoers . Если вы просто хотите предоставить пользователю права sudo , воспользуйтесь нашими краткими учебными модулями Создание нового пользователя с правами Sudo для Ubuntu и CentOS.

Получение привилегий root

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

Войдите в систему как пользователь Root

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

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

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

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

Использование su для получения прав root

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

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

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

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

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

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

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

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

В связи с вопросами безопасности доступ sudo не предоставляется пользователям по умолчанию, и его необходимо настроить перед использованием. Ознакомьтесь с нашими краткими руководствами Создание нового пользователя с привилегиями Sudo для Ubuntu и CentOS, чтобы научиться настраивать нового пользователя с правами sudo .

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

Что такое Visudo?

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

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

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

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

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

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

Выберите число, соответствующее желаемому варианту выбора.

В CentOS для изменения этого значения можно добавить следующую строку в

Исходный файл для внесения изменений:

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

Изменение файла Sudoers

Файл /etc/sudoers откроется в выбранном вами текстовом редакторе.

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

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

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

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

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

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

Строки пользовательских привилегий

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

root ALL=(ALL:ALL) ALL Первое поле показывает имя пользователя, которое правило будет применять к (root).

root ALL =(ALL:ALL) ALL Первое “ALL” означает, что данное правило применяется ко всем хостам.

root ALL=( ALL :ALL) ALL Данное “ALL” означает, что пользователь root может запускать команды от лица всех пользователей.

root ALL=(ALL: ALL ) ALL Данное “ALL” означает, что пользователь root может запускать команды от лица всех групп.

root ALL=(ALL:ALL) ALL Последнее “ALL” означает, что данные правила применяются всем командам.

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

Строки групповых привилегий

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

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

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

Строка Included /etc/sudoers.d

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

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

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

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

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

Присвоение пользователю привилегий Sudo

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

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

Например, в Ubuntu 20.04 группа sudo имеет полные привилегии администратора. Добавляя пользователя в эту группу, мы предоставляем ему такие же привилегии:

Также можно использовать команду gpasswd :

Обе команды выполняют одно и то же.

В CentOS эта группа обычно называется wheel , а не sudo :

Также можно использовать gpasswd :

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

Настройка персонализированных правил

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

Создание псевдонимов

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

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

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

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

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

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

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

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

Необходимо помнить, что в случае конфликта правил более поздние правила имеют приоритет перед более ранними.

Фиксация правил

Есть ряд способов, которые позволяют более точно контролировать реакцию sudo на вызов.

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

NOPASSWD — это свойство, означающее, что пароль не запрашивается. У него есть сопутствующее свойство PASSWD , которое используется по умолчанию и требует ввода пароля. Данное свойство актуальной для остальной части строки, если его действие не переопределяется дублирующим тегом в этой же строке.

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

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

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

При этом все команды пользователя выполняются с теми же разрешениями, что и команда less , что может быть довольно опасно.

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

Прочая информация

При работе с sudo может быть полезна следующая информация.

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

Читайте также: