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

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

sudo — утилита, которая запускает команду от имени другого пользователя (по умолчанию root) после проверки прав в `/etc/sudoers`. Это стандартный способ повышать привилегии в Ubuntu, не работая постоянно под root.

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 в работе с сервисами.

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

Сроки поддержки Ubuntu LTS — на сколько хватает релиза
Глоссарий

Сроки поддержки Ubuntu LTS — на сколько хватает релиза

Ubuntu LTS — это релиз с долгой поддержкой: 5 лет бесплатных security-обновлений и 10 лет с подпиской Ubuntu Pro. Промежуточные релизы (24.10, 25.04) живут всего 9 месяцев. Разбираем, какие версии сейчас актуальны, до какой даты безопасно сидеть на 22.04 и 24.04, и когда выходит 26.04 LTS.

Редакция
Debian или Ubuntu — что выбрать
Глоссарий

Debian или Ubuntu — что выбрать

Debian и Ubuntu — две родственные операционные системы: Ubuntu сделана на базе Debian и тянет оттуда пакеты, формат `.deb` и пакетный менеджер apt. Различия — в скорости релизов, наборе из коробки и философии. Кратко: Debian Stable консервативнее и аскетичнее, Ubuntu LTS — свежее и удобнее, особенно для рабочего стола и облаков. Под прод подходят оба, выбор сводится к тому, что вам важнее: предсказуемость или новизна.

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

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

bash (Bourne Again SHell) — это командная оболочка, которая обрабатывает то, что вы вводите в терминале Linux. Запускает программы, расширяет переменные, выполняет конструкции `if` / `for`, читает скрипты из файлов с шебангом `#!/bin/bash`. На Ubuntu — оболочка по умолчанию для интерактивных пользователей; для системных скриптов используют более строгий `/bin/sh` (`dash`).

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

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

Ubuntu — самый популярный дистрибутив Linux: бесплатная операционная система на базе Debian, удобная и для серверов, и для рабочего стола. Под капотом Linux-ядро, поверх — пакетный менеджер apt, рабочий стол GNOME (на Desktop) и стек systemd-сервисов. Релизы выходят каждые полгода, LTS-версии — раз в два года и поддерживаются 5 лет.

Редакция