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

Разрешения для процесса rsync на доступ к файлам, которые ему не принадлежат, без его запуска от имени пользователя root

Я хочу использовать rsync для автоматического резервного копирования с удаленного веб-сервера через ssh. Веб-сервер настроен с помощью suphp, поэтому на разных сайтах есть файлы с разными пользователями и группами. К сожалению, веб-приложение генерирует некоторые файлы без прав группы или других разрешений на чтение.

Я вижу только два варианта, ни один из них не приемлем; либо запустите rsync от имени пользователя root, либо разрешите доступ по ssh для каждого веб-пользователя и запустите rsync по очереди от имени каждого веб-пользователя.

К сожалению, ACL не работают, потому что, когда файлы создаются веб-сервером с разрешениями 600, это корректирует унаследованную маску ACL, чтобы эффективные разрешения для других пользователей были равны 000.

Может ли кто-нибудь предложить способ запуска rsync с минимально возможными привилегиями, который по-прежнему разрешает доступ к пользовательским файлам, у которых нет групповых или других разрешений на чтение.

Спасибо

У меня есть решение, перевернув проблему с ног на голову. Вместо того, чтобы перетаскивать данные с производственной машины на резервную машину, я перемещаю данные из производственной среды в резервную.

Таким образом, мне нужно запустить rsync только как пользователь PHP на производственной машине и как пользователь резервного копирования на резервной машине. Файл авторизованных ключей ssh ​​для пользователя резервного копирования позволяет мне дополнительно заблокировать доступ по IP-адресу производственного сервера, а также ограничить команды, которые могут быть запущены rsync.

Я вижу 3 отведения, ни один из них не является действительно простым.

  • Вы можете использовать rsync без ssh, в туннеле vpn или ssl, так что процесс rsync будет довольно ограничен с общим доступом только для чтения.

  • Вы можете запустить привязку своих данных только для чтения и использовать там данные rsync / ssh.

  • Использование возможностей http://linux.die.net/man/7/capabilities, особенно CAP_DAC_READ_SEARCH, ваш непривилегированный процесс должен иметь возможность читать все. Чтобы изменить возможности rsync, я бы использовал http://linux.die.net/man/8/setcap.

Чистое решение, основанное на возможностях, описано здесь: https://blog.night-shade.org.uk/2015/04/linux-capabilities-and-rsync-from-presentation-to-practice/

РЕДАКТИРОВАТЬ: подробности решения. Возможности состоят из комбинации возможностей процессов, унаследованных между процессами и изначально установленных PAM, и возможностей файлов, установленных для исполняемых файлов. Чтобы предоставить полный доступ для чтения к резервной копии пользователя при использовании rsync:

- добавьте строку в /etc/security/capability.conf с

cap_dac_read_search backup

предоставить cap_dac_read_search (читать любой файл без root) для резервного копирования пользователя. Это включит возможность только при использовании исполняемого файла с тем же набором возможностей, что и унаследованный (и «эффективный» бит, чтобы он был неявно включен).

- установите эффективную и наследуемую возможность для файла / usr / bin / rsync с помощью команды:

setcap cap_dac_read_search+ei /usr/bin/rsync

Он дает возможность читать весь контент только данному пользователю при использовании данного двоичного файла (и никому другому, использующему тот же двоичный файл)