По причинам мне нужно прочитать /root/.ssh/authorized_keys
с пользователем, не имеющим права его читать. Очевидно, я не могу изменить права (или ACL) файла, потому что ssh это не понравится.
Я обращаюсь к файлу с помощью Python:
try:
with open("/root/.ssh/authorized_keys",'r') as f:
foo()
except EnvironmentError:
print 'Bad permissions and/or file not existing'
Скрипт python будет выполнен непривилегированным пользователем с sudo
. Какие минимальные разрешения я должен добавить в sudoers
файл, чтобы скрипт мог прочитать файл?
Sudo предназначен для выполнения, а не чтения файлов. Если кто-то запустит этот сценарий python с помощью sudo, весь сценарий будет иметь права root и не будет проблем с чтением файла. Но у него также не будет проблем с добавлением ключей, или изменением пароля root, или просто выполнением rm -rf / *.
Если вы хотите предоставить ТОЛЬКО доступ для чтения к определенному файлу с помощью sudo, лучший способ сделать это - предоставить пользователю права sudo на печать этого файла в stdout.
Например, вы можете написать сценарий, который ничего не делает, кроме как перехватывает файл. Поместите это в /usr/bin/get_root_authkeys.sh
:
#!/bin/sh
cat /root/.ssh/authorized_keys
(убедитесь, что файл является исполняемым, но не доступен для записи пользователем).
Затем поместите это в sudo:
username ALL= (root:root) NOPASSWD /usr/bin/get_root_authkeys.sh
Немного более простое решение: вы можете дать им права sudo для команды cat, например
username ALL= (root:root) NOPASSWD cat /root/.ssh/authorized_keys
Оттуда, вместо того, чтобы делать fopen, вы выполняете эту команду sudo (например, sudo /usr/bin/get_root_authkeys.sh
или sudo cat /root/.ssh/authorized_keys
) и прочтите его вывод.
Попробуйте с этим в /etc/sudoers
:
username ALL = (root:root) NOPASSWD: /root/.ssh/authorized_keys