一、selinux简介
SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」 和SCC(Secure Computing Corporation)开发的 Linux的一个扩张强制访问控制安全模块。
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕?SELinux 就是来解决这个问题的。
1、selinux: 内核级加强型防火墙
2、作用: 给每一个文件加载标签(context:安全上下文)
对文件的影响:程序的安全上下文和文件的安全上下文必须相匹配才会被允许
对服务的影响:用setsebool ,把程序的功能加了开关,并且把开关全部关掉
3、显示selinux的状态: getenforce
selinux的三种状态:
Enforcing 强制模式
Permissive 警告模式
Disabled 关闭
4、更改selinux的开机状态:
vim /etc/sysconfig/selinux
更改完状态要重启才能生效
reboot #内核重启
重启后查看
5、selinux的两个级别: 强制和警告
setsebool # 功能开关
getenforce # 查看selinux的布尔值
enforcing / permissive # 开启
enforcing # 强制(拒绝+警告)
permissive # 警告(接受+警告)
两者之间的转换(不需要重启就可以生效)
setenforce 0 -----> permissive # 转换为警告模式,
setenforce 1 -----> enforcing # 转换为强制模式
6、selinux报错日志: /var/log/audit/audit.log
二、selinux:安全上下文访问规则
1、安全上下文简介:
所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的
在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文
比如:我们从别的地方移动一个文件到/var/ftp,而当我们登陆lftp之后,发现看不到该文件,是因为这个文件的安全上下文和/var/ftp的安全上下文不匹配,这就是selinux的保护机制,所以我们需要将这个文件的安全上下文修改和/var/ftp的达到一致
测试:
查看selinux状态为强制模式
在/mnt下新建一个文件hui,并将它移动到 /var/ftp
注意:
mv是重命名的过程,文件的属性和权限不会改变(文件上下文类型不会改变)
cp新建的过程,文件的属性和权限会改变(会重新生成安全上下文)
查看/var/ftp的安全上下文的类型
(1)ls -Z 查看文件的安全上下文
(2)ls -Zd 查看目录的安全上下文
/var/ftp是lftp的默认发布目录,它默认的安全上下文是public_content_t
此处可以看到hui和pub安全上下文类型不一致
lftp登录服务端,看不到移动过去的文件
当把selinux的状态由强制模式改为警告模式后
再次登录客户端,就可以看到移动过去的文件huoq
2、修改上下文的方法:
(1)临时修改
查看/ftphome的上下文类型 ,显示default
chcon -t public_content_t /ftphome/ -R -t #表示修改上下文类型为public_content_t #-R 表示递归设置#
测试临时属性
修改selinux的配置文件,将selinux的状态进行如下改变:enforcing–>disabled–>enforcing
发现上下文类型又变成默认,说明这种方式的修改是临时的
(2)永久修改:
查看/var/ftp和/ftphome的上下文列表
因为/ftphome是自己建立的目录,没有列表信息
修改/ftphome和底下的所有文件的安全上下文 ,递归刷新并显示刷新过程
-a 表示增加 -d 表示删除
-t 表示设置安全上下文的类型为public_content_t
/ftphome(/.*)? 表示对文件本身和里面的所有文件,包括隐藏文件
再次查看 /ftphome的上下文列表
上下文类型永久设定成功
三、管理selinux 布尔(sebool)值
SELinux 布尔值是更改 SELinux 策略行为的开关
SELinux 布尔值是可以启用或禁用的规则
(1)本地用户上传
在selinux开启的状态下,默认本地用户是没有上传权限的
查看开关(本地用户上传开关是关闭的)
开启本地用户上传开关
测试:此时本地用户可以上传文件
有时上传不成功 553(权限过小)需要给该用户加w权限
(2)匿名用户上传
在selinux开启的状态下,匿名用户是没有上传权限
编辑ftp服务配置文件,将匿名用户上传权限打开
将注释去掉
配置完成后重启服务:
修改匿名用户目录的所有组并给组添加权限
打开匿名用户上传开关
给匿名用户默认家目录的安全上下文类型添加读写权限
测试:
此时匿名用户可以成功上传文件
四、selinux的排错工具: setroubleshoot-server
查看selinux排错工具软件包
在/mnt下新建一个文件pcgj,并将它移动到 /var/ftp
清空日志信息,方便测试报错信息
lftp登录服务端,看不到自己建立的文件,这是由于安全上下文的关系
查看selinux的报错日志/var/log/audit/audit.log,会有报错信息产生
查看/var/log/messages 日志,里面会有报错的解决方案(排错指令)
如果删除setroubleshoot-server软件
先安装setroubleshoot-server软件
此处再次清空日志信息方便测试
再次登录服务端并退出
selinux报错日志/var/log/audit/audit.log中仍有报错,但是/var/log/messages就不会有排错指令了