Будьте очень осторожны: сценарии в сочетании с setuid опасны!
Во-первых, пожалуйста, посмотрите на этот вопрос / ответы, особенно на этот ответ и предупреждение безопасности .
Если вы все еще хотите выполнить свой сценарий с помощью setuid
set, вы можете написать короткую программу на C в качестве оболочки и установить setuid
бит в скомпилированном двоичном файле.
Пример Wrapper:
int main(void) { setuid(0); clearenv(); system("/absolute/path/to/your/script.sh"); }
Другое решение с использованием sudo
(упоминается здесь ):
От имени пользователя root запретите запись (и, возможно, другое) в ваш скрипт:
chown root /absolute/path/to/your/script.sh chmod 700 /absolute/path/to/your/script.sh
Убедитесь, что никто, кроме root, не может заменить скрипт, например, изменив права доступа родительской папки:
chown root / absolute / path / to / your / chmod 755 / абсолютный / путь / к / вашему /
Измените права доступа sudo
/etc/sudoers
с помощьюvisudo
:ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Более подробную информацию о настройках (например, ограничение доступа для определенных пользователей или групп) можно найти на странице руководства sudoers.
После этого все пользователи могут запускать скрипт от имени пользователя root без пароля:
sudo /absolute/path/to/your/script.sh
Это похоже на использование решения обертки / setuid выше.