sudo — что это и зачем
sudo — утилита, которая запускает команду от имени другого пользователя (по умолчанию root) после проверки прав в `/etc/sudoers`. Это стандартный способ повышать привилегии в Ubuntu, не работая постоянно под root.
sudo
sudo — утилита, которая запускает команду от имени другого пользователя (по умолчанию root) после проверки прав в /etc/sudoers. Это стандартный способ повышать привилегии в Ubuntu, не работая постоянно под root.
Что это в одном абзаце
В Linux действия с системными файлами (установка пакетов, правка /etc/, перезапуск сервисов) требуют прав root. Работать всё время под root — плохо: одна опечатка в rm -rf, и пол-системы нет. Поэтому в Ubuntu рекомендованный паттерн: обычный пользователь повышает права на конкретную команду через sudo, по запросу пароля — а постоянного root-shell просто нет.
sudo apt install nginx # выполнить apt от имени root
sudo systemctl restart nginx # перезапуск сервиса
sudo -i # получить root-shell (если очень надо)
sudo -u postgres psql # выполнить от имени другого юзера, не root
Имя «sudo» — от «substitute user do».
Откуда у пользователя право на sudo
В Ubuntu при установке первый созданный пользователь автоматически добавляется в группу sudo. Все члены этой группы имеют право выполнять команды через sudo после ввода своего пароля.
Проверить, есть ли вы в группе:
groups # список ваших групп
id # подробнее, включая UID/GID
Если в выводе есть sudo — права у вас есть. Чтобы добавить нового пользователя:
sudo adduser deploy
sudo usermod -aG sudo deploy # добавить в группу sudo
После этого deploy сможет использовать sudo. Изменения в группах применяются после нового логина — newgrp sudo или релогин.
Где живут правила sudo
Главный файл — /etc/sudoers. Его не редактируют напрямую, для этого есть visudo:
sudo visudo
visudo блокирует параллельную правку и проверяет синтаксис перед сохранением. Если в sudoers синтаксическая ошибка, sudo откажется работать полностью — а если вы уже не root, починить будет нельзя без пересборки или recovery-режима.
Дополнительные правила лежат в /etc/sudoers.d/. Каждый файл подключается через #includedir /etc/sudoers.d/ в основном файле. Это удобно для чанков «один пакет = один файл».
Базовые строки /etc/sudoers:
# Корневой пользователь
root ALL=(ALL:ALL) ALL
# Все члены группы sudo
%sudo ALL=(ALL:ALL) ALL
Что значат поля: <кто> <откуда>=(<от_имени_кого>:<группа>) <какие_команды>.
root/%sudo— пользователь или группа (%— обозначение группы).ALL=— с какого хоста разрешено (для multi-host sudo). ОбычноALL.(ALL:ALL)— от имени какого пользователя и какой группы можно запускать.ALL(последнее) — какие команды разрешены.ALL— любые.
NOPASSWD — без пароля
Часто нужно дать сервисному пользователю или CI право на конкретные команды без пароля — иначе автоматизация не работает. Делается через файл в /etc/sudoers.d/:
# /etc/sudoers.d/deploy-restart
deploy ALL=(root) NOPASSWD: /bin/systemctl restart myapp.service
deploy ALL=(root) NOPASSWD: /bin/systemctl reload nginx.service
После создания файла:
sudo chmod 440 /etc/sudoers.d/deploy-restart
sudo visudo -c # проверка валидности всех sudoers-файлов
Что важно:
NOPASSWDдолжно быть только на конкретные команды, не наALL. Иначе любой, кто получит shell от имениdeploy, станет root без пароля.- Командe указывайте полным путём —
/bin/systemctl, неsystemctl. Иначе в PATH можно подложить свой бинарь. - Без аргументов:
NOPASSWD: /bin/systemctl restart myapp.service— значит можно только эту конкретную команду, неrestart другой-service. - Для запросов «sudoers без пароля» в широком смысле — это и есть стандартный паттерн.
sudo vs su
su (switch user) — другой инструмент с похожей задачей, но работает иначе:
suтребует пароль целевого пользователя (по умолчанию root). В Ubuntu пароль root по умолчанию не задан, поэтомуsuбез аргументов работать не будет.sudo -iтребует пароль вашего пользователя и даёт root-shell. На Ubuntu это стандартный путь.
Поэтому на Ubuntu вы скорее увидите sudo -i или sudo su -, чем чистый su. Строго говоря, root-аккаунт в Ubuntu существует, но без пароля — войти в него можно только через sudo.
Частые вопросы
Что значит sudo
Сокращение от «substitute user, do» — выполнить команду от имени другого пользователя. По умолчанию — root. Появилось в 1980-х, де-факто стандарт во всех современных Linux- и BSD-системах.
Зачем sudo если есть root
В Ubuntu пароль root по умолчанию не задан, и логин под root отключён. Это намеренная защита: даже если злоумышленник перехватит SSH-сессию пользователя, он получит обычные права, а не root. Sudo даёт повышенные права на одну команду по запросу — это меньше времени с правами root и более чёткие логи кто что делал.
Что такое sudoers без пароля
Это правило в /etc/sudoers или /etc/sudoers.d/, которое разрешает пользователю выполнять sudo-команду без ввода пароля — через ключевое слово NOPASSWD. Используется для автоматизации (CI, deploy-скрипты). Безопасный паттерн — выдавать NOPASSWD только на конкретные команды с полным путём, никогда на ALL.
Чем sudo отличается от su
sudo запускает одну команду от имени другого пользователя, требует ваш пароль, проверяется по sudoers. su переключает текущую сессию на другого пользователя, требует пароль целевого пользователя. На Ubuntu пароль root не задан, поэтому su без sudo-обёртки не работает — стандартный путь повысить привилегии — это sudo -i.
Куда пишутся логи sudo
В /var/log/auth.log (на Ubuntu) и в journald — посмотреть удобнее через sudo journalctl _COMM=sudo --since '1 hour ago'. Каждое использование sudo логируется с пользователем, командой и результатом. Это удобно для аудита: «кто перезапустил сервис в 3 ночи».
Что почитать
- SSH-ключи на Ubuntu: вход без пароля — заходим обычным пользователем по SSH-ключу, дальше повышаем права через sudo. Никогда не разрешаем root-логин по SSH.
- apt update и apt upgrade — почти все apt-команды требуют sudo. Обзор паттернов и
unattended-upgrades. - systemd —
sudo systemctl restart— типовое использование sudo в работе с сервисами.