ServerAID
Найти гайд, команду, тег… ⌘ K
Глоссарий  ·  термин

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.
  • systemdsudo systemctl restart — типовое использование sudo в работе с сервисами.

Похожие материалы

grep — что это и зачем
Глоссарий

grep — что это и зачем

grep — стандартная команда Linux для поиска строк по шаблону внутри текстовых файлов и потоков. Берёт текст на вход, отдаёт строки, в которых нашлось совпадение. Базовый инструмент работы с логами, конфигами, выводом других команд через пайп.

Редакция
find — что это и зачем
Глоссарий

find — что это и зачем

find — стандартная команда Linux для поиска файлов и каталогов по имени, типу, правам, размеру, дате и десяткам других критериев. С помощью `-exec` поверх найденного можно сразу выполнять команды. Универсальный инструмент админа для массовой работы с файловой системой.

Редакция
snap — что это и зачем
Глоссарий

snap — что это и зачем

snap — система упаковки и установки приложений от Canonical, разработанная как альтернатива apt. Каждый snap — самодостаточный пакет со своими зависимостями, изолированный от системы через AppArmor. Используется на Ubuntu для Firefox, Chromium, microk8s и многих desktop-приложений.

Редакция
LVM — что это и зачем
Глоссарий

LVM — что это и зачем

LVM — слой абстракции между физическими дисками и файловыми системами в Linux. Объединяет диски в пулы (Volume Groups), нарезает их на логические тома (Logical Volumes) и позволяет изменять размер на лету. Альтернатива классическому partitioning, которая делает работу с дисками гибкой.

Редакция