Как контролировать доступ к sudo в Linux

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

sudo и права root

Мы все слышали (чрезмерное упрощение), что все в Linux — это файлы. По правде говоря, практически все в операционной системе — от процессов, файлов, каталогов, сокетов и каналов — взаимодействует с ядром через файловый дескриптор. Таким образом, хотя все не является файлом, большинство объектов операционной системы обрабатываются так, как если бы они были. По возможности, Linux и Unix-подобные операционные системы придерживаются этого принципа.

Концепция «все является файлом» широко распространена в Linux. Тогда легко увидеть, как права доступа к файлам в Linux стали одной из опор привилегий и прав пользователей. Если у вас есть файл или каталог (особый вид файла), вы можете делать с ними все, что захотите, включая редактирование, переименование, перемещение и удаление. Вы также можете установить разрешения для файла, чтобы другие пользователи или группы пользователей могли читать, изменять или выполнять файл. Все регулируются этими разрешениями.

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

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

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

Список sudoers

sudo уже был установлен на компьютерах Ubuntu 18.04.3, Manjaro 18.1.0 и Fedora 31, использованных для исследования этой статьи. Это не удивительно. sudo существует с начала 1980-х и стал стандартным средством работы суперпользователя почти для всех дистрибутивов.

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

Конечно, было бы безрассудно раздавать полный статус суперпользователя волей-неволей или кому-либо, у кого есть лишь частичная или конкретная потребность. Список sudoers позволяет указать, с какими командами различные пользователи могут использовать sudo. Таким образом, вы не дадите им ключи от королевства, но они все равно смогут выполнить то, что им нужно.

Выполнение команды от имени другого пользователя

Первоначально это называлось «superuser do», потому что вы могли делать что-то как суперпользователь. Теперь его область применения расширилась, и вы можете использовать sudo для выполнения команды, как если бы вы были любым пользователем. Он был переименован, чтобы отразить эту новую функциональность. Теперь это называется «замещающий пользователь делает».

  Как установить приложения Adobe Creative Cloud в Linux

Чтобы использовать sudo для запуска команды от имени другого пользователя, нам нужно использовать параметр -u (пользователь). Здесь мы запустим кто я команда от имени пользователя mary. Если вы используете команду sudo без параметра -u, вы запустите команду от имени пользователя root.

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

sudo -u mary whoami

sudo -u whoami в окне терминала

Ответ whoami сообщает нам, что учетная запись пользователя, выполняющая команду, — mary.

Вы можете использовать команду sudo для входа в систему как другой пользователь, не зная его пароля. Вам будет предложено ввести собственный пароль. Нам нужно использовать параметр -i (вход в систему).

sudo -i -u mary
pwd
whoami
ls -hl
exit

sudo -i -u mary в окне терминала

Вы вошли как mary. Файлы «.bashrc», «.bash_aliases» и «.profile» для учетной записи пользователя mary обрабатываются точно так же, как если бы владелец учетной записи пользователя mary вошел в систему самостоятельно.

Командная строка изменится, чтобы отразить, что это сеанс для учетной записи пользователя mary.
Команда pwd повторяет, что вы сейчас в доме Мэри. домашний каталог.
whoami сообщает нам, что вы используете учетную запись пользователя mary.
Файлы в каталоге принадлежат учетной записи пользователя mary.
Команда выхода возвращает вас к ваш обычный сеанс учетной записи пользователя.

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

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

Если ваши правки не проходят проверку, файл не сохраняется вслепую. У вас есть варианты. Вы можете отменить и отказаться от изменений, вернуться и отредактировать изменения снова или принудительно сохранить неправильные изменения. Последний вариант — очень плохая идея. Не поддавайтесь искушению сделать это. Вы можете оказаться в ситуации, когда все случайно не смогут использовать sudo.

Хотя вы начинаете процесс редактирования с помощью команды visudo, visudo не является редактором. Он вызывает один из ваших существующих редакторов для редактирования файла. В Manjaro и Ubuntu команда visudo запускалась простой редактор нано. В Fedora visudo запустил более способный —но менее интуитивно понятный—Vim.

Если вы предпочитаете использовать nano в Fedora, вы можете сделать это легко. Сначала установите nano:

sudo dnf установить нано

sudo dnf install nano в окне терминала

Затем нужно было вызвать visudo с помощью этой команды:

sudo EDITOR=nano visudo

sudo EDITOR = nano visudo в окне терминала

Похоже, это хороший кандидат на псевдоним. Редактор nano открывается с загруженным в него файлом sudoers.

редактор nano с загруженным в него файлом sudoers

Добавление пользователей в группу sudo

Используйте visudo, чтобы открыть файл sudoers. Либо используйте эту команду, либо команду, описанную выше, чтобы указать редактор по вашему выбору:

sudo visudo

sudo visudo в окне терминала

Прокрутите файл sudoers, пока не увидите определение записи% sudo.

Файл sudoers с выделенной строкой% sudo

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

  Как сделать оболочку Gnome удобной для пользователя в Linux

Строка% sudo выглядит следующим образом:

% sudo: имя группы.
ALL =: это правило применяется ко всем хостам в этой сети.
(ВСЕ: ВСЕ): члены этой группы могут выполнять команды как все пользователи и все группы.
Все: члены этой группы могут выполнять все команды.

Если немного перефразировать, члены этой группы могут запускать любую команду, как любой пользователь или любая группа, на этом компьютере или на любом другом хосте в этой сети. Таким образом, простой способ предоставить кому-либо привилегии root и возможность использовать sudo — это добавить их в группу sudo.

У нас есть два пользователя, Том и Мэри, с учетными записями пользователей Том и Мэри соответственно. Мы добавим учетную запись пользователя tom в группу sudo с помощью команды usermod. Параметр -G (groups) указывает группу, в которую мы собираемся добавить учетную запись Tom. Параметр -a (добавить) добавляет эту группу в список групп, в которых уже находится учетная запись пользователя tom. Без этой опции учетная запись пользователя tom будет помещена в новую группу, но удалена из любых других групп.

sudo usermod -a -G sudo tom

sudo usermod -a -G sudo tom в окне терминала

Давайте проверим, в каких группах находится Мария:

groups

группы в окне терминала

Учетная запись пользователя mary находится только в группе mary.

Посоветуемся с Томом:

groups

группы в окне терминала

Учетная запись пользователя tom — и, следовательно, Tom — находится в группах tom и sudo.

Давайте попробуем заставить Мэри сделать что-то, что требует привилегий sudo.

sudo less /etc/shadow

sudo less / etc / shadow в окне терминала

Мэри не может заглянуть внутрь файла с ограниченным доступом «/ etc / shadow». Она получает мягкую ругань за попытку использовать sudo без разрешения. Посмотрим, как поживает Том:

sudo less /etc/shadow

sudo less / etc / shadow в окне терминала

Как только Том вводит свой пароль, ему показывается файл / etc / shadow.

файл / etc / shadow меньше в окне терминала

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

Предоставление пользователям ограниченных прав sudo

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

Давайте познакомимся с Гарри, владельцем учетной записи пользователя harry. Он не входит в группу sudo и не имеет привилегий sudo.

groups

группы в окне терминала

Для Гарри полезно иметь возможность устанавливать программное обеспечение, но мы не хотим, чтобы у него были полные права sudo. Без проблем. давайте запустим visudo:

sudo visudo

sudo visudo в окне терминала

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

запись файла sudoer для гарри

Запись для учетной записи пользователя harry:

harry    ALL=/usr/bin/apt-get

Обратите внимание, что между «harry» и «ALL =» есть табуляция.

Это означает, что учетная запись пользователя harry может использовать перечисленные команды на всех хостах, подключенных к этой сети. В списке есть одна команда — «/ usr / bin / apt-get». Мы можем предоставить Гарри доступ к более чем одной команде, добавив их в список команд, разделив их запятыми.

  Как разогнать видеокарты Nvidia в Linux

Добавьте строку в файл sudoers и сохраните файл. Если вы хотите дважды проверить синтаксическую правильность строки, мы можем попросить visudo просканировать файл и проверить синтаксис для нас, используя параметр -c (только проверка):

sudo visudo -c

sudo visudo -c в окне терминала

Проходят проверки, и visudo сообщает, что все в порядке. Гарри теперь должен иметь возможность использовать apt-get установить программное обеспечение но ему следует отказать, если он попытается использовать любую другую команду, требующую sudo.

sudo apt-get install finger

sudo apt-get install finger в окне терминала

Соответствующие права sudo предоставлены Гарри, и он может установить программное обеспечение.

Что произойдет, если Гарри попытается использовать другую команду, требующую sudo?

sudo shutdown now

sudo shutdown now в окне терминала

Гарри не может выполнить команду. Мы успешно предоставили ему конкретный, ограниченный доступ. Он может использовать назначенную команду и ничего больше.

Использование псевдонимов пользователя sudoers

Если мы хотим предоставить Мэри такие же привилегии, мы могли бы добавить строку в файл sudoers для учетной записи пользователя mary точно так же, как мы это сделали с Гарри. Другой, более аккуратный способ добиться того же — использовать User_Alias.

в файле sudoers User_Alias ​​содержит список имен учетных записей пользователей. Затем имя User_Alias ​​можно использовать в определении для представления всех этих учетных записей пользователей. Если вы хотите изменить права для этих учетных записей пользователей, вам нужно изменить только одну строку.

Давайте создадим User_Alias ​​и используем его в нашем файле sudoers.

sudo visudo

sudo visudo в окне терминала

Scroll down in the file until you come to the User_Alias specification line.

файл sudoers с добавленным Users_Alias

Добавьте User_Alias, набрав:

User_Alias INSTALLERS = harry, mary

Каждый элемент отделяется пробелом, а не табуляцией. Логика распадается на:

User_Alias: Это говорит visudo, что это будет User_Alias.
УСТАНОВЩИКИ: Это произвольное имя для этого псевдонима.
= harry, mary: список пользователей, которых нужно включить в этот псевдоним.

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

harry    ALL=/usr/bin/apt-get

Измените его так, чтобы он читался так:

INSTALLERS    ALL=/usr/bin/apt-get

Это говорит о том, что все учетные записи пользователей, содержащиеся в определении User_Alias ​​«INSTALLERS», могут запускать команду apt-get. Мы можем проверить это с Мэри, которая теперь должна иметь возможность устанавливать программное обеспечение.

sudo apt-get install colordiff

sudo apt-get install colordiff в окне терминала

Мэри может установить программное обеспечение, потому что она входит в User_Alias ​​«УСТАНОВЩИКИ», и этот User_Alias ​​получил эти права.

Три быстрых трюка с sudo

Если вы забыли добавить sudo к команде, введите

sudo !!

И последняя команда будет повторена с добавлением sudo в начало строки.

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

sudo -k

Вы когда-нибудь задумывались, где можно увидеть неудачные попытки выполнения команды sudo? Они переходят в файл «/var/log/auth.log». Вы можете просмотреть его с помощью:

less /var/log/auth.log

Файл /var/log/auth.log в окне терминала

Мы можем видеть запись для учетной записи пользователя Мэри, которая вошла в систему в TTY pts / 1, когда она пыталась запустить команду выключения как пользователь «root».

С великой силой …

… Приходит способность делегировать часть этого другим. Теперь вы знаете, как избирательно расширять возможности других пользователей.