SElinux

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是基于内核级的系统安全防护,是 Linux历史上最杰出的新安全子系统,在这种访问控制体系的限制下,进程只能运行在他的任务中所需要的和不违背安全策略的任务。文件也是如此 ,若你想要访问一个文件, 你必须具有普通访问权限和 SELINUX 访问权限, 即使以超级用户身份 root 运行进程 , 也要根据进程以及文件或资源的 SELinux 安全性上下文标签来决定是否有权限访问文件。SElinux系统比起平常系统安全性要高得多,每个进程都受到selinux的控制 ,接下来让我们一起来认识一下SElinux。

一、SElinx的个人介绍

传统Linux,一切皆文件,由用户,组,权限控制访问

在SELinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素所控制其访问 , 所有文件和端口资源和进程都具备安全标签:安全上下文(security context)。

安全上下文有五个元素组成: user:role:type:sensitivity:category

  • User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于 自由(unconfined)进程
  • Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r
  • Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于 type实现,多服务共用:public_content_t
  • Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified, secret,top,secret, 一个对象有且只有一个sensitivity,分0-15级,s0 最低,Target策略默认使用s0
  • Category:对于特定组织划分不分层的分类,如FBI Secret,NSA secret, 一 个对象可以有多个categroy, c0-c1023共1024个分类, Target 策略不使用 cartegory

 SELinux的状态:

enforcing: 强制,每个受限的进程都必然受限

permissive: 允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志

disabled: 禁用

二、SElinux状态查看及相关配置

1、查看当前selinx状态

getenforce          获取selinux当前状态 

[root@blwsy ~]#getenforce 
 Enforcing
[root@blwsy ~]#sestatus 
 SELinux status:                 enabled
 SELinuxfs mount:                /selinux
 Current mode:                   enforcing
 Mode from config file:          enforcing
 Policy version:                 24
 Policy from config file:        targeted

2、设置selinx状态

我们在装系统是默认的selinx都为disabled,就是大部分都是关闭状态,如果想要开启应该修改/etc/selinux/config相关的配置文件,然后重启生效,这是selinux的状态则为开启,可能会导致开机自检时一些应用启动失败,进而导致虚拟机开不起来,我在centos7设置selinux为enforcing状态时就遇到过这种问题,解决办法是在/boot/grub2/grub.cfg文件中,在开头加上一行enforcing=0,默认enforcing值为1,改为1后系统就可以正常开启了。接下来就开始对selinux进行设置了。

3、SELinux安全标签

  •  给文件重新打安全标签
chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE... 
chcon [OPTION]... --reference=RFILE FILE... 

 -R:递归打标

  • 恢复目录或文件默认的安全上下文

restorecon [-R] /path/to/somewhere

  • 查看默认的安全上下文
[root@blwsy ~]# semanage fcontext –l 
  • 查看指定目录的期望值
[root@blwsy ~]#semanage fcontext -l |grep '/var/ftp' 
 /var/ftp(/.*)?                                                     all files          system_u:object_r:public_content_t:s0 
 /var/ftp/bin(/.*)?                                                 all files          system_u:object_r:bin_t:s0 
 /var/ftp/etc(/.*)?                                                 all files          system_u:object_r:etc_t:s0 
 /var/ftp/lib(64)?(/.*)?                                            all files          system_u:object_r:lib_t:s0 
 /var/ftp/lib(64)?/ld[^/]*\.so(\.[^/]*)*                            regular file    system_u:object_r:ld_so_t:s0 
  • 添加安全上下文
[root@blwsy ~]# semanage fcontext -a –t httpd_sys_content_t ‘/testdir(/.*)?’ 
  • 删除安全上下文
[root@blwsy ~]#semanage fcontext -d –t httpd_sys_content_t ‘/testdir(/.*)?’

4、端口标签

  •  查看端口标签
[root@blwsy ~]#semanage port –l 
  • 添加端口
[root@blwsy ~]# semanage port -a -t port_label  -p 9527 
  • 删除端口
[root@blwsy ~]#semanage port -d -t port_label -p tcp 9527 
  • 修改现有端口为新标签
[root@blwsy ~]#semanage port -m -t port_label -p tcp9527

5、布尔值

  •   布尔型规则

getsebool    

setsebool    

  • 查看bool命令
[root@blwsy ~]#getsebool -a|grep ftp
 allow_ftpd_anon_write --> on
 allow_ftpd_full_access --> off
 allow_ftpd_use_cifs --> off
 allow_ftpd_use_nfs --> off
 ftp_home_dir --> off
 ftpd_connect_db --> off
 ftpd_use_fusefs --> off
 ftpd_use_passive_mode --> off
 httpd_enable_ftp_server --> off
 tftp_anon_write --> off
 tftp_use_cifs --> off
 tftp_use_nfs --> off
  • 查看修改过的布尔值
[root@blwsy ~]# semanage boolean -l –C
  • 设置bool值命令(-p 表示永久生效)
setsebool [-P] boolean value(on,off) 

[root@blwsy ~]#setsebool -P allow_ftpd_anon_write on

setsebool [-P] Boolean=value(0,1)

[root@blwsy ~]#setsebool -P allow_ftpd_anon_write=1

三、selinux相关实验

实验1:配置vsftpd,实现匿名上传

1.安装vsftpd

[root@blwsy ~]#yum -y install vsftpd

2. 修改配置文件

[root@blwsy ~]#vim/etc/vsftpd/vsftpd.conf 将以下两行注释去掉允许匿名上传
         anon_upload_enable=YES
         anon_mkdir_write_enable=YES

[root@blwsy ~]#service vsftpd restart    修改文件保存后重启服务

3. 设置ftp服务的acl权限为7有读写权限

[root@blwsy ~]#setfacl -m u:ftp:rwx /var/ftp/pub/  

4.设置pub的type类型

[root@blwsy ~]#chcon -t public_content_rw_t /var/ftp/pub   

5. 设置Boolean值并永久生效

[root@blwsy ~]#setsebool -P allow_ftpd_anon_write on          

实验2: 配置httpd开启用户家目录的访问

1.安装httpd

[root@blwsy ~]#yum -y install httpd

2. 设置可以修改目录并指定新值

[root@blwsy ~]#vim /etc/httpd/conf.d/userdir.conf 
             #UserDir disabled
             UserDir public_html

3. 重启服务

[root@blwsy ~]#systemctl restart httpd

4. 添加用户

[root@blwsy ~]#useradd wsy

5. 切换家目录并创建用户,在网页输入内容

[root@blwsy ~]#cd ~wsy
[root@blwsy wsy]#mkdir public_html
[root@blwsy wsy]#echo hello world > publichtml/index.html

6. 用户家目录只有自己和root能访问,现在设置Apache用户执行权限可以抓出文件里的内容

[root@blwsy wsy]#setfacl -m u:apache:x /home/nanyibo/  

7. 在selinux为开启的状态下别的用户可以进入

[root@blwsy wsy]# setsebool -P httpd_enable_homedirs=1 

8.找另一台虚拟机测试

curl http://192.168.153.7/~wsy/    注意最后的/

实验3:修改http端口号为9527

1、修改配置文件

[root@blwsy ~]#vim /etc/httpd/conf/httpd.conf

2、增加selinux标签

[root@blwsy ~]#semanage port -a -t http_port_t -p tcp 9527

3、重启服务

[root@blwsy ~]#service httpd restart

4、查看9527端口是否在监听

[root@blwsy ~]#netstat -tnl|grep 9527
 tcp        0      0 :::9527                     :::*                        LISTEN  

5、在网页上输入地址然后访问

posted @ 2018-08-26 14:45  www岩  阅读(447)  评论(0编辑  收藏  举报