Answers:
我建议您首先使用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
?请[通过]。
好吧,简单。使用推荐的配置,rsyncuser
现在rsync
甚至可以以root用户身份运行,甚至不需要输入密码。rsync
是一个非常强大的文件处理工具,因此现在rsyncuser
有了一个非常强大的具有根权限的文件处理工具。寻找一种方法来利用这个把我仅有几分钟的路程(在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:::
如您所见,我为自己创建了根外壳程序;whoami
将我的帐户标识为root,可以在中创建文件/etc
,也可以从中读取文件/etc/shadow
。我的漏洞利用是在二进制文件上设置setuid位dash
。它会导致Linux始终在所有者(本例中为root)的许可下运行该二进制文件。
有正当理由不建议拥有真实的根源。– redanimalwar 15小时前
不可以,在出于绝对原因使用它绝对合适的情况下,笨拙地解决根帐户问题。这只是货物崇拜编程的另一种形式-您并没有真正理解sudo vs root的概念,只是盲目地应用了“ root不好,sudo很好”的信念,因为您已经在某个地方读过了。
一方面,在某些情况下,sudo
绝对是正确的工作工具。例如,当您在图形化Linux桌面上进行交互式工作时,假设使用Ubuntu,那么sudo
在有时需要root访问权限的极少数情况下,必须使用它就可以了。Ubuntu故意有一个禁用的root帐户,sudo
默认情况下会强迫您使用它来阻止用户仅使用root帐户登录。当用户只想使用例如Web浏览器时,以root身份登录将是一件危险的事情。 ,因此默认情况下没有root帐户可防止愚蠢的人这样做。
另一方面,在像您这样的情况下,自动化脚本需要对某些内容具有root权限,例如进行备份。现在,sudo
用于解决root帐户不仅毫无意义,而且也很危险:乍一看,它rsyncuser
看起来像是普通的非特权帐户。但是,正如我已经解释的那样,如果攻击者已经获得rsyncuser
访问权限,那么获得完全的root访问权限将非常容易。因此,从本质上讲,您现在有了一个根本不像根帐户的其他根帐户,这不是一件好事。
/root/.ssh/authorized_keys
,甚至可以使用不同的房屋创建多个root帐户,以便每个用户可以拥有自己的shell,房屋和.ssh/authorized_keys
:)
sshd
一般不会没有登录该决议授权密钥用于连接到一个帐户,所以如果你的连接bob
,然后sudo
,你会得到,如果你连接到比一个更好的审计线索root
直接bob
的关键。
利用该--rsync-path
选项使远程rsync
命令具有sudo
特权运行。您的命令应为:
rsync -chavzP --rsync-path="sudo rsync" --stats user@192.168.1.2:/ .
如果sudo
提示您输入密码,则必须通过NOPASSWD
对远程用户帐户使用特权(对于root用户无意义,在其他情况下可能有意义),或者如果您不想这样做,则必须避免这种情况:
tty_tickets
通过运行eg sudo visudo -f /etc/sudoers.d/local-rsync
并输入以下命令,确保对正在使用的用户禁用该选项:
Defaults:your.username.for.rsync !tty_tickets
确保requiretty
为您正在使用的用户禁用该选项-默认情况下它可能处于关闭状态。方法与上述相同。
sudo
通过运行例如在远程计算机上播种密码
ssh -t user@192.168.1.2 sudo
sudo
密码,而不是ssh
密码
sudo /usr/bin/rsync
无需输入密码;检查man sudoers
如何执行此操作;您可能要为此创建一个额外的备份用户。
sudo /usr/bin/rsync
运行而无需输入密码,请在/etc/sudoers
文件中添加以下内容:rsyncuser ALL= NOPASSWD:/usr/bin/rsync
这将使用户rsyncuser(如上所述,最好创建专用的备份用户)具有所需的用户名。
rsync
基本上始终具有root权限;在该帐户中获得完整的root shell可能很容易。我认为最好只使用真实的root帐户。
echo "password" | something
疑问,我的答案实际上从未使用过,并且同意让sudo无休止地执行rsync(此处也未建议)带来的安全问题是不好的。该怎么tty_tickets
做其实我也没办法,似乎需要和安全问题。只需在ssh上运行sodo然后执行命令,就可以安全地工作而无需进行任何调整?但是,由于我出于划写目的提出了该问题,因此我完全同意,没有密码的基于密钥的ssh是安全的,这样做是正确的。我接受了马丁斯的回答。
一种简单的方法是使用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:/ .
当然,该ssh-askpass
程序必须安装在给定的位置,并且您必须在正在使用的计算机上运行X会话。该ssh-askpass
程序有一些变种,也应该可以使用(Gnome / KDE版本)。图形sudo
替换程序(例如gksu
或)kdesudo
也应该起作用。
rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .
不起作用。 rsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]
。哦,ubuntu确实提供了gnome-ssh-askpass,但是它是/usr/bin/ssh-askpass
,而不是/usr/lib/ssh/x11...
。这样
ssh-askpass
。我只需要查找的含义-chavzPe
,将它们作为长选项拼出是很好的。
xeyes
使用SSH 运行进行了验证。
我今天遇到了这个问题,并且无需修改配置文件或向用户帐户授予根级别权限即可解决该问题。我特别的建立是用户A
机器上foo
有所有用户目录中复制foo
到机器bar
的backup
用户目录A
拥有。(用户A
具有的sudo特权foo
。)
我使用的命令如下。用户A
在上的/home
目录中调用了它foo
。
sudo rsync -avu -e "ssh -i /home/A/.ssh/id_rsa -l A" * B:/home/backup
这将rsync作为sudo运行,以便foo
可以访问其上的所有用户目录,但是它告诉rsync使用ssh bar
通过用户A
的凭据访问计算机。我的需求与上面的问题略有不同,但这使我可以快速备份我管理的特定计算机上所有用户目录的备份,而无需考虑系统的配置。
-i
选项ssh
。您可以--rsync-path="sudo /usr/bin/rsync"
在计算机上使用sudo 来使用bar
。然后,将其读为root@foo
和写为root@bar
,但通过A@foo
->进行传输B@bar
。谢谢!
在目标计算机上将rsync作为守护程序运行,可以执行所需的操作。
root
帐户摆在首位。sudo
,尤其是NOPASSWD
按注释中的建议结合使用时,并不能真正提高计算机的安全性。