Это решение с использованием скриптов Bash.
Я предполагаю, что вы не можете использовать УИП для скриптов, как описано в этом U & L ответ . Совет в том, чтобы использовать
обертка, которая дезинфицирует окружающую среду (например,
sudo
сenv_reset
опцией).
В этом примере я использую /etc/our_secrets.txt
вместо data.txt
. Сначала ограничьте доступ к файлу:
sudo chown root: /etc/our_secrets.txt sudo chmod 600 /etc/our_secrets.txt
Затем создайте скрипт /usr/local/sbin/sget_my_secret
. Это скрипт:
#!/bin/sh exec /bin/grep -w "^$SUDO_USER" /etc/our_secrets.txt
И его разрешения:
sudo chown root: /usr/local/sbin/sget_my_secret sudo chmod 744 /usr/local/sbin/sget_my_secret
Теперь вы должны запустить sudo visudo
и изменить свой sudoers
файл, чтобы позволить пользователям вызывать sudo /usr/local/sbin/sget_my_secret
. Самый простой способ - это добавить
ALL ALL=(ALL) NOPASSWD: /usr/local/sbin/sget_my_secret
в файл. Теперь любой пользователь может запустить sudo sget_my_secret
. Для удобства вам нужен еще один скрипт /usr/local/bin/get_my_secret
:
#!/bin/sh exec /usr/bin/sudo /usr/local/sbin/sget_my_secret
Его разрешения:
sudo chown root: /usr/local/bin/get_my_secret sudo chmod 755 /usr/local/bin/get_my_secret
В этот момент любой пользователь может запустить, get_my_secret
чтобы получить свою часть информации (если таковая имеется). Вот что происходит:
get_my_secret
работает с обычными разрешениями.- Он пытается бежать
sudo /usr/local/sbin/sget_my_secret
. sudoers
Файл говорит, что может сделать это.sget_my_secret
запускается с повышенными разрешениями.- Повышенный
grep
обрабатывает файл.
Примечания по безопасности:
- В моем Debian упомянутая
env_reset
опция включена по умолчанию. - Вы можете заменить эту
ALL ALL=(ALL) ...
строку на более строгую. - В сценариях я использую полные пути везде, где могу.
- Любой, кто умеет бегать
sget_my_secret
со спуфингом$SUDO_USER
, может получить чужой секрет. Я думаю, что если вы можете сделать это, вы также можете читатьour_secrets.txt
напрямую. - Вы можете подумать, что можете позволить пользователям запускаться
sudo grep
; но это позволит имgrep
для чего угодно в любом файле! Смысл в томsget_my_secret
, чтобы добавить в этот файл только один специализированный исполняемыйsudoers
файл.