Как разрешить пользователю выполнять скрипт, принадлежащий root? Сетуид больше не работает

У меня есть некоторые сценарии bash, которые я использую с пользователем «root» для управления правилами iptable.

Проблема в том, что я хочу эти вещи одновременно:

  • Скрипт должен принадлежать root
  • Разрешения должны быть 700
  • Я хочу иметь исполняемый двоичный файл, который может выполнить определенный пользователь. Этот исполняемый файл запускает указанный скрипт как root.

Это использовалось для работы и по-прежнему используется в более старых дистрибутивах:

#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { setuid(0); system("/root/iptables/my-iptables-script.sh"); return 0; } 

Поэтому я компилирую это, а затем использую sudo chown root и sudo chmod 4777 . Таким образом, теперь пользователь может выполнить двоичный код и запустить скрипт, принадлежащий root.

Но теперь я установил Ubuntu 13.10, и когда я запустил этот двоичный файл, я получил «разрешение отклонено» для скрипта.

Возможно ли, что в этом отношении что-то изменилось с 12 апреля?

Что я могу сделать?

Самое простое и чистое решение – это, вероятно, использование sudo .

Вы можете настроить его так, чтобы данная группа unix выполняла именно этот скрипт с правами root.

 %iptablegroup ALL = (root) NOPASSWD: /path/to/script 

Тогда все, что вам нужно сделать, это добавить в эту группу нужных пользователей, и все должно быть хорошо.