Введение

Команда в системах Unix для временного получения привилегий root. В отличие от аналогичной команды su, пользователи по умолчанию должны вводить свой собственный пароль для аутентификации, а не пароль целевого пользователя. После аутентификации, и если файл конфигурации (обычно /etc/sudoers) разрешает пользователю доступ, система запускает запрошенную команду. Файл конфигурации предоставляет детальные права доступа, включая возможность запуска команд только из текущего терминала; требование пароля для каждого пользователя или группы; необходимость повторного ввода пароля при каждом использовании или полное отсутствие требования пароля для конкретной командной строки. Также можно настроить передачу аргументов или выполнение нескольких команд.

История

Роберт Коггешалл и Клифф Спенсер разработали оригинальную подсистему примерно в 1980 году в Департаменте компьютерных наук университета штата Нью-Йорк в Буффало (SUNY/Buffalo).

Дизайн

В отличие от команды su, пользователи предоставляют свой личный пароль команде sudo (если требуется), а не пароль суперпользователя или другой учетной записи. Это позволяет авторизованным пользователям выполнять команды с повышенными привилегиями, не раскрывая пароль другой учетной записи. Для использования команды sudo пользователи должны состоять в определенной группе, обычно в группе wheel или sudo. После аутентификации, и если файл конфигурации разрешает доступ пользователю, система запускает запрошенную команду. Sudo сохраняет права пользователя в течение определенного времени (обычно 5 минут) для каждого псевдотерминала, позволяя пользователю выполнять несколько последовательных команд от имени запрошенного пользователя без повторного ввода пароля. В целях безопасности и аудита sudo может быть настроен для записи каждой выполненной команды. Если пользователь пытается выполнить sudo, не будучи указанным в файле конфигурации, ему отображается сообщение об ошибке, информирующее о регистрации попытки. При соответствующей настройке, системный администратор (root) будет уведомлен по электронной почте. По умолчанию, информация о каждой попытке выполнения команды записывается в системный журнал.

Конфигурация

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

Влияние

В некоторых дистрибутивах операционных систем, sudo во многом вытеснило традиционное использование отдельной учётной записи суперпользователя для выполнения административных задач, особенно в некоторых дистрибутивах Linux и macOS от Apple.

Инструменты и аналогичные программы

visudo — это утилита командной строки, позволяющая редактировать конфигурационный файл sudo безопасным способом. Она предотвращает одновременное редактирование несколькими пользователями с помощью блокировок и выполняет проверку корректности и синтаксиса. Sudoedit — это программа, являющаяся символической ссылкой на бинарный файл sudo. При запуске sudo через псевдоним sudoedit, sudo ведет себя так, как будто передан флаг -e, и позволяет пользователям редактировать файлы, для записи в которые требуются повышенные привилегии. Microsoft выпустила собственную версию sudo для Windows в феврале 2024 года. Она функционирует аналогично своей Unix-версии, предоставляя возможность запускать команды с повышенными привилегиями из сеанса консоли, запущенного без повышенных привилегий. Программа runas предоставляет схожую функциональность в Windows, но не может передавать текущие каталоги, переменные окружения или длинные командные строки дочернему процессу. И хотя она поддерживает запуск дочернего процесса от имени другого пользователя, она не поддерживает простое повышение привилегий. В Hamilton C shell также включены полноценные su и sudo для Windows, которые могут передавать всю эту информацию о состоянии и запускать дочерний процесс либо с повышенными привилегиями, либо от имени другого пользователя (или и то, и другое). Графические пользовательские интерфейсы для sudo существуют, в частности gksudo, но они устарели в Debian и больше не включены в Ubuntu. Другие пользовательские интерфейсы не построены непосредственно на базе sudo, но предоставляют аналогичное временное повышение привилегий для административных целей, такие как pkexec в Unix-подобных операционных системах, контроль учетных записей пользователей в Microsoft Windows и службы авторизации Mac OS X. Gosu — это инструмент, аналогичный sudo, который популярен в контейнерах, где терминал может быть не полностью функциональным или где запуск sudo в контейнеризированной среде может приводить к нежелательным последствиям.