sudo — делегування прав

sudo — делегування прав

Изображение записи по умолчанию
0

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

Практическое задание

  1. Проверьте свои права: sudo -l
  2. Изучите /etc/sudoers: sudo visudo (только чтение, не меняйте!)
  3. Посмотрите файлы в /etc/sudoers.d/: ls /etc/sudoers.d/
  4. Выполните команду от другого пользователя: sudo -u root whoami
  5. Проверьте логи sudo: sudo journalctl | grep sudo | tail -10

Comments

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Related Post