简单来说:我有一台 Linode VPS,我想通过 rsync 将其备份到本地笔记本电脑。我刚刚为通信生成了 ssh 密钥,并为私钥留下了一个空白密码,这样我就可以通过 cron 进行 rsync,而不必担心密码。
为了提高安全性,我还拒绝了 root ssh 登录。理想情况下,我希望备份所有内容,但使用普通用户根本无法做到这一点,除非我授予特定用户对所有内容的 rwx 访问权限。
不允许 root 登录的情况下通过 rsync 备份整个文件系统的最佳方法是什么?
答案1
使用 root 帐户:只有 uid 0 可以读取整个文件系统。
现在,如果您想提高安全性,您可以执行以下操作:
- 不允许 root 通过 ssh 使用密码登录(sshd 配置中的 PermitRootLogin without-password)。
- 使用密钥认证进行备份。
" PermitRootLogin
Specifies whether root can log in using ssh(1). The argument
must be ``yes'', ``without-password'', ``forced-commands-only'',
or ``no''. The default is ``yes''.
If this option is set to ``without-password'', password
authentication is disabled for root.
If this option is set to ``forced-commands-only'', root login
with public key authentication will be allowed, but only if the
command option has been specified (which may be useful for taking
remote backups even if root login is normally not allowed). All
other authentication methods are disabled for root.
If this option is set to ``no'', root is not allowed to log in."
从未尝试过“forced-commands-only”参数,但它看起来很有趣。
答案2
您可以在远程服务器上以守护进程模式运行 rsync,并在客户端使用以下命令备份您想要的任何分区/文件夹:
rsync -au rsync://[email protected]:/folder /path/to/dest
但是,您需要以下内容:
- 在远程服务器上以守护进程模式运行 rsync。
- 您需要在您和远程服务器之间打开端口 873。
[folder]
您需要在 中定义远程服务器上的模块/etc/rsyncd.conf
。
为了处理安全/加密部分,您可以设置一些隧道或 VPN。例如,您可以使用以下命令设置隧道 SSH:
sudo ssh -L 873:your.server.ip.addr:873 [email protected]
一旦隧道建立,您就可以在本地使用 rsync,连接将通过隧道转发到远程服务器。
rsync -au rsync://user@localhost:/folder /path/to/dest
在这种情况下,您不需要向公众开放端口 873,因为连接是通过端口 22 上的 SSH 进行隧道传输的。
答案3
将用户放入 root 组怎么样?
我相信 root 组将能够读取其他文件,类似于 root。