
Моя ОС — 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. Во-первых, Linux не позволяет никаким скриптам быть setuid, хотя некоторые другие ОС это делают. Во-вторых, bash обнаружит запуск с setuid и немедленно сбросит привилегии.
Это связано с тем, что безопасность сценариев оболочки чрезвычайно зависит от среды, гораздо больше, чем безопасность обычных приложений на языке C.
В конечном счете, в настоящее время бит suid в основном полезен для исполняемых двоичных файлов. Способ запуска скрипта/bash, как этот, заключается в вызове его из скомпилированного двоичного файла suid.