SELinux下使用Rsync的问题

SELinux是Security-Enhanced Linux的缩写。SELinux简单来说是为了防止由于系统管理员的低级误操作带来的安全问题。

系统帐号分为root和一般用户,而对于系统上档案资源的权限设置对root用户其实可以认为无效。这种方式就是一般所说的DAC(Discretionary Access Control),那么显而易见的问题就是,如果root权限泄露或者误操作,那么就会带来严重的安全问题。

所以SELinux中引入了MAC(Mandatory Access Control),这是按应用程序控制访问资源权限的机制。在该机制下,即便是以root身份运行某程序,其访问档案资源的权限也仍然受到控制,而不是被运行用户影响。

Rsync常用于假设备份和数据同步的服务器工作,SELinux里同样对其做了不少限制,这些限制使用类似 getsebool -a | grep rsync 命令可以查看的到。

比较典型的情况是正确设置了目录和rsync用户的配置,却在远程机器同步文件时出现chroot和chdir被拒绝的错误(Permission denied (13))。这个通常可以修改SELinux的参数rsync_disable_trans来解决。其它参数可以去查看官方的文档。

在正式环境中,所使用的程序最好都需要熟悉其在SELinux中受限的参数涵义,这即可以对所使用程序安全性有一个侧面的了解,也在遇到看起来比较“诡异”的问题时能找到解决办法。