SELinux是Security-Enhanced Linux的简称,SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。
1.selinux状态
SELINUX有 enforcing disabled permissive 3种选择
enforcing //强制,如果违反了策略,则无法继续操作
disabled //关闭,安全级别最低
permissive //警告,selinux有效,即使是违法策略,依旧可以继续操作,但是会有警告,查看警告信息:cat /var/log/audit/audit.log
命令查询当前selinux状态:
getenforce
设置selinux的状态:
方式1.编辑配置文件
vim /etc/sysconfig/selinux ##在配置文件中修改selinux的状态,
保存退出后需要重启才能使该修改生效
方式2.命令修改:setenforce=0 | 1
setenforce=0 ##设置selinux的状态为permissive
setenforce=1 ##设置selinux的状态为enforcing
注意:该方式对selinux状态的修改是临时的。
命令方式可以对selinux的状态在permissive和enforcing之间进行切换,但是如果要从这两种方式向disabled状态切换时,必须通过编辑配置文件进行修改,并重启生效。
安全上下文的引入:
当selinux处于disabled状态时:
在/mnt 目录下建立目录后移动到默认发布目录下
用匿名用户登陆查看
修改配置文件,将selinux状态修改为enforcing,重启生效
重新在/mnt 目录下建立文件后移动到默认发布目录下
用匿名用户登陆查看:发现并没有看到westofile 文件
查看警告日志:
> /var/log/audit/audit.log ###清空警告日志
cat /var/log/audit/audit.log ###查看警告日志
2.selinux安全上下文
安全上下文是一个访问控制属性。当安全上下文匹配时,才会被访问允许;若不匹配时则不被允许。在SELinux中,类型标识符是安全上下文中决定访问的主要的部分。
安全上下文基本格式说明:
所有的文件和端口资源和进程都具备安全标签:安全上下文(security context)组成元素:
user:role:type:sesitivity:category,
如user_u:object_r:tmp_t:s0:c0
实际上下文存放在文件系统中,进程、文件、已经用户等都有相应的安全上下文。
查看安全上下文
查看指定文件的安全上下文:ls -Z
查看进程的安全上下文件:
查看用户安全上下文:
上述实验中在远程连接172.25.254.100时看不到/var/ftp/westofile
查看/var/ftp中文件的安全上下文:
ls -Z /var/ftp
可以看出westofile的安全上下文和ftp (public_content_t)默认安全上下文不一致,所以远程连接时无法查看该文件。
当selinux 为permissive 状态时,远程连接可以查看安全上下文不同的文件,但依然会有警告
setenforce 0
匿名用户远程连接查看
cat /var/log/audit/audit.log
修改安全上下文
1. 修改文件的安全上下文
chcon -t public_content_t /var/ftp/westofile
将selinux状态改为enforcing,测试在远程连接172.25.254.100时是否可以看到westofile
2. 修改目录及其内容的安全上下文
chcon -t public_content_t dir -R
新建目录及其目录下的文件,并将其移动到默认发布目录下
查看目录本身及其内容的安全上下文
修改目录及其内容的安全上下文
此时在远程连接172.25.254.100时是可以看到test1的
永久修改安全上下文
semanage fcontext -l ###内核指定的所有文件的安全上下文的列表
man semanage fontext ####查询semanage用法
semanage fcontext -a -t public_content_t '/dir(/.*)?' # #永久修改目录及目录中所有内容的安全上下文
新建目录及其目录下的文件
查看目录本身及其内容的安全上下文
semanage fcontext -a -t public_content_t '/dir(/.*)?'
semanage fcontext -l | grep /dir ###查看目录本身的安全上下文是不是public_content_t
restorecon -RvvF /dir ####递归刷新并显示刷新过程
sebool值
selinux会对我们系统中有些功能加上开关,我们在使用这些功能时,应该先打开开关才可以使用。而selinux布尔值是更改selinux的开关;有时候,selinux的访问权限可选可通过selinux布尔值触发,可以提高系统安全性。
1.查看ftp 的sebool值设置:
getsebool -a | grep ftp ###用于显示布尔值,查看进程的开启或关闭情况
可以看出ftpd的各项功能是默认关闭的状态
其中,ftp_home_dir - ->off 表示本地用户上传文件的功能未开启
2.将ftp_home_dir修改为 为开启状态
setsebool -P ftp_home_dir on ##修改布尔值(开启本地用户上传文件的功能);其中 -P表示 永久修改
getsebool -a | grep ftp ###再次查看进程的开启或关闭情况,看是否修改成功
3.此时,测试本地用户是否可以成功上传文件
selinux 的排错
提供日志的插件
setroubleshoot-server.x86_64