Скрипт suid работает неправильно

Скрипт suid работает неправильно

Моя ОС — Fedora 24, и я попытался протестировать функциональность бита suid.

Ниже я написал bash как Setuid.bash:

#!/bin/bash
if [ $USER = 'root' ]
then
    echo "Like Root Run"
    echo "Root User Add in " $(date) >> /etc/SetUid
else
    echo "Other User Run"
    echo $USER "User Add in " $(date) >> /etc/SetUid
fi

с -rwsrw-r-x. 1 root root 249 May 21 14:45 /bin/Setuid.bashразрешения и-rwx------. 1 root root 432 May 21 14:45 /etc/SetUid

Теперь, когда я попробовал /bin/Setuid.bashкак root, я получил:

Нравится Root Run

но когда запустишь это сТестпользователь, с которым я столкнулся:

Другой пользователь Запуск

bin/Setuid.bash: строка 8: /etc/SetUid: Отказано в доступе

Буду признателен, если кто-нибудь даст мне знать, где я ошибся?

решение1

Давным-давно bash(и другие интерпретаторы оболочки) добавили встроенные меры безопасности против (з)употребления suid, поскольку это опасно.Опасности сценариев оболочки SUID

ОтПочему Bash такой: suid

Скрипты Bash не могут работать с установленным битом suid. Во-первых, Linux не позволяет никаким скриптам быть setuid, хотя некоторые другие ОС это делают. Во-вторых, bash обнаружит запуск с setuid и немедленно сбросит привилегии.

Это связано с тем, что безопасность сценариев оболочки чрезвычайно зависит от среды, гораздо больше, чем безопасность обычных приложений на языке C.

В конечном счете, в настоящее время бит suid в основном полезен для исполняемых двоичных файлов. Способ запуска скрипта/bash, как этот, заключается в вызове его из скомпилированного двоичного файла suid.

Связанный контент