Bootstrap

Как создать правило запуска root скрипта любому пользователю

Как создать правило запуска 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
    

Проверка работоспособности

  1. Проверьте, что доменный пользователь авторизован:

Terminal:

  
klist  # должен показать Kerberos ticket
    
  1. Проверьте sudo для доменного пользователя:

Terminal:

  
sudo -l
    

Должно показать разрешенные команды без пароля.

  1. Тестовый запуск:

Terminal:

  
sudo /usr/local/bin/shutdown-now
    

Преимущества для доменной среды

Централизованное управление — меняете группу в AD, не трогая каждый Linux-хост

Аудит — все действия логируются с доменными именами

Безопасность — используются существующие группы безопасности AD

Масштабируемость — легко распространить на множество машин через Ansible/Puppet

Копирование материалов разрешается только с указанием автора Roman Sakhno и индексируемой прямой ссылкой на сайт (http://itdid.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/sahroman.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/sahroman.

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как настроить свой компьютер

  2. Текстовая ссылка:

    Она выглядит вот так: Как настроить свой компьютер

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

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

крипто-донат, на развитие сайта itdid.ru:

В новом окне с терминалом itdid.ru, введите любую сумму: