SElinux

Posted www岩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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当前状态

[[email protected] ~]#getenforce
Enforcing

sestatus               查看selinux状态

[[email protected] ~]#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

  • 查看默认的安全上下文

[[email protected] ~]# semanage fcontext –l

  •  查看指定目录的期望值

[[email protected] ~]#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

  • 添加安全上下文

[[email protected] ~]# semanage fcontext -a –t httpd_sys_content_t ‘/testdir(/.*)?’

  • 删除安全上下文

[[email protected] ~]#semanage fcontext -d –t httpd_sys_content_t ‘/testdir(/.*)?’

4、端口标签

  •  查看端口标签

[[email protected] ~]#semanage port –l

  • 添加端口

[[email protected] ~]# semanage port -a -t port_label  -p 9527

  • 删除端口

[[email protected] ~]#semanage port -d -t port_label -p tcp 9527

  • 修改现有端口为新标签

[[email protected] ~]#semanage port -m -t port_label -p tcp9527

5、布尔值

  •   布尔型规则

getsebool    

setsebool    

  • 查看bool命令

[[email protected] ~]#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

  • 查看修改过的布尔值

[[email protected] ~]# semanage boolean -l –C

  • 设置bool值命令(-p 表示永久生效)

setsebool [-P] boolean value(on,off)

[[email protected] ~]#setsebool -P allow_ftpd_anon_write on

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

[[email protected] ~]#setsebool -P allow_ftpd_anon_write=1

三、selinux相关实验

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

1. [[email protected] ~]#yum -y install vsftpd
2. [[email protected] ~]#vim/etc/vsftpd/vsftpd.conf 将以下两行注释去掉允许匿名上传
         anon_upload_enable=YES
         anon_mkdir_write_enable=YES

      [[email protected] ~]#service vsftpd restart    修改文件保存后重启服务
  3. [[email protected] ~]#setfacl -m u:ftp:rwx /var/ftp/pub/   设置ftp服务的acl权限为7有权读写执行
  4. [[email protected] ~]#chcon -t public_content_rw_t /var/ftp/pub   设置pub的type类型
  5. [[email protected] ~]#setsebool -P allow_ftpd_anon_write on          设置boolean值并永久生效
实验2: 配置httpd开启用户家目录的访问

1.[[email protected] ~]#yum -y install httpd
2. [[email protected] ~]#vim /etc/httpd/conf.d/userdir.conf 设置可以修改目录并指定新值
             #UserDir disabled
             UserDir public_html
3. [[email protected] ~]#systemctl restart httpd
4. [[email protected] ~]#useradd nanyibo
5. [[email protected] ~]#cd ~wsy

    [[email protected] wsy]#mkdir public_html
     [[email protected] wsy]#echo hello world > publichtml/index.html
6. [[email protected] wsy]#setfacl -m u:apache:x /home/nanyibo/      用户家目录只有自己和root能访问,现在设置Apache用户x权限可以抓出文件里的内容
7. [[email protected] wsy]# setsebool -P httpd_enable_homedirs=1    在selinux为开启的状态下别的用户可以进如入

8.找另一台虚拟机测试

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

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

1、修改配置文件

[[email protected] ~]#vim /etc/httpd/conf/httpd.conf

2、增加selinux标签

[[email protected] ~]#semanage port -a -t http_port_t -p tcp 9527

3、重启服务

[[email protected] ~]#service httpd restart

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

[[email protected] ~]#netstat -tnl|grep 9527
tcp        0      0 :::9527                     :::*                        LISTEN 

5、端口访问















































以上是关于SElinux的主要内容,如果未能解决你的问题,请参考以下文章

selinux 初级管理

Selinux初级管理

Selinux和Firewalled

《Linux菜鸟入门2》系统恢复和selinux  

vnc的安装

kvm与selinux