Не можете отбросить привилегии с помощью suid-файла? - PullRequest
0 голосов
/ 06 ноября 2018

Мне было интересно, есть ли способ отбросить привилегии, используя двоичный файл suid (используя Ubuntu 18.04). Посмотрите:

# cp /bin/bash .
# chown www-data bash
# chmod 4700 bash
# ls -lh
-rws------ 1 www-data root 1,1M abr  4  2018 bash
# ./bash
# id
uid=0(root) gid=0(root) groups=0(root)

Есть ли объяснение, почему можно получить привилегии, но не отбрасывать их с помощью suid-файлов?

Возможно, вам интересно, чего я пытаюсь достичь, но это только для изучения.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Что касается set-uid, то здесь нет иерархии привилегий - она ​​просто меняет эффективный ИД пользователя на владельца программы. Root ничем не отличается от других пользователей.

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

Вот что здесь произошло. root run bash, и операционная система изменила эффективный UID на www-data. bash обнаружил это и изменил обратно на root.

0 голосов
/ 07 ноября 2018

Это работает в общем случае:

# cp /usr/bin/id .
# chown www-data id
# chmod 4700 id
# ./id
uid=0(root) gid=0(root) euid=33(www-data) groups=0(root)

bash это особый случай. Из раздела «ПРИЗНАНИЕ» руководства bash, с добавлением акцента на соответствующую часть:

Если оболочка запущена с эффективным идентификатором пользователя (группы), не равным идентификатор реального пользователя (группы) и опция -p не указана, запуска нет файлы читаются, функции оболочки не наследуются от среды, переменные SHELLOPTS, BASHOPTS, CDPATH и GLOBIGNORE, если они появляются в среде, игнорируются, и эффективный идентификатор пользователя установить реальный идентификатор пользователя . Если опция -p указана при вызове, поведение при запуске такое же, но эффективный идентификатор пользователя не сброс.

Передача -p (привилегированного) флага действительно подавит это поведение:

# cp /bin/bash .
# chown www-data bash
# chmod 4700 bash
# ./bash -p
bash-4.4$ id
uid=0(root) gid=0(root) euid=33(www-data) groups=0(root)
...