sudo — выполнение команд от другого пользователя
Даёт временные права root по sudoers; править файл — только через visudo, иначе ошибка лишит sudo всех.
Шпаргалка
6 команд Версия для печати-
sudo apt updateвыполнить команду от root -
sudo -u postgres psqlвыполнить от другого пользователя -
sudo -iинтерактивный root-shell -
sudo -lчто мне разрешено -
sudoedit /etc/nginx/nginx.confбезопасно править root-файл -
sudo visudo -f /etc/sudoers.d/10-xправить правила sudoers
Обзор
sudo выполняет команду от имени другого пользователя (по умолчанию root),
проверяя права по правилам в sudoers. Лучше, чем сидеть под root: точечно, с
логированием, по паролю своего пользователя.
Ключи
7sudoers
Право даёт членство в группе sudo (Ubuntu) / wheel (RHEL), либо явное
правило. Никогда не редактируй sudoers напрямую — только через visudo
(проверяет синтаксис, иначе можно потерять sudo):
Формат правила и алиасы:
NOPASSWD: — без запроса пароля (для автоматизации; держи область узкой!).
Опции и sudoedit
Полезные Defaults (в /etc/sudoers.d/):
sudoedit правит копию от твоего имени и атомарно кладёт назад — безопаснее, чем
sudo vim (не запускает редактор от root).
| Ключ | Что делает | Пример |
|---|---|---|
-u user |
Выполнить команду от указанного пользователя, а не от root. | sudo -u postgres psql |
-i |
Интерактивный root-shell с окружением root (login shell). | sudo -i |
-l |
Показать, какие команды разрешены текущему пользователю. | sudo -l |
-s |
Root-shell без смены окружения текущего пользователя. | sudo -s |
-k |
Сбросить кэш пароля — следующий sudo снова спросит пароль. | sudo -k |
-E |
Сохранить переменные окружения вызывающего пользователя, если это разрешено правилом. | sudo -E make install |
-v |
Продлить кэш пароля без выполнения команды — удобно перед долгим скриптом. | sudo -v |
Ничего не найдено. Попробуй запрос короче.
Неполадки
5user is not in the sudoers file
Пользователя нет в группе sudo. От root: usermod -aG sudo alice (нужен релогин,
см. users-groups).
sudo: a terminal is required to read the password
Нет TTY (по SSH без -t или из скрипта). Варианты: NOPASSWD для нужной команды,
ssh -t, либо sudo -S (пароль из stdin).
NOPASSWD не срабатывает для смены пользователя
(root) NOPASSWD: ALL разрешает команды от root, но не sudo -u other. Для
смены без пароля — правило (other) или sudo runuser -u other -- cmd.
Команда работает руками, но не через sudo (PATH/env)
env_reset/secure_path чистят окружение. Зови по полному пути или настрой
secure_path; для переменных — sudo -E (если разрешено).
Сломал sudoers, потерял доступ
visudo не даст сохранить файл с ошибкой. Если всё же потерял — зайди через
root-консоль (recovery/гипервизор) и поправь.
Опасно
NOPASSWD без узкой команды в правиле (NOPASSWD: ALL вместо конкретного
пути) даёт полный доступ к root без единой проверки — держи область правила
максимально узкой, особенно для сервисных учёток. Правь sudoers только
через visudo: он проверяет синтаксис перед сохранением, а прямая правка
файла редактором может оставить систему без единого рабочего способа
получить root.
Термины
2- авторизация authorization
- Решение о разрешённых действиях для установленной личности и её полномочий. Ещё встречается в: curl, HTTP
- root (суперпользователь) root (superuser)
- Учётная запись с UID 0: ядро пропускает для неё большинство проверок прав доступа. Команды от имени root обычно выполняют через sudo. Ещё встречается в: Capabilities: права root по частям, PAM: проверка входа, политика паролей и блокировка, Ограничения службы: User=, ProtectSystem, NoNewPrivileges, Docker и ещё 65
См. также
- visudo — править sudoers и файлы
/etc/sudoers.dс проверкой. - permissions — Модель прав Unix — чтение/запись/исполнение, владелец/группа/другие, спецбиты.
- users-groups — Учётные записи, группы, членство; useradd/usermod, /etc/passwd и /etc/group.
Есть неточность? Сообщить об ошибке в статье