使用非 root 用户通过 SSH 保护 Rsync 守护进程

使用非 root 用户通过 SSH 保护 Rsync 守护进程

不幸的是,由于托管提供商的原因,我无法以 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

有小费吗?

相关内容