SELinux 的安全防护措施主要集中在各种网络服务的">访问控制。上文(配置 Apache 、Samba、NFS)介绍了 Apache 、Samba、NFS 三种服务的 SElinux 设置,本文介绍 SElinux 下 vsftp 、MySQL、Bind DNS 三种服务的 SElinux 设置。
SELinux 环境下的 FTP 配置
vsftp 的 SELinux 的文件类型
SElinux 环境中,vsftp 服务器的 vsftpd 守护进程都是在受限的 ftpd_t 域中运行。并且和其他受限的网络服务相互隔离。下面的示例演示的是 SELinux 下的 vsftpd 进程
#ps -eZ |grep vsftpd unconfined_u:system_r:ftpd_t:s0-s0:c0.c1023 1994 ? 00:00:00 vsftpd
SELinux 策略规定 vsftpd 文件访问和进程交互的限制。例如一个通过认证的本地用户不能读写自己的主目录的文件。另外 vsftpd 不能访问 NFS 或者 CIFS 文件系统,匿名用户没有写文件的访问权限,即使 /etc/vsftpd/vsftpd.conf 配置文件中开放了读写权限也是如此。通常注册后的匿名用户只能读取 /var/ftp 目录中的文件,文件类型是 public_content_t,它资源其他服务器(Apache , Samba, NFS)也可以访问 public_content_t 类型的文件 。SElinux 一共定义了两种文件类型用于设置 vsftp 服务器。
public_content_t vsftpd:可以读取的文件和目录类型是 public_content_t。其他服务如 Apache、Samba 和 NFS 也可以,但是 public_content_t 类型的文件不能被写入,即使 Linux 权限允许。如果你需要写入或者修改,必须使用 public_content_rw_t 的类型。
public_content_rw_t:可以读取和写入的文件和目录类型是 public_content_rw_t,其他服务其他服务如 Apache,Samba 和 NFS 也可以,不过必须开放相关的布尔变量。
vsftp 的布尔变量
SELinux 对 FTP 的限制非常严格,不过系统管理员可以利用布尔值变量调整 SELinux 策略设置,定制 FTP 服务器功能。
下面是常用的布尔变量:
allow_ftpd_anon_write :关闭这个布尔变量会阻止 vsftpd 读取 public_content_rw_t 类型的文件和目录。如果允许用户通过 FTP 上传文件。必须开放这个布尔变量。 allow_ftpd_full_access:当开放这个布尔变量时只有 Linux(DAC)的权限来控制访问,通过验证的用户可以读取和写入标记为 public_content_t 或 public_content_rw_t 类型的文件。 allow_ftpd_use_cif:当开放这个布尔变量时 vsftpd 允许 cifs_t 类型的文件和目录,因此这个布尔变量启用,可以让你的 FTP 服务器可以使用 Samba 文件系统。 allow_ftpd_use_nfs vsftpd:的当开放这个布尔变量时 vsftpd 允许 nfs_t 类型的文件和目录,因此这个布尔变量启用,可以让你的 FTP 服务器可以使用 NFS 文件系统。 ftp_home_dir:当开放这个布尔变量时认证用户可以读写自己的主目录中的文件。 ftpd_connect_db:当开放这个布尔变量时允许 vsftpd 连接数据库。 httpd_enable_ftp_server:当开放这个布尔变量时容许的 httpd 作为 FTP 服务器,并且监听 FTP 端口。 tftp_anon_write:当开放这个布尔变量时允许 TFTP 访问一个公共的目录。
如果希望 FTP 服务器可以使用 NFS 和 Samba 文件系统,可以使用如下命令:
#setsebool -P allow_ftpd_use_nfs on #setsebool -P allow_ftpd_use_cifs on
另外针对启动 SElinux 后本地用户不能注册到 FTP 服务器,可以使用如下命令解决:
#setsebool -P ftp_home_dir on
假设 /var/ftp/forum 是一个公共论坛,供 ftp 用户查询和读写其中的文件,那么就需要确保 ftp 服务器可以读写修改 /var/ftp/forum 目录,此时可以使用命令把 /var/ftp/forum 目录的属性设置为 public_content_rw_t:
#semanage fcontext -a -t public_content_rw_t "/var/ftp/forum (/.*)?" #restorecon -R -v /var/ftp/forum
另外还有使用命令修改 /var/ftp/forum 的访问权限,开放布尔变量:
#
chmod 777 /var/ftp/forum #setsebool -P allow_ftpd_use_cifs on