red*_*war 77 ssh ubuntu backup rsync
我有这个命令来备份远程机器。问题是我需要 root 权限来读取和复制所有文件。出于安全原因,我没有启用 root 用户并使用sudoUbuntu 方式。我需要一些很酷的管道或其他东西来做到这一点吗?
rsync -chavzP --stats user@192.168.1.2:/ /media/backupdisk/myserverbackup/
Run Code Online (Sandbox Code Playgroud)
Mar*_*ich 101
我建议您首先使用 root 帐户。如果你这样设置:
sshd_config在目标机器上配置您的PermitRootLogin without-password.ssh-keygen在提取备份的机器上使用以创建 SSH 私钥(仅当您还没有 SSH 密钥时)。不要设置密码。如果你需要这方面的详细信息,请谷歌一个教程,应该有很多。/root/.ssh/id_rsa.pub备份机器的内容附加到/root/.ssh/authorized_keys目标机器的 。那么由此产生的设置应该是非常安全的。
sudo,特别是与NOPASSWD评论中推荐的结合使用,与仅使用 root 帐户相比没有任何安全优势。例如这个建议:
将以下内容添加到您的
/etc/sudoers文件中:rsyncuser ALL= NOPASSWD:/usr/bin/rsync
rsyncuser无论如何,本质上都是给予root 权限。你问:
@MartinvonWittich 很容易获得一个完整的 root shell,因为
rsync用sudo? 请走 [m]e [通过]。
嗯,简单。使用推荐的配置,rsyncuser现在可以rsync以 root 身份运行,甚至不需要输入密码。rsync是一个非常强大的文件操作工具,所以现在rsyncuser有了一个非常强大的工具来操作具有root权限的文件。找到一种利用它的方法只花了我几分钟(在 Ubuntu 13.04 上测试,需要dash,bash不起作用):
martin@martin ~ % sudo rsync --perms --chmod u+s /bin/dash /bin/rootdash
martin@martin ~ % rootdash
# whoami
root
# touch /etc/evil
# tail -n1 /etc/shadow
dnsmasq:*:15942:0:99999:7:::
Run Code Online (Sandbox Code Playgroud)
如您所见,我为自己创建了一个 root shell;whoami识别我的帐户根,我可以创建文件/etc,我可以读取/etc/shadow。我的利用是在二进制文件上设置setuid位dash;它导致 Linux 始终以所有者的权限运行该二进制文件,在这种情况下是 root。
有充分的理由不[推荐]拥有真正的根。– redanimalwar 15 小时前
不,在绝对适合使用 root 帐户的情况下笨拙地处理它并不是有充分的理由。这只是Cargo cult 编程的另一种形式——你并没有真正理解 sudo 与 root 背后的概念,你只是盲目地相信“root 是坏的,sudo 是好的”,因为你已经在某处读过它。
一方面,在某些情况下sudo绝对是适合这项工作的工具。例如,当您在图形 Linux 桌面上交互式工作时,假设是 Ubuntu,那么sudo在您有时需要 root 访问权限的极少数情况下,必须使用就可以了。Ubuntu 故意禁用了 root 帐户并强制您sudo默认使用以防止用户总是使用 root 帐户登录。当用户只想使用网络浏览器时,以 root 身份登录将是一件危险的事情,因此默认情况下没有 root 帐户可以防止愚蠢的人这样做。
另一方面,在某些情况下,自动脚本需要对某些内容具有 root 权限,例如进行备份。现在使用sudoroot 帐户不仅没有意义,而且还很危险:乍一看,rsyncuser它就像一个普通的无特权帐户。但是正如我已经解释过的,如果攻击者已经获得rsyncuser访问权限,那么他很容易获得完全的 root 访问权限。所以本质上,您现在有一个额外的 root 帐户,它看起来根本不像 root 帐户,这不是一件好事。
M_d*_*_dk 81
利用该--rsync-path选项使远程rsync命令以sudo特权运行。您的命令应该是例如:
rsync -chavzP --rsync-path="sudo rsync" --stats user@192.168.1.2:/ .
Run Code Online (Sandbox Code Playgroud)
如果sudo提示您输入密码,您必须通过NOPASSWD对远程用户帐户使用特权来避免这种情况(对于 root 用户毫无意义,在其他用例中可能有意义),或者如果您不想这样做:
请确保选择tty_tickets是您正在使用,运行如用户禁用了sudo visudo -f /etc/sudoers.d/local-rsync
,然后输入:
Defaults:your.username.for.rsync !tty_tickets
Run Code Online (Sandbox Code Playgroud)确保requiretty为您正在使用的用户禁用该选项- 默认情况下它可能处于关闭状态。方法和上面一样。
sudo通过运行例如在远程机器上播种密码
ssh -t user@192.168.1.2 sudo
Gra*_*eme 17
一种简单的方法是使用ssh-askpass带有的图形程序sudo,这绕过了sudo未连接到终端的事实,并允许您安全地输入密码:
rsync -chavzPe 'ssh -X' --stats \
--rsync-path='SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A rsync' \
user@192.168.1.2:/ .
Run Code Online (Sandbox Code Playgroud)
当然,ssh-askpass程序必须安装在给定的位置,并且您必须在正在使用的机器上运行 X 会话。该ssh-askpass程序有一些变体也应该可以工作(Gnome/KDE 版本)。还有一个图形sudo替换程序,比如gksu或kdesudo应该也可以工作。
小智 7
如果您的用户已经拥有受密码保护的 sudo 权限,我会将它们保持原样,并且只添加一个节来使用 rsync 而无需密码:
%admin ALL=(ALL) ALL
%admin ALL= NOPASSWD:/usr/bin/rsync
Run Code Online (Sandbox Code Playgroud)
小智 5
我今天遇到了这个问题并解决了它,无需修改配置文件或为用户帐户授予根级权限。我的特殊设置是A机器foo上的用户必须将所有用户目录从用户拥有的目录中复制foo到机器。(用户在 上具有 sudo 权限。)barbackupAAfoo
我使用的命令如下。它由用户A在 上的/home目录中调用foo。
sudo rsync -avu -e "ssh -i /home/A/.ssh/id_rsa -l A" * B:/home/backup
Run Code Online (Sandbox Code Playgroud)
这将 rsync 作为 sudo 运行,以便foo可以访问所有用户目录,但它告诉 rsync 使用 sshbar使用用户A凭据访问机器。我的需求与上面的问题略有不同,但这使我能够快速备份我管理的特定机器上的所有用户目录,而不会影响系统配置。
| 归档时间: |
|
| 查看次数: |
123368 次 |
| 最近记录: |