Назад | Перейти на главную страницу

Разрешение на чтение определенного файла с помощью sudo

По причинам мне нужно прочитать /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