本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====== Rsync安全配置 ====== ==== 1、Rsync简介 ==== ---- Rsync(remote synchronize)是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,提高其保密性。 此外,rsync是一款免费的软件。 rsync 包括如下的一些特性: * 能更新整个目录和树和文件系统。 * 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等。 * 对于安装来说,无任何特殊权限要求。 * 对于多个文件来说,内部流水线减少文件等待的延时。 * 能用rsh、ssh 或直接端口做为传输入端口。 * 支持匿名rsync 同步文件,是理想的镜像工具。 ==== 2、Rsync服务器架设 ==== ---- 安装Rsync与xinetd包 <code bash>$ yum -y install xinetd rsync</code> 确保xinetd运行在levels 3或4或5。 <code bash>$ chkconfig --level 345 xinetd on</code> 修改rsync xinetd配置文件,把disable = yes改成disable = no <code bash>$ vi /etc/xinetd.d/rsync</code> 创建rsync的密码文件,格式 username:password <code bash>$ vi /etc/rsyncd.secrets</code> 创建rsync共享配置文件 <code bash>$ vi /etc/rsyncd.conf</code> 添加如下内容: <code bash> secrets file = /etc/rsyncd.secrets #密码文件位置,认证文件设置,设置用户名和密码 #motd file = /etc/rsyncd.motd #欢迎信息文件名称和存放位置(此文件没有,可以自行添加) read only = no # yes只读 值为NO意思为可读可写模式,数据恢复用NO list = yes uid = nobody #以什么身份运行rsync gid = nobody [out] #模块名 comment = Welcome #欢迎信息 path = /home/rsync/out #rsync同步的路径 auth users = rsync #授权帐号,认证的用户名,如果没有这行则表明是匿名,多个用户用,分隔。 hosts allow = X.X.X.X #允许访问的IP auth users = username #/etc/rsyncd.secrets中的用户名 </code> 还有很多参数没有使用。 [[http://www.samba.org/ftp/rsync/rsyncd.conf.html|rsyncd.conf]]里详细解释了rsyncd.conf各个参数的意思。 修改权限与所有权,重启xinetd服务: <code bash> $ chown root.root /etc/rsyncd.* $ chmod 600 /etc/rsyncd.* $ service xinetd restart </code> 然后就可以通过如下命令访问了: 下载文件: <code bash>./rsync -vzrtopg --progress --delete username@xxx.xxx.xxx.xxx::out /home/test/getfile</code> 上传文件: <code bash>/usr/bin/rsync -vzrtopg --progress /home/test/getfile username@xxx.xxx.xxx.xxx::out</code> Rsync 同步参数说明 <code bash> -vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。 --progress是指显示出详细的进度情况 --delete参数会把原有getfile目录下的文件删除以保持客户端和服务器端文件系统完全一致 username@xxx.xxx.xxx.xxx中的username是指定密码文件中的用户名,xxx为ip地址 out是指在rsyncd.conf里定义的模块名 /home/test/getfile 是指本地要备份目录 </code> 如果不想每次都再输入一次密码可以使用--password-file参数 <code bash> /usr/bin/rsync -vzrtopg --progress /home/test/getfile username@xxx.xxx.xxx.xxx ::out --password-file=/test/rsyncd.secrets </code> 本机上的/test/rsyncd.secrets文件里只需要保存密码即可,用户名已经在命令中有了,并且权限应为600。 ==== 3、错误配置及利用==== ---- rsync默认允许匿名访问,若未添加用户口令则可以进行匿名登录。 建议对rsync的IP访问进行限制以防止在用户口令被猜解或泄露时造成损失。 常用的rsync操作: <code bash> rsync X.X.X.X:: #列出同步目录 rsync X.X.X.X::www/ #列出同步目录中的www目录 rsync -avz X.X.X.X::www/test.php /root #下载文件到本地 rsync -avz X.X.X.X::www/ /var/tmp #下载目录到本地 rsync -avz webshell.php X.X.X.X::www/ #上传本地文件到rsync服务器 </code> **利用rsync提权** rsync进程默认以root权限启动,利用rsync同步文件的同时,可以保持原来文件的权限的特性,可以使用rsync进行提权。 <code bash> chmod a+s webshell.php rsync -avz webshell.php X.X.X.X::www/ </code> ==== 4、实际案例 ==== ---- [[http://www.wooyun.org/bugs/wooyun-2013-026232|WooYun: 我是如何沦陷ChinaZ下载站服务器的,可登录3389、篡改源码等]] [[http://www.wooyun.org/bugs/wooyun-2013-021589|WooYun: 新浪漏洞系列第三弹-微博内网遭入侵]] [[http://www.wooyun.org/bugs/wooyun-2012-010093|WooYun: Discuz旗下5d6d某服务器Rsync任意文件上传]] ==== 5、修复方案 ==== ---- **限定访问的IP** IPTables防火墙给rsync的端口添加一个iptables。 只希望能够从内部网络(192.168.101.0/24)访问: <code bash> iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT </code> 在rsyncd.conf使用hosts allow设置只允许来源ip: <code bash> hosts allow = X.X.X.X #允许访问的IP </code> **添加用户口令** 在rsyncd.conf中添加rsync用户权限访问: <code bash> secrets file = /etc/rsyncd.secrets #密码文件位置,认证文件设置,设置用户名和密码 auth users = rsync #授权帐号,认证的用户名,如果没有这行则表明是匿名,多个用户用,分隔。 </code> ==== 6、漏洞扫描与发现 ==== ---- **半手动扫描** 使用nmap扫描Rsync默认的端口(873): <code bash>nmap -n --open -p 873 X.X.X.X/24</code> 找到开放873端口的主机后尝试连接: <code bash>rsync X.X.X.X::</code> **自动化扫描** 使用Metasploit中的<code>auxiliary/scanner/rsync/modules_list</code>模块对允许匿名访问的rsync进行扫描: <code bash> use auxiliary/scanner/rsync/modules_list set rhosts X.X.X.X/24 run </code> ==== 7、相关资源 ==== ---- [[http://drops.wooyun.org/papers/161|Rsync安全配置]] [[https://www.samba.org/ftp/rsync/rsyncd.conf.html|rsyncd.conf]]