
Если вы ежедневно работаете с LinuxРано или поздно вы столкнетесь с этой командой. sudoЭто ключ, позволяющий выполнять административные задачи без необходимости входа в систему в качестве пользователя. root Постоянно, что не только неудобно, но и довольно опасно. Понимание того, как это работает, какие у этого есть опции и как это настроить, имеет решающее значение, если вы не хотите случайно сломать систему или оставить уязвимость в системе безопасности, не заметив этого.
В этой статье мы рассмотрим это подробно. О чём именно идёт речь? sudoКаковы его взаимоотношения с пользователем? root и с файлом /etc/sudoersВ чём разница между использованием... su y sudoи как можно точно настроить параметры, чтобы предоставлять очень специфические разрешения (даже без запроса пароля) определенным пользователям или группам. Идея заключается в том, что к концу чтения вам будет совершенно ясно, когда следует использовать sudoЧто происходит на подсознательном уровне и как контролировать это без страха.
Что такое sudo и почему оно так важно в Linux?
Команда sudo Это одна из ключевых частей В любой современной системе Linux. Её название обычно объясняется как «superuser do» или «substitute user and do», а её функция проста, но мощна: она позволяет авторизованному пользователю выполнять команды так, как если бы он был другим пользователем в системе, обычно rootв течение ограниченного времени.
На практике это означает обычный пользователь может выполнять административные задачи — устанавливать пакеты, изменять системные настройки, управлять службами, изменять права доступа к конфиденциальным файлам — без Войти напрямую как rootРазделение между обычным пользователем и суперпользователем является одним из столпов безопасности в Linux.
Большинство актуальных дистрибутивов (Debian, Ubuntu, множество производных, системы типа SLE и т. д.) обеспечивают sudo Оно предустановлено, и не рекомендуется удалять или вносить в него какие-либо изменения бездумно. Кроме того, на многих системах пользователь, созданный во время установки, автоматически добавляется в административную группу, имеющую разрешение на его использование. sudo, становясь привилегированным пользователем по умолчанию.
Очень важно помнить вот о чём является то, что sudo Это не "превращает" пользователя в root Это не предоставляет полного доступа к системе, а позволяет пользователям выполнять определенные команды от имени другого пользователя в соответствии с правилами, определенными в его конфигурации. Таким образом, можно предоставить очень специфические разрешения, не предоставляя полного доступа к системе.
Как работает sudo внутри системы
Основная операция sudo С точки зрения пользователя все очень просто: вы размещаете слово. sudo Перед командой, которую мы хотим выполнить с привилегиями, выполните следующее. Например, чтобы обновить список пакетов с помощью apt-get В Debian или Ubuntu обычному пользователю потребуется выполнить примерно следующее:
> sudo apt-get update
Если вы попытаетесь выполнить команду с правами администратора без использования sudo, это может привести к следующему:Чаще всего вы будете получать ошибки типа «Доступ запрещен» или сообщения о том, что определенный заблокированный файл невозможно открыть. /var/lib или в другом системном каталоге. Как только вы повторите ту же команду, добавив sudo Далее система запросит ваш пароль, и, если все настроено правильно, команда будет выполнена с правами суперпользователя.
При выполнении команды с sudoПрограмма сначала проверяет, имеет ли пользователь право использовать ее и для каких конкретных команд, обращаясь к файлу конфигурации. /etc/sudoers а во многих системах — дополнительные файлы в каталоге. /etc/sudoers.d/Если это позволяют правила, sudo Программа запрашивает пароль (обычно ваш, а не их). root) и временно повышает ваши привилегии, позволяя выполнить команду от имени целевого пользователя.
Любопытная деталь, которая поначалу часто сбивает с толку. Когда на терминале запрашивается пароль, при вводе не отображаются никакие символы, даже звёздочки. Это совершенно нормально: ввод осуществляется «вслепую» и является частью мер безопасности, предотвращающих раскрытие длины вашего пароля.
Кроме того, Судо поддерживает своего рода «сессию доверия».После успешного ввода пароля повышенные привилегии остаются активными в течение определенного времени (по умолчанию, около 15 минут во многих дистрибутивах) в том же терминале. В течение этого периода вы можете выполнять дополнительные команды. sudo без необходимости снова и снова запрашивать пароль.
Базовый синтаксис и наиболее полезные параметры sudo
Общий синтаксис sudo Это очень просто:
> команда sudo
Наиболее распространенный способ его использования — это просто в качестве sudo comandoОднако, она предлагает немало интересных вариантов. Вот некоторые из наиболее часто используемых (и отмеченных во многих официальных руководствах):
- -hОтображает справочное сообщение с синтаксисом и всеми доступными параметрами программы.
sudo. - -V: показывает текущую версию
sudoа также некоторые подробности компиляции. - -v: Обновляет «льготное время» аутентификации, то есть обновляет счетчик, чтобы ваши привилегии не истекли и вам не пришлось вскоре повторно вводить пароль.
- -k: немедленно аннулирует сохраненные учетные данные; это как сказать
sudoкоторая «забывает», что вы уже прошли аутентификацию, заставляя вас снова вводить пароль в следующий раз. - -l: показывает, какие команды вам разрешено запускать.
sudoв соответствии с текущей конфигурациейsudoers.
Также имеются очень полезные опции для выполнения команд от имени других пользователей. Кроме как root. Например, с -u Для конкретной команды можно указать целевого пользователя:
> sudo -u pedro whoami
В этом случае, даже если ваша сессия принадлежит другому пользователю, это не имеет значения., команда whoami В результате будет возвращено "pedro", поскольку операция была выполнена от имени этого пользователя. Это очень удобно для проверки прав доступа или выполнения задач, связанных со служебными учетными записями, без необходимости вручную переключать сессии.
sudo против su и пользователь root
В Linux сосуществуют несколько механизмов. Для получения прав администратора: зарегистрируйтесь напрямую как rootиспользуйте команду su и использовать sudoУ каждого варианта есть свои плюсы и минусы, и понимание их сэкономит вам много хлопот.
Войдите напрямую как root. (например, с ssh root@servidorЭто дает вам полный доступ к системе с самого начала. Это очень удобно, но и крайне опасно: любая ошибочно введенная команда может стереть половину системы, изменить критически важные разрешения или сделать машину непригодной для использования. Поэтому в большинстве случаев работа с сеансами входа в систему не рекомендуется. root Открыто постоянно.
Команда su (заменяющий пользователь) Это позволяет переключаться на другого пользователя в пределах одного терминала. Исходная сессия остается в фоновом режиме и «инкапсулирует» новую. Если вы запустите su pedroВам будет предложено ввести пароль. pedro и, оказавшись внутри, если вы наберете exit Вы вернетесь к предыдущему пользователю. Если вы не укажете имя пользователя, su По умолчанию он пытается переключиться на root.
Здесь есть важный нюанс. su: если вы не пройдете процедуру входа в систему (su -, su -l o su --login), изменяет пользователя, но не окружение. Это означает, что вы останетесь в рабочем каталоге и с переменными предыдущего пользователя, что может вызвать ошибки доступа (например, при попытке вывести список). главная (исходного пользователя с учетными данными нового пользователя).
Вместо этого, sudo Это предлагает более безопасный и контролируемый подход.Вам не нужно знать пароль для rootно ваш собственный пароль, и система решает, на какой стороне он основан. /etc/sudoersКакие пользователи могут выполнять какие команды, например, какие пользователи и с каких машин. Кроме того, каждое использование sudo Это записывается в журналы, что упрощает аудит действий, совершенных пользователями с расширенными правами доступа.
Для интерактивных сессий «от имени другого пользователя» с использованием команды sudoСуществуют весьма практичные варианты:
- Sudo -s: открывает оболочку от имени целевого пользователя, наследуя окружение текущего пользователя.
- sudo -i: запускает полноценную оболочку входа в систему для целевого пользователя, при этом его окружение и каталоги остаются чистыми.
$HOMEзагрузка файлов, таких как.profileo.bash_profile.
Оба варианта полезны для разовой работы. как другой пользователь (обычно) root или любой другой учетной записи сервиса) без необходимости запоминать и использовать пароль, сохраняя при этом контроль и запись выполненных действий.
Файл /etc/sudoers и каталог /etc/sudoers.d
Суть конфигурации sudo Оно находится в архиве. /etc/sudoersИменно здесь определяется, кто может им пользоваться. sudoОткуда, например, от какого пользователя и какие конкретные команды могут быть выполнены. Кроме того, многие дистрибутивы включают директиву, которая автоматически загружает все дополнительные конфигурационные файлы, расположенные в /etc/sudoers.d/.
Крайне важно понять, что /etc/sudoers Не следует редактировать «без надлежащего редактирования». В любом текстовом редакторе. Изменения всегда следует вносить с помощью команды. visudoкоторая открывает файл в текстовом редакторе (по умолчанию). vi o nano(в зависимости от конфигурации), но это добавляет дополнительный уровень безопасности: проверяет синтаксис перед сохранением и предотвращает одновременное редактирование двумя пользователями.
Типичное применение редактирования sudoers это:
> sudo visudo -f /etc/sudoers
Вы также можете создавать определенные файлы в /etc/sudoers.d/ Для разделения конфигураций по группам пользователей, службам и т. д. Например, можно использовать файл. /etc/sudoers.d/networking с конкретными правилами администрирования сети, не смешиваясь с остальной общей конфигурацией.
При открытии файла /etc/sudoers в типичной системеВы увидите строки примерно такого вида (не считая комментариев):
- корень ВСЕ = (ВСЕ:ВСЕ) ВСЕ: пользователь
rootВы можете выполнять любые команды на любом хосте, от имени любого пользователя и любой группы. - % admin ALL = (ВСЕ) ВСЕ: любой человек в группе
adminимеет полные права на использованиеsudo. - %sudo ALL=(ВСЕ:ВСЕ) ВСЕТо же самое относится и к группе.
sudo, которая в Ubuntu и производных дистрибутивах обычно является группой ключей. - #include /etc/sudoers.d: указывает, что файлы в этом каталоге также должны быть прочитаны (даже если
#(Это не комментарий в данном конкретном контексте).
Помимо правил для пользователей и групп,, sudoers Это позволяет определять псевдонимы для упрощения сложных конфигураций: псевдонимы пользователей (User_Alias), команд (Cmnd_Alias), групп исполнения (Runas_Alias) или хозяев (Host_Alias).
Управляйте пользователями и группами с помощью команды sudoers.
Распространенная практика на серверах. контролирует доступ к sudo через группы. Например, во многих системах достаточно добавить пользователя в группу. sudo o wheel чтобы вы могли получить все необходимые административные разрешения.
Чтобы проверить, какие пользователи принадлежат к группе определенный (например, sudo), вы можете использовать:
> grep 'sudo' /etc/group
Если вы хотите предоставить пользователю права sudoОбычно его добавляют в соответствующую группу. Например, чтобы включить bill К группе sudo:
> sudo adduser bill sudo
Когда вам необходимо отозвать эти привилегииПросто удалите его из группы:
> sudo deluser bill sudo
Другой, гораздо более прекрасный вариант. Это предполагает предоставление разрешений только для определенных команд, без предоставления полной свободы действий. Для этого обычно создаются специальные файлы. /etc/sudoers.d/Например, вы можете определить файл. /etc/sudoers.d/networking что-то вроде:
Cmnd_Alias CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias NETALL = CAPTURE, SERVERS
%netadmin ALL = NETALL
При такой конфигурации любой пользователь из группы netadmin Вы сможете выполнять команды, определенные под этим псевдонимом. NETALL (которая группирует псевдонимы) CAPTURE y SERVERSбез полного доступа ко всему sudoВсе, что нужно, это добавить к bill К группе netadmin чтобы вы могли использовать tcpdump и определенные серверные инструменты.
Распространенные команды, для выполнения которых требуется sudo
В повседневном управлении системамиСуществует несколько типов задач, которые почти всегда идут рука об руку с... sudoпотому что они подразумевают модификацию системы или доступ к конфиденциальной информации.
Управление пакетами: в распределениях, основанных на zypper, apt Для любых операций по установке, удалению или обновлению программного обеспечения, а также для других менеджеров пакетов, требуются соответствующие привилегии. Например:
> sudo zypper install package
> sudo apt-get install docker-ce
Однако запросы, которые только считывают информацию,Например, вывод списка репозиториев обычно можно выполнить без sudoРечь идёт о тестировании и наблюдении за тем, когда сама система выдаёт ошибку, связанную с правами доступа.
Управление сервисами с помощью systemd Обычно это делается через systemctlДля таких действий, как запуск, остановка или перезапуск служб, обычно требуется sudo:
> sudo systemctl restart apache2
Напротив, более безобидные команды, такие как проверка состояния службы, Они могут функционировать без привилегий во многих системах:
> systemctl status NetworkManager
Управление учетными записями пользователей также требует осторожности.. Команды типа usermod, useradd o deluser Они почти всегда должны выбирать sudo, поскольку они изменяют базу данных пользователей системы:
> sudo usermod -L -f 30 tux
Наконец, управление правами доступа к файлам и правами собственности. c chown И компании обычно требуются привилегии, когда это влияет на системные пути или других пользователей. Например, чтобы сделать все файлы и подкаталоги доступными для всех пользователей. /home/test/tux-files стать собственностью пользователя tux Вы можете использовать:
> sudo chown -R tux:tux /home/test/tux-files
Практические примеры использования sudo
Давайте рассмотрим несколько реальных случаев. где sudo Это определяет разницу между ошибкой прав доступа и корректной административной операцией.
Обновление индексов пакетов в Debian/Ubuntu Без необходимых прав доступа программа будет выдавать ошибки, поскольку не сможет работать с файлами. /var/lib/apt/listsКоманда:
> apt-get update
В итоге появятся сообщения "Доступ запрещен".Как только вы повторите это таким образом, всё изменится:
> sudo apt-get update
Система запросит ваш пароль.и если ваш пользователь авторизован в sudoersОбновление пройдёт без проблем. Это повторяющаяся ситуация: ошибка доступа без... sudoправильное выполнение с sudo.
Ещё один очень распространённый пример — копирование файлов в системные пути.Как /usr/local/binЕсли вы попытаетесь скопировать туда скрипт с помощью простой команды:
> cp script.sh /usr/local/bin/
Это нормально, что терминал выдает ошибки. что у вас нет разрешения на запись в этот каталог. Если вы повторите операцию, добавив sudo:
> sudo cp script.sh /usr/local/bin/
Вам будет предложено ввести пароль, и после успешной аутентификации...Копия будет создана и зарегистрирована как выполненная с расширенными правами доступа.
Также можно использовать команду `sudo` в сочетании с опцией `--`. -u выполнять определенные команды от имени другого пользователя, не меняя сессии и не используя su, Например:
> ктоами
> sudo -u pedro whoami
В первом заказе отобразится ваше настоящее имя пользователя.Второй вариант вернет "pedro", что будет свидетельствовать о том, что выполнение было осуществлено от имени целевого пользователя.
Предоставление прав доступа без пароля и другие расширенные возможности.
Одно из самых впечатляющих свойств пота Эта функция позволяет настраивать степень запроса пароля и определять, для каких конкретных команд он требуется. Иногда может потребоваться, чтобы определенные пользователи могли выполнять определенные команды без необходимости каждый раз вводить пароль, например, для автоматизированных сценариев или кнопок выключения в среде рабочего стола.
Это достигается с помощью метки. NOPASSWD в правилах sudoersНапример, если вы хотите miusuario может выполнить /bin/cat c sudo Без запроса пароля можно добавить следующую строку:
myuser ALL = NOPASSWD: /bin/cat
Аналогичным образом, вы можете разрешить ей управлять отключением оборудования. без повторной аутентификации, добавив что-то вроде:
myuser ALL = NOPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Для более чистых и масштабируемых конфигурацийРекомендуется использовать псевдонимы. Типичный пример — определение группы пользователей, группы команд и, при необходимости, псевдонима пользователя для выполнения:
User_Alias GROUP = Пепе, Перико, Андрес
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias WEB = www-data, apache
Используя эти определения, вы могли бы затем написать Гораздо более понятные правила, например:
ВСЯ ГРУППА = ВЛАСТЬ
Таким образом, любой пользователь, включенный в псевдоним, GRUPO Вы сможете выключить или перезагрузить компьютер с помощью sudoи вы можете настроить, хотите ли вы требовать пароль или нет, используя NOPASSWD o PASSWDВы также можете ограничить использование определенными хостами с помощью Host_Alias Таким образом, оно будет действительно только в определенной сети.
за NOPASSWDСуществуют и другие этикетки. в качестве NOEXEC (чтобы предотвратить запуск командой других программ с повышенными правами) или мелкие любопытные детали, такие как добавление insults к линии Defaults, так что sudo Я буду каждый раз шутить на английском, когда у вас не получится ввести пароль.
Всё это демонстрирует, что sudoers — это гораздо больше, чем просто «переключатель root».При правильной настройке это позволяет разработать очень детализированную модель разрешений, адаптированную к вашим потребностям, с уровнем безопасности, значительно превосходящим типичный вариант «вход от имени root и делайте что хотите».
Имея такой инструмент, как sudoправильно поняты и правильно настроеныЭто практически обязательное требование в любой современной системе Linux, где работают несколько пользователей или где вы хотите минимизировать риски, даже если вы единственный пользователь. Использование преимуществ комбинации... sudo, /etc/sudoers, группы как sudo o wheel и расширенные теги, такие как NOPASSWDМожно достичь вполне разумного баланса между комфортом, точным управлением и безопасностью, не будучи постоянно прикованным к экрану во время сеанса. root и не полагаться исключительно на удачу.
