Когда я ищу, как сбросить права root в сценариях оболочки, я часто вижу ответы, использующие su
. Однако, когда вы закончите использовать su
ты можешь просто ввести logout
и вернуться в оболочку исходного пользователя. У меня есть сценарий bash, работающий от имени пользователя root, и я делаю это в конце:
exec su -c "external_com" - muser
В результате получается следующее дерево процессов:
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
1 root 20 0 37352 2500 2192 S 0.0 0.0 0:00.02 su -c external_com
5 muser 20 0 85548 6292 5156 S 0.0 0.0 0:00.47 └─ external_com
13 muser 20 0 85548 6292 5156 S 0.0 0.0 0:00.35 ├─ external_com
12 muser 20 0 85548 6292 5156 S 0.0 0.0 0:00.02 ├─ external_com
Я не могу контролировать external_com
, и он не вызывает setuid внутри. Он представляет собой общедоступный для всего мира веб-интерфейс. Если кто-то как-то получает консоль через дыру в безопасности в веб-интерфейсе, не могли бы они просто позвонить logout
и быть пользователем root?
РЕДАКТИРОВАТЬ: Если я правильно читаю, лучший подход - просто запустить скрипт как muser
и разрешить muser
чтобы выполнить sudo несколько необходимых ему команд. Я все же хотел бы получить ответ на этот вопрос, так как это ценная информация :)
Нет, это не повод для беспокойства.
Если кто-то получил оболочку в результате дыры в безопасности в external_com, то все, что он мог сделать, это запустить команды от имени muser. Если они вышли из оболочки (с выходом из системы), то это конец процесса оболочки; они не возвращаются как root. Когда external_com завершится, процесс / скрипт, который его запустил, завершится (потому что вы выполнили exec)