LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Насчёт жертвы я имел ввиду то, что он, будучи уже ментально повреждён sudo-идеологией, пытался выдать рутовые права скрипту в $HOME. Последствия очевидны: скрипт редактируется в дальнейшем как угодно, и через него выполняется что угодно. Выдача таких прав usbip, посоветованная кем-то позже, немногим лучше: этим выдаются права на все действия, которые может сделать эта программа, а для этого надо как минимум их всех внимательно просмотреть, чтобы удостовериться, что среди них нет ни одного, которое можно использовать для незапланированной вредоносной деятельности.

Да, единственный нормальный вариант это писать обёртку с suid-root. Обёртка должна проверять, что именно этот набор аргументов допустим для запросившего это действие юзера (getuid() для suid-прог возвращает uid запустившего), и только после этого делать нужное действие. Ну или проще: если разрешённый вариант аргументов только один, пусть обёртка сразу его и вызывает а своих входных аргументов не имеет).

sudo тоже может выполнять роль такой обёртки, но его методы проверки (строковое сравнение команды с шаблонами) плохие, сравнивать надо не строки а их функциональное содержание.

Исходная версия firkax, :

Насчёт жертвы я имел ввиду то, что он, будучи уже ментально повреждён sudo-идеологией, пытался выдать рутовые права скрипту в $HOME. Последствия очевидны: скрипт редактируется в дальнейшем как угодно, и через него выполняется что угодно. Выдача таких прав usbip, посоветованная кем-то позже, немногим лучше: этим выдаются права на все действия, которые может сделать эта программа, а для этого надо как минимум их всех внимательно просмотреть, чтобы удостовериться, что среди них нет ни одного, которое можно использовать для незапланированной вредоносной деятельности.

Да, единственный нормальный вариант это писать обёртку с suid-root. Обёртка должна проверять, что именно этот набор аргументов допустим для запросившего это действие юзера (getuid() для suid-прог возвращает uid запустившего), и только после этого делать нужное действие. Ну или проще: если разрешённый вариант аргументов только один, пусть обёртка сразу его и вызывает а своих входных аргументов не имеет).