Что касается set-uid, то здесь нет иерархии привилегий - она просто меняет эффективный ИД пользователя на владельца программы. Root ничем не отличается от других пользователей.
То, что вы видите, является преднамеренным действием bash
. Существует множество последствий для безопасности при запуске сценариев оболочки setuid, и bash не разрешает это по умолчанию. Когда bash
запускается, он проверяет, совпадает ли действительный UID с реальным UID. Если нет, это означает, что запущен set-uid. Если это не выполняется одним из способов, где это разрешено, он вызывает функцию типа setuid()
, чтобы изменить обратно на реальный UID.
Вот что здесь произошло. root
run bash
, и операционная система изменила эффективный UID на www-data
. bash
обнаружил это и изменил обратно на root
.