Rov*_*ion 7 linux ssh sudo zfs
我要复制文件系统storage/photos从source以destination不启用ssh登录为root用户。我尝试了许多不同的组合,例如:
sudo zfs send -R storage/photos@frequent_2015-02-12_18:15 | ssh example.com sudo zfs recieve storage/photos
sudo zfs send -R storage/photos@frequent_2015-02-12_18:15 | ssh example.com su -c zfs recieve storage/photos
sudo zfs send -R storage/photos@frequent_2015-02-12_18:15 | ssh example.com 'sudo -S zfs recieve storage/photos <~/topsecret'
Run Code Online (Sandbox Code Playgroud)
我不能使用 sudo -S 传递密码,因为 zfs 流已经连接到标准输入。上面的两个示例需要交互式终端而不是标准输入。
也许不想在服务器上启用 root 登录是愚蠢的。但是,对于蛮力攻击者来说,还有一件事可以猜测哪个好。
小智 8
我今天早些时候遇到了同样的问题。我发现您可以使用“zfs allow”命令授权普通用户执行某些操作:
以 root 身份,在服务器上执行以下操作: zfs 允许 your_username 接收、创建、挂载存储/照片
之后,您将能够使用 your_username ssh 进入服务器,并且您将拥有 zfs 权限来接收。请参阅此处:http : //docs.oracle.com/cd/E19253-01/819-5461/gfkco/index.html
@analog900 走在正确的轨道上。
提高安全性(包括避免 root 登录)的一个关键是使用 ZFS 的内置权限结构,并以相反的方式构建备份传输并通过网络拉取备份,而不是推送它们。无需 root 访问即可备份文件系统的能力是 ZFS 文件系统的主要设计成就之一。
运行作业destination并从中提取数据source,可能类似于:
foo并用于zfs allow授予该帐户创建和发送快照的能力: zfs allow foo mount,snapshot,send,hold storage/photos
Run Code Online (Sandbox Code Playgroud)
bar并赋予该帐户接收/创建/挂载文件系统的能力: zfs allow bar mount,create,receive storage/photos
Run Code Online (Sandbox Code Playgroud)
bar创建专门用于备份作业的 ssh 密钥。在源计算机上的.ssh用户目录中安装该密钥的公共部分。foo这为用户提供了bar@destination对该foo@source帐户的安全 ssh 登录访问权限。另外,编辑 ~bar/.ssh/config 文件,destination以便它自动使用正确的 SSH 密钥文件名(您之前创建的)和用户名: Host source
Hostname FQDN.of.source.example.com
User foo
IdentityFile ~bar/.ssh/backup_key_id_rsa
Run Code Online (Sandbox Code Playgroud)
bar@destination: dt=$(date +%Y-%m-%d_%H-%M-%S)
ssh source "zfs snap storage/photos@frequent_$dt"
ssh source "zfs send -R storage/photos@frequent_$dt" | zfs receive storage/photos
Run Code Online (Sandbox Code Playgroud)
这样做不需要任何root 访问权限。
这并没有完全删除 root 登录,但它确实保护了功能齐全的登录之外的东西。
通过将本地用户的公钥(通常~/.ssh/id_rsa.pub)复制~/.ssh/authorized_keys到远程用户的 authorized_keys 文件 ( ) 来建立 SSH 信任。这消除了密码提示,并提高了安全性,因为 SSH 密钥更难暴力破解。您可能还需要确保sshd_config拥有PermitRootLogin without-password-这限制root远程登录,只SSH密钥(即使是正确的密码会失败)。
然后,您可以通过使用ForceCommandauthorized_keys 文件中的指令来增加安全性,以仅允许执行 zfs 命令。