Разрешение пользователям запускать скрипт через /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

Затем, конечно, сделать исполняемый скрипт (я забыл это).

Все еще требует пароль (который в порядке), но работает.

Другие вопросы по тегам