Back to: sudo — делегування прав
sudo — делегирование прав
sudo позволяет выполнять команды от имени root (или другого пользователя) без необходимости входить как root. Это безопаснее и удобнее, чем использование su.
Базовое использование
# Выполнить команду от root
sudo apt update
# Выполнить несколько команд
sudo -- sh -c "apt update && apt upgrade -y"
# Запустить интерактивную shell-сессию root
sudo -i
# Запустить shell от другого пользователя
sudo -u alice whoami
# Выполнить команду от другого пользователя
sudo -u bob ls /home/bob/
/etc/sudoers — основной конфигурационный файл
⚠️ НИКОГДА не редактируйте /etc/sudoers напрямую! Используйте только visudo — он проверяет синтаксис перед сохранением.
# Редактировать sudoers
sudo visudo
# Структура правила:
# пользователь хост=(от_кого) [NOPASSWD:] команда
# Примеры:
# Полный доступ для пользователя
alice ALL=(ALL) ALL
# Доступ для группы (использовать %)
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
# Без пароля
alice ALL=(ALL) NOPASSWD: ALL
# Только конкретные команды
bob ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx
# От имени конкретного пользователя
charlie ALL=(apache) /usr/bin/systemctl restart httpd
# Группа без пароля для конкретных команд
%deploy ALL=(ALL) NOPASSWD: /usr/bin/deploy.sh
visudo — безопасное редактирование sudoers
# Редактировать
sudo visudo
# С указанием редактора
sudo EDITOR=vim visudo
sudo EDITOR=nano visudo
/etc/sudoers.d/ — отдельные файлы правил
Вместо редактирования /etc/sudoers лучше создавать отдельные файлы в /etc/sudoers.d/.
# Создать файл для приложения
sudo visudo -f /etc/sudoers.d/deploy
# Содержимое:
%deploy ALL=(ALL) NOPASSWD: /usr/local/bin/deploy.sh
# Файл подключается через директиву в /etc/sudoers:
# @includedir /etc/sudoers.d
Переменные окружения и sudo
# Сохранить переменные окружения
sudo -E command
# Задать переменную
sudo VAR=value command
# Список разрешённых переменных: env_reset и env_keep в sudoers
# Defaults env_keep += "HOME PATH"
sudo -l — проверить права
# Что может делать текущий пользователь
sudo -l
# Что может делать другой пользователь (нужен root)
sudo -l -U alice
# Пример вывода:
# User alice may run the following commands:
# (ALL) NOPASSWD: /usr/bin/systemctl restart nginx
Таймаут sudo
# По умолчанию sudo запоминает пароль 15 минут
# Задать свой таймаут в sudoers:
Defaults timestamp_timeout=30 # 30 минут
Defaults timestamp_timeout=0 # спрашивать каждый раз
Defaults timestamp_timeout=-1 # бесконечно (не рекомендуется)
Логирование sudo
# Все команды sudo записываются в лог
grep sudo /var/log/auth.log
journalctl -u sudo
# или
journalctl | grep sudo
Алиасы в sudoers
# Алиасы пользователей
User_Alias ADMINS = alice, bob, charlie
User_Alias WEBMASTERS = dave, eve
# Алиасы команд
Cmnd_Alias WEB = /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx
Cmnd_Alias NETWORK = /usr/bin/ip, /usr/sbin/iptables, /usr/sbin/ifconfig
# Алиасы хостов
Host_Alias WEBSERVERS = web1, web2, web3
# Использование алиасов
ADMINS ALL=(ALL) ALL
WEBMASTERS WEBSERVERS=(root) NOPASSWD: WEB
Практическое задание
- Проверьте свои права:
sudo -l - Изучите /etc/sudoers:
sudo visudo(только чтение, не меняйте!) - Посмотрите файлы в /etc/sudoers.d/:
ls /etc/sudoers.d/ - Выполните команду от другого пользователя:
sudo -u root whoami - Проверьте логи sudo:
sudo journalctl | grep sudo | tail -10


Добавить комментарий