У меня есть пользователь с ограниченным доступом в системе (то есть он не sudoer); давайте назовем его Боб .
У меня есть скрипт или бинарный файл, которому я, системный администратор, доверяю, и у меня не возникло бы проблем с его запуском от имени пользователя root; давайте назовем сценарий get-todays-passphrase.sh
. Задача этого сценария состоит в том, чтобы читать данные из «частного» (принадлежащего пользователю / группе, отличному от Боба или даже корневого) файла, расположенного в нем /srv/daily-passphrases
, и выводить только определенную строку из файла: строку, соответствующую текущей дате ,
Таким пользователям, как Боб, не разрешается знать парольную фразу завтрашнего дня, даже если она указана в файле. По этой причине файл /srv/daily-passphrases
защищен разрешениями Unix, поэтому пользователям без полномочий root, таким как Bob, не разрешен прямой доступ к файлу. Однако им разрешено запускать get-todays-passphrase.sh
скрипт в любое время, который возвращает «отфильтрованные» данные.
Подводя итог ( версия TL; DR ):
- Боб не может прочитать защищенный файл
- Скрипт может читать защищенный файл
- В любое время Боб может запустить скрипт, который может прочитать файл
Возможно ли сделать это в разрешениях файлов Unix? Или, если Боб запускает сценарий, будет ли он всегда обречен на запуск с теми же разрешениями, что и Боб?
источник
Предисловие:
Как было отмечено в комментариях и по причинам, изложенным в этом ответе, ядро Linux игнорирует бит setuid / setguid при обработке скрипта. Я не собираюсь дублировать ответ Бенджамина, но вместо этого заменю скрипт на executetabe, чтобы сделать мой ответ правильным.
Краткий ответ: используйте setgid
Подробные шаги:
sudo chown :readpass thatfile
sudo chmod g=r,o= thatfile
sudo chmod g+s thatfile
Таким образом, ваш исполняемый файл будет работать с разрешениями группы-владельца и, таким образом, сможет читать файл.
источник
thatfile
с группойreadpass
.