不幸的是,由于托管提供商的原因,我无法以 root 身份访问 rsync 守护进程并相应地保护它。相反,为了从服务器定期进行远程备份,我必须以非 root 用户身份访问 rsync 守护进程,该用户通过文件具有有限的 sudo 权限/etc/sudoers
。
我已经设法让它工作,并且可以使用下面的解决方案成功进行备份(向下滚动)。
每个请求的附加信息
a.)non-root-username
通过以下方式拥有此 sudo 权限/etc/sudoers
:
non-root-username ALL=NOPASSWD: /usr/bin/rsync
b.) 目标是使用非root用户对我的系统目录进行安全的远程备份/backups
(使用加密的ssh连接和rysncd而不是rsync协议来节省资源)
c.) 一个名为的目录/backups
(可以成功使用下面的解决方案,我只是想确保它尽可能安全)
问题:
如何使非 root 用户 rsync 守护进程连接更安全?
问题
由于sudo rsync
不保存环境变量,我遇到了各种问题:
1.) 在该/etc/rsyncd.conf
功能hosts allow =
不再起作用时,服务器端rsync.log显示:
rsync allowed access on module data from UNKNOWN (0.0.0.0)
rsync on data/ from root@UNKNOWN (0.0.0.0)
building file list
2.) Via/etc/ssh/sshd_config
和/或/home/non-root-user/.ssh/authorized_keys
我无法分别使用ForceCommand
,command=rsync --server --daemon .
来执行实际的 rsync 命令。任何这样做的尝试都会导致:
rsync: did not see server greeting
rsync error: error starting client-server protocol (code 5) at main.c(1675) [Receiver=3.1.3]
2a.) 我目前的这些值限制了我的非根备份用户/etc/ssh/sshd_config
...还有其他建议吗?
Match User non-root-username
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
# ForceCommand /usr/bin/sudo /usr/bin/rsync <-- will not work
# ForceCommand sudo rsync <-- will not work
# ForceCommand rsync <-- will not work
我当前的解决方案:
使用:
rsync -a -e "ssh -l non-root-username" --rsync-path="sudo rsync" xx.xx.xx.xx::data /local/path
更新:
编辑上面的命令导致@ERROR: auth failed on module data
,因此我必须将上面的 auth 用户更改为,/etc/rsyncd.conf
并且auth users: root
对于/etc/rsyncd.conf
root@admin:~# cat /etc/rsyncd.conf
# Global configuration of the rsync service
pid file = /var/run/rsyncd.pid
#hosts allow = 123.123.123.123 <-- hashed out
log file = /var/log/rsync.log
# Username and group for working with backups
uid = root
gid = root
# Don't allow to modify the source files
read only = yes
# Data source information
[data]
use chroot = false
#strict modes = false <-- (defaults to true)
path = /backups
list = yes
auth users = root
secrets file = /etc/rsyncd.passwd
在我的 中/etc/rsyncd.passwd file
,我有:
root@admin:~# cat /etc/rsyncd.passwd
root:password
我拥有以下权限/etc/rsyncd.conf
:
root@admin:~# stat /etc/rsyncd.conf
File: /etc/rsyncd.conf
Size: 471 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 144028 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 1001/root)
Access: 2022-05-21 13:38:46.797769245 +0800
Modify: 2022-05-21 13:38:42.641735637 +0800
Change: 2022-05-21 13:55:52.384894170 +0800
而且,我拥有这些权限/etc/rsyncd.passwd
root@admin:~# stat /etc/rsyncd.passwd
File: /etc/rsyncd.passwd
Size: 31 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 144040 Links: 1
Access: (0640/-rwxrwxr-x) Uid: ( 0/ root) Gid: ( 1001/root)
Access: 2022-05-21 13:38:06.989448597 +0800
Modify: 2022-05-21 13:37:37.473212811 +0800
Change: 2022-05-21 13:37:37.473212811 +0800
有小费吗?