Назад | Перейти на главную страницу

Является ли использование su для удаления root в сценариях оболочки угрозой безопасности?

Когда я ищу, как сбросить права 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)