Поиск по сайту:

Как контролировать доступ к 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 для выполнения команды, как если бы вы были любым пользователем. Он был переименован, чтобы отразить эту новую функциональность. Теперь это называется «заменить пользователя».

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

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

sudo -u mary whoami

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

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

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

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

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

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

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

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

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

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

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

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

sudo EDITOR=nano visudo

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

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

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

sudo visudo

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

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

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

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

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

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

sudo usermod -a -G sudo tom

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

groups

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

Давайте проверим у Тома:

groups

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

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

sudo less /etc/shadow

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

sudo less /etc/shadow

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

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

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

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

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

groups

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

sudo visudo

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

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

harry    ALL=/usr/bin/apt-get

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

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

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

sudo visudo -c

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

sudo apt-get install finger

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

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

sudo shutdown now

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

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

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

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

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

sudo visudo

Добавьте User_Alias, введя:

User_Alias INSTALLERS = harry, mary

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

  • User_Alias: сообщает visudo, что это будет User_Alias.
  • INSTALLERS: это произвольное имя для этого псевдонима.
  • = harry, mary: список пользователей, которых следует включить в этот псевдоним.

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

harry    ALL=/usr/bin/apt-get

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

INSTALLERS    ALL=/usr/bin/apt-get

Это говорит о том, что все учетные записи пользователей, содержащиеся в определении «УСТАНОВЩИКИ» User_Alias, могут выполнять команду apt-get. Мы можем проверить это с Мэри, которая теперь должна быть в состоянии установить программное обеспечение.

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

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

С Великой Силой…

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