У меня есть скрипт, который я хочу, чтобы некоторые из моих пользователей могли запускать, и он требует прав администратора. Конечно, я не хочу давать им права администратора. Как мне разрешить этому скрипту работать безопасным способом?
Обновление: это система Ubuntu 9.10.
решение1
Просто используйте sudo. Вам нужно настроить sudo в /etc/sudoers
, что-то вроде этого:
fred ALL = (root) NOPASSWD: /path/to/command
Замените fred на имя пользователя или используйте %group для группы. Если вы удалите опцию NOPASSWD:, то они будут каждый раз вводить свой пароль.
setuid для скрипта небезопасен и не будет работать в Linux.
решение2
sudo и SUID оба являютсяочень неуверенный. Возможно — и, в зависимости от языка сценариев, легко — выйти из любого из них. SUID — это, безусловно, худшее, и некоторые языки сценариев даже не запустятся, если это сделать.
У меня есть запись в блоге о том, как сделать это безопасно, которую я впервые написал длязапуск Nagios проверка плагинов от имени rootно здесь это вполне применимо. Есть небольшая программа на C (которая годами гуляет по миру администраторов Linux), которая просто действует как оболочка вокруг скрипта. Вы просто редактируете исходный код программы на C, чтобы включить полный путь к скрипту, компилируете его, а затем устанавливаете этот SUID (или предоставляете sudo доступ к нему). Исходный код находится на моем сайте:setuid-prog.c.
Неотъемлемая проблема запуска скриптов как root (для пользователей без прав root) заключается в том, что во многих языках, используя различные методы (от плохой проверки ввода до переполнений), можно вырваться из запущенного скрипта и получить полный доступ root. Многие парни из Unix старого образца рекомендуют просто написать программу на C, чтобы сделать то, что вам нужно, но, опять же, большинство из них были SA, когда вынужныйуметь грамотно писать на языке C.
решение3
На какой ОС?
В Linux/Unix вы можете разрешить им запускать его через sudo. Файл /etc/sudoers можно изменить, чтобы предоставить им определенные разрешения на назначенные команды для определенных идентификаторов (пользователей).
В качестве альтернативы вы можете установить бит SUID и изменить владельца скрипта на привилегированного пользователя. Это заставит скрипт запускаться от имени этого пользователя, а не пользователя, который его запускает. Однако это касается всех пользователей, которые его запускают.
решение4
Есть два способа:
Лучше всего установить на нем бит SUID: chown root yourscript; chmod a+s yourscript
.
В качестве альтернативы вы можете предоставить им доступ для его изменения с помощью sudo
, запустив visudo
и следуя инструкциям. Однако это необязательно, так как это работает, если они запустят sudo
, который имеет бит SUID.