码迷,mamicode.com
首页 > 系统相关 > 详细

SElinux

时间:2018-08-26 15:43:03      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:配置文件   有一个   国家   必须   disabled   注意   系统安全   家目录   装系统   

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

sestatus               查看selinux状态

[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. [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. [root@blwsy ~]#setfacl -m u:ftp:rwx /var/ftp/pub/   设置ftp服务的acl权限为7有权读写执行
  4. [root@blwsy ~]#chcon -t public_content_rw_t /var/ftp/pub   设置pub的type类型
  5. [root@blwsy ~]#setsebool -P allow_ftpd_anon_write on          设置boolean值并永久生效
实验2: 配置httpd开启用户家目录的访问

1.[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 nanyibo
5. [root@blwsy ~]#cd ~wsy

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

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、端口访问

SElinux

标签:配置文件   有一个   国家   必须   disabled   注意   系统安全   家目录   装系统   

原文地址:https://www.cnblogs.com/w-s-y/p/9537348.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!