Как создать правило запуска root скрипта любому пользователю
Как создать скрипт на bash в linux, который сможет запускать любой пользователь без использования прав root в данном случае для примера, создадим скрипт, который выполняет команду
☯
Terminal:
⌕
≡
✕
sudo shutdown now
Для решения этой задачи в ALT Linux есть несколько подходов. Самый оптимальный и безопасный — использовать sudo с настройкой в sudoers. Вот как это сделать:
Рекомендуемое решение через sudo
1. Создайте bash-скрипт
☯
Terminal:
⌕
≡
✕
sudo nano /usr/local/bin/shutdown-now
Содержимое скрипта:
☯
Terminal:
⌕
≡
✕
#!/bin/bash
/sbin/shutdown now
Сделайте его исполняемым:
☯
Terminal:
⌕
≡
✕
sudo chmod +x /usr/local/bin/shutdown-now
2. Настройте sudoers
Откройте конфигурацию sudoers безопасным способом:
☯
Terminal:
⌕
≡
✕
sudo visudo
Добавьте в конец файла одну из строк:
Вариант A — для всех пользователей:
☯
Terminal:
⌕
≡
✕
ALL ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
Вариант B — только для определённой группы (например, users):
☯
Terminal:
⌕
≡
✕
%users ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
Вариант C — только для конкретного пользователя:
☯
Terminal:
⌕
≡
✕
username ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
3. Использование
Теперь любой пользователь (согласно настройкам) может выполнить:
☯
Terminal:
⌕
≡
✕
sudo /usr/local/bin/shutdown-now
Или создайте алиас для удобства в /etc/bashrc или ~/.bashrc:
☯
Terminal:
⌕
≡
✕
alias poweroff-now='sudo /usr/local/bin/shutdown-now'
Почему этот способ оптимален?
✅ Безопасность — вы явно указываете, какую именно команду можно выполнять без пароля
✅ Контроль — легко добавлять/удалять пользователей
✅ Логирование — все действия записываются в системные логи
✅ Стандартность — это общепринятый подход в Linux
Альтернатива: PolicyKit (для графического окружения)
Если нужно выключение из графического интерфейса, можно настроить PolicyKit, но для командной строки sudo — лучший вариант.
Для компьютера в домене Active Directory через Kerberos ситуация будет сложнее. Рекомендуемое решение: sudo + группы AD
1. Создайте скрипт (как раньше)
☯
Terminal:
⌕
≡
✕
sudo nano /usr/local/bin/shutdown-now
☯
Terminal:
⌕
≡
✕
#!/bin/bash
/sbin/shutdown now
☯
Terminal:
⌕
≡
✕
sudo chmod +x /usr/local/bin/shutdown-now
2. Настройте sudoers для доменных групп
☯
Terminal:
⌕
≡
✕
sudo visudo
Добавьте правило для доменной группы:
☯
Terminal:
⌕
≡
✕
%domain_admins@DOMAIN.COM ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
%helpdesk@DOMAIN.COM ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
Или для всех доменных пользователей:
☯
Terminal:
⌕
≡
✕
%domain_users@DOMAIN.COM ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
Важно: Замените DOMAIN.COM на ваш реальный домен (большими буквами).
3. Проверьте маппинг групп AD
Убедитесь, что группы AD правильно маппятся:
☯
Terminal:
⌕
≡
✕
getent group | grep @
id доменный_пользователь@DOMAIN.COM
Альтернатива: SSSD с локальной группой
Если прямой маппинг групп не работает:
1. Создайте локальную группу
☯
Terminal:
⌕
≡
✕
sudo groupadd shutdown-users
2. Добавьте доменных пользователей в группу
☯
Terminal:
⌕
≡
✕
sudo usermod -aG shutdown-users username@DOMAIN.COM
Или автоматически через SSSD — в /etc/sssd/sssd.conf:
☯
Terminal:
⌕
≡
✕
[domain/DOMAIN.COM]
ldap_user_extra_attrs = altSecurityIdentities:altSecurityIdentities
ldap_user_ssh_public_key = altSecurityIdentities
# Автоматическое добавление в группу
auto_private_groups = true
3. Настройте sudoers для локальной группы
☯
Terminal:
⌕
≡
✕
sudo visudo
☯
Terminal:
⌕
≡
✕
%shutdown-users ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
Лучшая практика для корпоративной среды
Создайте отдельный файл sudoers:
☯
Terminal:
⌕
≡
✕
sudo visudo -f /etc/sudoers.d/shutdown-policy
Содержимое:
☯
Terminal:
⌕
≡
✕
# Shutdown policy for domain users
# Managed by IT department
# Allow specific AD groups to shutdown without password
%IT-Admins@EXAMPLE.COM ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
%Operators@EXAMPLE.COM ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
# Restrict to specific hosts (optional)
# %Operators@EXAMPLE.COM hostname1,hostname2=(ALL) NOPASSWD: /usr/local/bin/shutdown-now
Установите права:
☯
Terminal:
⌕
≡
✕
sudo chmod 0440 /etc/sudoers.d/shutdown-policy
Проверка работоспособности
- Проверьте, что доменный пользователь авторизован:
☯
Terminal:
⌕
≡
✕
klist # должен показать Kerberos ticket
- Проверьте sudo для доменного пользователя:
☯
Terminal:
⌕
≡
✕
sudo -l
Должно показать разрешенные команды без пароля.
- Тестовый запуск:
☯
Terminal:
⌕
≡
✕
sudo /usr/local/bin/shutdown-now
Преимущества для доменной среды
✅ Централизованное управление — меняете группу в AD, не трогая каждый Linux-хост
✅ Аудит — все действия логируются с доменными именами
✅ Безопасность — используются существующие группы безопасности AD
✅ Масштабируемость — легко распространить на множество машин через Ansible/Puppet
-
Создано 05.11.2025 08:12:39
-
Roman Sakhno

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.