Я использую rsync --rsh "ssh"
прижать к зеркалу. Для установки необходимых разрешений файловой системы на зеркале требуется rsync
для запуска с правами root на зеркале. Однако зеркальные файлы находятся в единой иерархии, и я хотел бы разрешить rsync
чтобы получить доступ только к этой иерархии и ни к чему другому на зеркале.
Как бы я позволил rsync
установить разрешения, а также ограничить доступ?
Возможно ли какое-то сочетание rsync --rsh "???"
и command="???"
вариант в authorized_keys
что могло бы помочь? В rsync
команда уже использует специальный ключ в authorized_keys
.
Или есть способ rsync
подключиться как непривилегированный пользователь, попасть в тюрьму, а затем получить доступ для установки разрешений файловой системы? Заключить процесс в тюрьму легко, но позволяя удаленному rsync
получение привилегий кажется трудным, а позволять заключенному в тюрьму процессу получать какие-либо разрешения - рискованно. (Конечно, прямо сейчас у процесса есть корень, и любая степень ограничения была бы улучшением, даже если бы только для уменьшения опасности.)
Чтобы выполнить синхронизацию удаленного местоположения с локальным:
rsync -avze ssh user@source:/dir destination
Чтобы выполнить синхронизацию локального местоположения с удаленным местоположением:
rsync -avz source -e ssh user@destination:/dir
На странице руководства (http://linux.die.net/man/1/rsync):
-a archive mode; e.g. copies permissions
-v verbose; in case you want to log what gets copied
-z compress during transfer
-e specify the remote shell to use; let's you use ssh
Чтобы заставить rsync работать без запроса пароля, вам необходимо настроить доверительные отношения между исходным и целевым серверами, сгенерировав rsa-ключи и введя их в соответствующие авторизованные ключи. Вот хороший урок:
Ты должен бежать rsync
из ваше зеркало с вашим оригиналом в качестве источника.
В зависимости от вашего варианта использования вы должны либо запустить его как cronjob
(периодический) или sshkey
команда (толчок инициировал тягу, фактически толчок).
Решение в моем конкретном случае - использовать rsync --rsh "ssh"
к подключиться как пользователь, которому должны принадлежать зеркалируемые файлы и использовать конфигурацию ssh для привязки этого пользователя к правильной иерархии.
Рецепт примерно так на целевом сервере:
useradd user
mkdir /home/user/srv/service
chown -R root:root /home/user
Grant user write permission to /srv/service
nano /etc/fstab
/srv/service /home/user/srv/service none bind 0 0
mount /srv/service
nano /etc/ssh/sshd_config
Match User user
ChrootDirectory %h
service ssh reload
nano /home/user/.ssh/authorized_keys
Add public key for remote user.
Наконец, из удаленной системы, как непривилегированный пользователь, отправьте данные в зеркало:
rsync --archive --rsh "ssh" --compress /srv/service/ user@server:/srv/service/