一、selinux

       SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的 实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的 任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。

SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制(MAC)系统。对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。 [1] 

大部分使用 SELinux 的人使用的都是 SELinux 就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、DebianCentos。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。

SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统, 它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。任何程序对其资源享 有完全的控制权。假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他。SELinux提供了比传统的UNIX 权限更好的访问控制

二、selinux的使用

简单的来说,selinux就是内核级加强型防火墙,有两个主要功能   
1.安全上下文:管这个程序可以看什么类型的文件
2.服务:给服务选项加了一个开关

1)selinux的三种状态

enforcing         ##打开状态,警告并且拒绝服务
permissive        ##打开状态,警告但是不拒绝服务
disabled          ##关闭状态

2)查看SELinux状态:

/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态

SeLinux配置android源码 selinux使用_selinux

getenforce                 ##也可以用这个命令检查

SeLinux配置android源码 selinux使用_linux_02



 3)如何关闭SELinux

临时关闭(不用重启机器):

setenforce 0                  ##设置SELinux成为permissive模式
setenforce 1                  ##设置SELinux成为enforcing模式

修改配置文件需要重启机器:

vim /etc/sysconfig/selinux

将SELINUX=enforcing改为SELINUX=disabled即可,必须重启电脑,因为需要重新加载内核

4)报错日志存放位置 /var/log/audit/audit.log
 三、selinux的功能

1)安全上下文(context)

1.1对文件的影响

情景1:对服务端,此时selinux处于关闭状态,即disabled

touch /mnt/xupt                      ##新建xupt文件
mv /mnt/xupt /var/ftp                ##将新建的文件移动到var/ftp下,为啥移动不是复制,是因为移动是一个重命名的过程,不会改变其属性
ls -Z /var/ftp                       ##查看ftp内文件的安全上下文
ps auxZ | grep vsftpd                ##列出与vsftp有关的进程的安全上下文

SeLinux配置android源码 selinux使用_SeLinux配置android源码_03

 

在客户端 ,发现直接移动到这里面是可以识别的

SeLinux配置android源码 selinux使用_linux_04

情景2:对服务端,当selinux开启,即enforcing

SeLinux配置android源码 selinux使用_linux_05

在客户端,发现这个xupt1是不被显示的

SeLinux配置android源码 selinux使用_selinux_06

如果我们想让xupt1显示,就需要刚改xupt1的安全上下文

chcon -t public_content_t /var/ftp/xupt1            #临时改变

SeLinux配置android源码 selinux使用_linux_07

 

再次查看客户端

SeLinux配置android源码 selinux使用_客户端_08

 开启selinux之后,只有文件的安全上下文对的上,才可以显示

1.2对目录的影响

mkdir /xupt                         ##在根目录下新建文件夹xupt
touch /xupt/xupt{1..5}              ##在westos里面新建5个文件
ls -Zd /xupt                        ##查看目录的安全上下文

 

SeLinux配置android源码 selinux使用_selinux_09

vim /etc/vsftpd/vsftpd.conf
anon_root=/xupt

SeLinux配置android源码 selinux使用_ci_10

 

在客户端 ,发现不可以访问

SeLinux配置android源码 selinux使用_SeLinux配置android源码_11

在服务端进行下列操作

chcon -t public_content_t /xupt -R
ls -Zd /xupt

 

SeLinux配置android源码 selinux使用_selinux_12

再次测试

SeLinux配置android源码 selinux使用_客户端_13

就可以了 ,同理, 开启selinux之后,只有文件的安全上下文对的上,才可以显示

但是上述的方法是临时的,如何才能永久的保存

semanage fcontext -a -t public_content_t '/xupt(/.*)?'      ##修改/jay和底下的所有文件的安全上下文, -a表示增加,-t表示类型
restorecon -RvvF /xupt                                      ##递归刷新并显示刷新过程

 2)对进程的影响

现在我的服务器的selinux为开启状态,我使用客户端使用本地用户登陆并上上传文件,结果失败

SeLinux配置android源码 selinux使用_客户端_14

这里就是selinux对于进程的影响了,selinux会对进程加一个开关,就是sebool 插件

getsebool -a | grep ftp        ##查看ftp所有的开关状态
ftp_home_dir -->on             ##ftp的上传功能
setsebool -P ftp_home_dir on   ##打开对家目录控制,即打开上传功能,-P表示永远打开
full_access                    ##总开关打开

这时ftp_home_dir 是处于关闭的状态 

SeLinux配置android源码 selinux使用_SeLinux配置android源码_15

打开ftp_home_dir开关,并试着上传文件

SeLinux配置android源码 selinux使用_ci_16

SeLinux配置android源码 selinux使用_linux_17

成功,如果需要开启其他功能,操作类似

四、selinux报错

报错服务由软件setroubleshoot-3.2.17-2.el7.x86_64提供,在/var/log/audit/audit.log可查看