Wiki
Безопасность

sudo — что это простыми словами

sudo — выполнение команды с правами другого пользователя (обычно root) с логированием и правилами в /etc/sudoers. Стандарт админинга Linux с 1980-х.

sudo (superuser do) — CLI-обёртка, позволяющая выполнять команду от имени root (или другого пользователя) без входа в root-shell. Ключевая практика безопасности: никогда не логиниться как root — работайте под обычным пользователем, эскалируйте прав только для нужной команды.

Конфиг — `/etc/sudoers` (правится через `visudo` — валидирует синтаксис перед сохранением, иначе можно заблокировать себе sudo навсегда). Формат: `WHO WHERE=(RUN_AS) COMMANDS`. Примеры: `alice ALL=(ALL) ALL` — alice может всё. `deploy ALL=(www-data) NOPASSWD: /usr/bin/systemctl restart nginx` — deploy может рестартить nginx без пароля.

Best practices: (1) добавлять в группу `sudo`/`wheel` — членство даёт sudo без правки /etc/sudoers. (2) NOPASSWD только на конкретные бинари, никогда на `ALL`. (3) логирование — все sudo-команды в `/var/log/auth.log` / journald. (4) `sudo -i` — интерактивный root-shell (для длительных операций), `sudo -u www-data cmd` — от имени сервисного user. (5) `sudo -k` — сбросить кэш пароля (по умолчанию sudo помнит 15 мин).

Опасно: (1) `sudo su -` вместо `sudo -i` (обходит логирование команд). (2) `sudo bash script.sh` от скрипта, писанного не-root user'ом → атакующий подкладывает злой скрипт. (3) `%wheel ALL=(ALL) NOPASSWD:ALL` — вся группа админов без пароля → одна украденная ssh-key = root на сервере.

Частые вопросы

sudo или su?
sudo. su даёт полноценный root-shell, теряется audit trail, все команды под user=root в логах — не поймёшь, кто конкретно.
Как убрать пароль sudo для CI?
`ci ALL=(root) NOPASSWD: /path/to/deploy.sh` — только для конкретной команды. Никогда `NOPASSWD: ALL`.

Смотрите также