Мне пришлось сделать грязный Linux-хак для кого-то, чтобы они могли запустить принтер с помощью команды оболочки cupsenable printername
, будучи пользователем без полномочий root. Я не хотел, чтобы они могли использовать синтаксис cupsenable
как root, поэтому я просто написал оболочку C, которая санирует вход в argv[1]
и вызывает system("cupsenable sanitizedprintername")
.
Я сделал программу setuid root, но даже в этом случае cupsenable
не удалось с "разрешением отклонить". Затем я вставил вызов setuid(0)
до system()
и, вот и вот, он работал.
Не обращайте внимания на то, что существует лучший способ предоставить пользователям контроль над принтером. Вероятно, есть лучший способ. Меня интересуют тонкости chmod u+s
vs. setuid(0)
vs. system()
. Почему он так себя ведет?