Разрешение пользователям запускать скрипт через /etc/sudoers и разрешения
Я хотел бы, чтобы пользователи из группы сотрудников, у которых нет прав администратора / root, не запускали следующий скрипт без запроса пароля. Это в OSX.
Обратите внимание, что / usr / sbin / serveradmin требует привилегий root / sudo.
Я попытался добавить следующее в мой / etc / sudoers, но это не работает. Сценарий имеет разрешения 755.
%staff ALL=NOPASSWD: /usr/sbin/serveradmin stop smb,/usr/sbin/serveradmin start smb
%staff ALL=NOPASSWD: /bin/sh /opt/scripts/restart-smb
Вот сценарий оболочки:
#!/bin/bash
#
# This script simply restarts SMB (Samba)
#
echo "Stopping SMB..."
/usr/sbin/serveradmin stop smb
echo "Pausing for 30 seconds..."
/bin/sleep 30
echo "Starting SMB..."
/usr/sbin/serveradmin start smb
echo "Script complete!"
Ваши идеи, предложения наиболее ценятся!
Дэн
2 ответа
ПРЕДУПРЕЖДЕНИЕ, играя с файлом / etc / sudoers, управляющим привилегиями и разрешениями пользователей, я сломал Ubuntu.
Обычный вход в систему был невозможен. Я получил ошибку синтаксического анализа из-за отсутствия пробела между символами # и% в строке, которую я неправильно прокомментировал #%sudo ALL=NOPASSWD: /pathtoscripts/script.sh . Мне пришлось восстановить его с помощью монтирования install/liveCD снова в файловую систему hardrive, вернуть на место оригинальный файл и отключить том для записи изменений.
По вышеуказанной причине я НЕ РЕКОМЕНДУЮ ЭТОГО МЕТОДА сначала, потому что он изменяет критический файл привилегий / etc / sudoers. Выберите первые доступные варианты, если:
у вас есть хорошая резервная копия ваших данных за пределами вашего ПК
Вы не боитесь рискнуть восстановить / переустановить свою систему
Вы знаете, что ПРАВИЛЬНЫЙ СИНТАКСИС файла / etc / sudoers, испытания и ошибки синтаксического анализа могут стоить вам много времени и / или усилий / сбоев...
Читая другие посты, мне удалось заставить его работать в моей системе, управляя разрешениями через группу:
Я создал группу mygroup
sudo groupadd mygroup
Я добавил пользователя myuser, который будет выполнять скрипт
sudo usermod -a -G mygroup myuser
Я добавил в конце / etc / sudoers запись, в противном случае привилегия перезаписывается предыдущими строками (будьте осторожны с синтаксисом)
%mygroup ALL=NOPASSWD: /mypath/to/myscripts/myscript.sh
Приведенный выше скрипт myscript.sh должен иметь разрешение на выполнение
sudo ugo+x /mypath/to/myscripts/myscript.sh
Этот сценарий затем может быть запущен пользователем myuser напрямую, как показано ниже, без запроса пароля.
sudo /mypath/to/myscripts/myscript.sh
Альтернативно, скрипт может быть запущен внутри другого таким же образом
Я нашел другой способ, не создавая группу, добавив в файл /etc/sudoers (в конце файла) строку:
%sudo ALL=NOPASSWD: /mypath/to/myscripts/myscript.sh
Если скрипт должен запускаться только несколькими существующими пользователями myuser1, myuser2, всегда можно добавить только в /etc/sudoers (в конце файла) строки:
myuser1 ALL=(ALL) NOPASSWD: /mypath/to/myscripts/myscript.sh
myuser2 ALL=(ALL) NOPASSWD: /mypath/to/myscripts/myscript.sh
Я смог сделать эту работу, добавив следующее в мой файл /etc/sudoers:
%staff ALL=/opt/scripts/restart-smb
Затем, конечно, сделать исполняемый скрипт (я забыл это).
Все еще требует пароль (который в порядке), но работает.