linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Процессы и ресурсы/sudo

kb/processes ── Процессы и ресурсы ── beginner

sudo - выполнить от имени root

`sudo` запускает команду от имени другого пользователя (обычно root) по правилам в `/etc/sudoers`. Стандартный путь эскалации привилегий.

view as markdownaka: sudoers, sudo-policy

Базовое применение

bash
sudo whoami                      

▸root (если ты в sudoers)

sudo apt update                   # запустить apt от root
sudo -u alice ls /home/alice      # -u: от имени конкретного юзера, не root
sudo -i                           # открыть полностью root-овую сессию
sudo -s                           # шелл от root, но с твоим окружением
sudo -E command                   # сохранить твоё окружение (env)

Спросит твой пароль (не root'а) - чтобы убедиться что это всё ещё ты, а не кто-то перехвативший терминал. По умолчанию запоминает на 5-15 минут (timestamp).

/etc/sudoers - кто что может

Главный файл политики. Никогда не редактируй прямо - используй visudo, который проверяет синтаксис перед сохранением (иначе можно остаться без sudo вообще).

bash
sudo visudo                       # /etc/sudoers
sudo visudo -f /etc/sudoers.d/myapp   # отдельный фрагмент

Современная практика - класть кастомные правила в /etc/sudoers.d/*, не трогая базовый файл.

Синтаксис правил

user host = (run-as) [tag:] command

Примеры:

alice ALL=(ALL) ALL                       # alice: всё, везде, от любого юзера
bob ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
# ↑ bob может перезапускать nginx без пароля, и больше ничего
%wheel ALL=(ALL) ALL                      # все в группе wheel - полные права
%dev ALL=(ALL) NOPASSWD: /usr/local/bin/deploy.sh

Тэги:

  • NOPASSWD: - без запроса пароля
  • PASSWD: - обратный
  • NOEXEC: - запретить дочерним процессам делать exec*
  • SETENV: - разрешить -E (передавать env)

sudo -l - что мне разрешено

bash
sudo -l                           # список доступных мне команд
sudo -l -U alice                  # что разрешено alice (нужен root для просмотра чужого)

Стандартная команда при онбординге на новый сервер: «что я тут могу».

Логирование

Каждый вызов sudo пишет в /var/log/auth.log (Debian/Ubuntu) или journalctl _COMM=sudo:

bash
sudo journalctl _COMM=sudo --since today
# Apr 28 14:23:01 host sudo: alice : TTY=pts/0 ; PWD=/home/alice ;
#   USER=root ; COMMAND=/usr/bin/apt update

На прод-системах часто включают sudoreplay - пишет всё что произошло в sudo-сессии (Defaults log_input,log_output).

Безопасные паттерны

1. Группы вместо индивидуальных юзеров. Группа wheel или sudo

  • стандартный способ дать «полные» права:
bash
sudo usermod -aG sudo alice

2. NOPASSWD только для конкретных команд. Не давай NOPASSWD на ALL - это эквивалентно «pwn без пароля если получили sudo-юзера».

3. Не использовать sudo в скриптах с паролем в аргументах. Использовать NOPASSWD для конкретной команды или systemd-сервис от root.

4. Defaults requiretty - устаревшая опция. Раньше требовалось работать только с tty (mitigation против credential-stealing). Сейчас обычно отключена для удобства автоматизации.

Альтернативы

  • doas (OpenBSD-portable) - минималистичная замена sudo, конфиг проще; в Alpine/Arch как опция
  • pkexec (polkit) - графическое окружение, по правилам polkit
  • systemd PrivateUsers/CAP_ - для сервисов лучше задавать capabilities в unit-файле, а не через sudo

sudo vs su

su - тоже даёт root, но через пароль root'а. Современная практика: вообще отключить root-пароль (sudo passwd -l root), использовать только sudo. Это даёт:

  • Per-user audit log (видно КТО что делал)
  • Гранулярные правила (один может всё, другой - только nginx)
  • Нет общего root-пароля который надо хранить

sudo и file-permissions / capabilities

Иногда sudo не нужен вообще. Если твоему бинарю нужно слушать порт 80:

  • Плохо: sudo ./myapp - гипертрофированно, бинарь весь от root
  • Лучше: setcap cap_net_bind_service+ep ./myapp && ./myapp - точечный capability (capabilities)
  • Ещё лучше: systemd unit с AmbientCapabilities=CAP_NET_BIND_SERVICE, User=myapp

Sudo - это hammer. Часто нужна именно отвёртка.

§ команды

bash
sudo -l

Что мне разрешено через sudo на этой машине - первый шаг при онбординге

bash
sudo visudo -f /etc/sudoers.d/myapp

Безопасное редактирование политик с проверкой синтаксиса

bash
sudo journalctl _COMM=sudo --since today

Кто что делал через sudo за сегодня - аудит

bash
sudo -u alice -i

Открыть сессию как другой юзер (если разрешено в sudoers)

bash
sudo -k

Сбросить кешированный credential - следующий sudo попросит пароль снова

§ см. также

  • capabilitiesLinux capabilities - биты привилегийCapabilities дробят привилегии root'а на 40+ независимых битов: NET_ADMIN, SYS_PTRACE, и т.д. Можно дать процессу часть, не делая его полным root'ом.
  • file-permissionsFile permissions: rwx и chmodКаждый файл имеет три набора прав - для владельца, группы и остальных. Каждый набор это три бита: read (r), write (w), execute (x). Меняем через `chmod`.
  • process-and-pidПроцесс и PIDПроцесс - это запущенная программа со своим PID, памятью, открытыми дескрипторами и UID. Все процессы образуют дерево, корень - init (PID 1).
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки