SELinux 的安全防护措施主要集中在各种网络服务的访问控制。上文(http://www.ibm.com/developerworks/cn/linux/l- cn-selinux-services1/index.html )介绍了 Apache 、Samba、NFS 三种服务的 SElinux 设置,本文介绍 SElinux 下 vsftp 、MySQL、Bind DNS 三种服务的 SElinux 设置。 SElinux 环境中,vsftp 服务器的 vsftpd 守护进程都是在受限的 ftpd_t 域中运行。并且和其他受限的网络服务相互隔离。下面的示例演示的是 SELinux 下的 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 也可以,不过必须开放相关的布尔变量。 SELinux 对 FTP 的限制非常严格,不过系统管理员可以利用布尔值变量调整 SELinux 策略设置,定制 FTP 服务器功能。 下面是常用的布尔变量:
如果希望 FTP 服务器可以使用 NFS 和 Samba 文件系统,可以使用如下命令:
另外针对启动 SElinux 后本地用户不能注册到 FTP 服务器,可以使用如下命令解决: #setsebool -P ftp_home_dir on 假设 /var/ftp/forum 是一个公共论坛,供 ftp 用户查询和读写其中的文件,那么就需要确保 ftp 服务器可以读写修改 /var/ftp/forum 目录,此时可以使用命令把 /var/ftp/forum 目录的属性设置为 public_content_rw_t:
另外还有使用命令修改 /var/ftp/forum 的访问权限,开放布尔变量:
SELinux 环境下 vsftpd 通常只允许匿名用户注册,以 FTP 方式注册后,本地用户无法访问自己的主目录,无法显示文件,也无法上传下载。这是 SELinux 策略造成的,要开放用户主目录,请使用如下办法。 首先使用 root 权限修改 /etc/vsftpd/vsftpd.conf 文件,设置
然后使用命令重启服务:
然后开放 ftp_home_dir 布尔变量即可:
这个例子介绍如何建立一个存储位置 /myftp/pub,供本地用户使用 ftp 下载和上传文件。 首先创建一个目录结构和设置权限:
使用 semanage fcontext 和 restorecon 命令设置顶级目录 /myftp 的文件属性是 public_content_t
使用 semanage fcontext 和 restorecon 命令设置顶级目录 /myftp 的 ftp 子目录的文件属性是 public_content_rw_t
下面开放布尔值变量:
完成上述设置后,本地系统用户可以访问自己的主目录,把文件上传到目录 /myftp/pub ,但是不能上传到 /myftp 目录。
这个例子介绍如何建立一个存储位置 /var/ftp/pub,供匿名用户使用上传文件。 首先创建一个目录结构和设置权限:
查询当前文件属性:
下面要把 public_content_t 修改为 public_content-rw_t 使用命令:
开放布尔变量并且查询使用命令:
修改配置文件 /etc/vsftpd/vsftpd.conf 删除这一行“#annon_upload_enable=YES”的 # 符号,重启 ftp 服务。
下面把文件 /tmp/ftpupload 复制到目录 /var/ftp 下作为测试文件。然后运行 ftp 命令以 anonymous 注册。操作如下:
SELinux 环境中,MySQL 服务器的守护进程都是在受限的 mysqld_t 域中运行。并且和其他受限的网络服务相互隔离。下面的示例演示的是 SElinux 下的 mysqld 进程
下面是 SELinux 针对 MySQL 定义的的文件类型: mysqld_db_t 这种文件类型用于标记 MySQL 数据库的位置。在红帽企业 Linux 中数据库的默认位置是 /var/lib/mysql。如果 MySQL 数据库的位置发生了变化,新的位置必须使用这种类型。 mysqld_etc_t 这种文件类型用于标记 MySQL 的主配置文件中的 /etc/my.cnf 文件和 /etc/mysql 目录中的文件。 mysqld_exec_t 这种文件类型用于标记 /usr/libexec/mysqld 程序文件。 mysqld_initrc_exec_t 这种文件类型用于标记 MySQL 的初始化文件 /etc/rc.d/init.d/mysqld。 mysqld_log_t 这种文件类型用于标记日志文件。 mysqld_var_run_t 这种文件类型用于标记 /var/run/mysqld 目录中文件,尤其是 /var/run/mysqld/mysqld.pid 和 /var/run/mysqld/mysqld.sock。 allow_user_mysql_connect 当开放这个布尔变量时允许用户连接数据库。 exim_can_connect_db 当开放这个布尔变量时允许 exim 邮件程序访问数据库服务器。 ftpd_connect_db 当开放这个布尔变量时允许 ftpd 进程访问数据库服务器。 httpd_can_network_connect_db 当开放这个布尔变量时允许 httpd 进程访问数据库服务器。 修改 MySQL 的存储数据库位置 在红帽企业 Linux 6 中数据库的默认位置是 /var/lib/mysql,文件类型是 mysqld_db_t。下面把它修改为 /opt/mysql,步骤如下: 首先查看缺省情况下 MySQL 的存储数据库位置(/var/lib/mysql)和 SElinux 属性:
记录下 MySQL 的存储数据库位置(/var/lib/mysql)的 SElinux 属性,然后停止 MySQL,然后建立一个新的目录,把原来的数据库文件复制到新目录,并且设置 SElinux 属性。
修改配置文件 /etc/my.cnf 重启 MySQL
named_zone_t 这个文件类型用于主区域文件。其他服务不能修改此类型的文件。 named_cache_t 默认情况下 named 进程可以读写这种类型的标记的文件,无需另外的布尔值设置。 named_write_master_zones 当关闭这个布尔变量时不允许 named 进程读写主区配置文件。 named_disable_trans 当关闭这个布尔变量时不保护 named 进程。 SElinux 对 Bind DNS 服务器的限制不多。默认情况下 SElinux 的策略文件规定不允许 named 进程写主区配置文件。如果允许 named 进程更新主区配置文件,需要开放下面的布尔值变量:
也可以禁止 SElinux 保护 named 守护进程,使用命令:
然后重启 named 进程:
SELinux 的安全防护措施主要集中在各种网络服务的访问控制。对于像 Apache 、Samba、NFS、vsftp 、MySQL、Bind DNS 服务来说,系统默认配置的 SELinux 仅仅开放了最基本的运行需求。至于连接外部网络、运行脚本、访问用户目录、共享文件等,必须经过一定的 SELinux 策略调整才能充分发挥网络服务器的作用。很多用户一直觉得 SELinux 的安全级别设置十分麻烦,因此有人经常关闭 SELinux 不让其工作,这样做是不对的。其实安全性和应用性就是有这种矛盾,系统管理员要寻找一定的安全中间点。 学习
讨论
|