设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

SELinux的环境下网络服务设置:第2部分

2013-3-26 10:05| 发布者: 红黑魂| 查看: 1460| 评论: 0|原作者: 曹江华|来自: developerworks

摘要: 引言 SELinux 的安全防护措施主要集中在各种网络服务的访问控制。上文(http://www.ibm.com/developerworks/cn/linux/l- cn-selinux-services1/index.html )介绍了 Apache 、Samba、NFS 三种服务的 SElinux 设置, ...

引言

  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 环境下的 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 

配置实例


开放用户主目录


  SELinux 环境下 vsftpd 通常只允许匿名用户注册,以 FTP 方式注册后,本地用户无法访问自己的主目录,无法显示文件,也无法上传下载。这是 SELinux 策略造成的,要开放用户主目录,请使用如下办法。


  首先使用 root 权限修改 /etc/vsftpd/vsftpd.conf 文件,设置


 local-enable=YES 

  然后使用命令重启服务:


#/etc/rc.d/init.d/vsftpd start


然后开放 ftp_home_dir 布尔变量即可:


 #setsebool – P ftp_home_dir on 

设置本地用户可以上传和下载文件

这个例子介绍如何建立一个存储位置 /myftp/pub,供本地用户使用 ftp 下载和上传文件。

首先创建一个目录结构和设置权限:

 #mkdir –P /myftp/pub 
 #chown user1:root /myftp/pub 
 #chmod 777 /myftp/pub 

使用 semanage fcontext 和 restorecon 命令设置顶级目录 /myftp 的文件属性是 public_content_t

 #semanage fcontext -a -t public_content_t /myftp 
 #restorecon -R -v /myftp/ 

使用 semanage fcontext 和 restorecon 命令设置顶级目录 /myftp 的 ftp 子目录的文件属性是 public_content_rw_t

 #semanage fcontext -a -t public_content_rw_t "/myftp/pub(/.*)?"
 #restorecon -R -v /myftp/pub 

下面开放布尔值变量:

 #setsebool – P ftp_home_dir on 
 #setsebool -P allow_ftpd_anon_write on 

完成上述设置后,本地系统用户可以访问自己的主目录,把文件上传到目录 /myftp/pub ,但是不能上传到 /myftp 目录。

 $ ftp localhost 
 Connected to localhost (127.0.0.1). 
 220 (vsFTPd 2.1.0) 
 Name (localhost:username): 
 331 Please specify the password. 
 Password: Enter the correct password 
 230 Login successful. 
 Remote system type is UNIX. 
 Using binary mode to transfer files. 
 ftp> put ftpupload /myftp/pub/ftpupload 
 local: ftpupload remote: ftpupload 
 227 Entering Passive Mode (127,0,0,1,241,41). 
 150 Ok to send data. 
 226 File receive OK. 
 ftp> quit 
 221 Goodbye. 

匿名文件上传设置

这个例子介绍如何建立一个存储位置 /var/ftp/pub,供匿名用户使用上传文件。

首先创建一个目录结构和设置权限:

 #mkdir – P /var/ftp/pub 
 #chmod 777 /var/ftp/pub 

查询当前文件属性:

 #ls – dZ /var/ftp/pub 
 drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /var/ftp/pub 

下面要把 public_content_t 修改为 public_content-rw_t 使用命令:

 #semanage fcontext -a -t public_content_rw_t "/var/ftp/pub(/.*)?"
 #restorecon -R -v /var/ftp/pub 

开放布尔变量并且查询使用命令:

 #setsebool -P allow_ftpd_anon_write on 
 #getsebool allow_ftpd_anon_write 
 allow_ftpd_anon_write --> on 

修改配置文件 /etc/vsftpd/vsftpd.conf 删除这一行“#annon_upload_enable=YES”的 # 符号,重启 ftp 服务。

 #service vsftpd start 

下面把文件 /tmp/ftpupload 复制到目录 /var/ftp 下作为测试文件。然后运行 ftp 命令以 anonymous 注册。操作如下:

 #cp /tmp/ ftpupload /var/ftp/ftpupload 
 #ftp localhost 
 Connected to localhost (127.0.0.1). 
 220 (vsFTPd 2.1.0) 
 Name (localhost:username): anonymous 
 331 Please specify the password. 
 Password: Enter the correct password 
 230 Login successful. 
 Remote system type is UNIX. 
 Using binary mode to transfer files. 
 ftp> put ftpupload 
 local: ftpupload remote: pub/ftpupload 
 227 Entering Passive Mode (127,0,0,1,241,41). 
 150 Ok to send data. 
 226 File receive OK. 
 ftp> quit 
 221 Goodbye. 

SELinux 环境下的 MySQL 配置

MySQL 的 SELinux 文件类型

SELinux 环境中,MySQL 服务器的守护进程都是在受限的 mysqld_t 域中运行。并且和其他受限的网络服务相互隔离。下面的示例演示的是 SElinux 下的 mysqld 进程

 #ps -eZ | grep mysqld 
 unconfined_u:system_r:mysqld_safe_t:s0 6035 pts/1 00:00:00 mysqld_safe 
 unconfined_u:system_r:mysqld_t:s0 6123 pts/1   00:00:00 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。

MySQL 的布尔变量

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 属性:

 # ls -lZ /var/lib/mysql 
 drwx------. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 mysql 

记录下 MySQL 的存储数据库位置(/var/lib/mysql)的 SElinux 属性,然后停止 MySQL,然后建立一个新的目录,把原来的数据库文件复制到新目录,并且设置 SElinux 属性。

 #service mysqld stop 
 #mkdir -p /opt/mysql 
 #cp -R /var/lib/mysql/* /opt/mysql/ 
 #chmod 755 /opt/mysql 
 #chown -R mysql:mysql /opt/mysql 
 #semanage fcontext -a -t mysqld_db_t "/opt/mysql(/.*)?": 
 #restorecon -R -v /opt/mysql 

修改配置文件 /etc/my.cnf 重启 MySQL

 #vi /etc/my.cnf 
 [mysqld] 
 datadir=/opt/mysql 
 # service mysqld start 

SELinux 环境下的 DNS 配置

Bind 的 SELinux 文件类型

named_zone_t 这个文件类型用于主区域文件。其他服务不能修改此类型的文件。

named_cache_t 默认情况下 named 进程可以读写这种类型的标记的文件,无需另外的布尔值设置。

Bind 的布尔变量

named_write_master_zones 当关闭这个布尔变量时不允许 named 进程读写主区配置文件。

named_disable_trans 当关闭这个布尔变量时不保护 named 进程。

配置实例

SElinux 对 Bind DNS 服务器的限制不多。默认情况下 SElinux 的策略文件规定不允许 named 进程写主区配置文件。如果允许 named 进程更新主区配置文件,需要开放下面的布尔值变量:

 #setsebool -P named_write_master_zones=1 

也可以禁止 SElinux 保护 named 守护进程,使用命令:

 # setsebool -P named_disable_trans=1 

然后重启 named 进程:

 #service named restart 

总结

SELinux 的安全防护措施主要集中在各种网络服务的访问控制。对于像 Apache 、Samba、NFS、vsftp 、MySQL、Bind DNS 服务来说,系统默认配置的 SELinux 仅仅开放了最基本的运行需求。至于连接外部网络、运行脚本、访问用户目录、共享文件等,必须经过一定的 SELinux 策略调整才能充分发挥网络服务器的作用。很多用户一直觉得 SELinux 的安全级别设置十分麻烦,因此有人经常关闭 SELinux 不让其工作,这样做是不对的。其实安全性和应用性就是有这种矛盾,系统管理员要寻找一定的安全中间点。


参考资料

学习

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

关于作者

曹江华,毕业于工科大学机电一体化专业,从事 CAD 设计。后从事小型数据库的应用。1999 年开始从事构建网络、管理维护、数据库管理工作。关注开放系统和网络安全。出版多本 Unix/Linux 安全管理书籍。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部