一、selinux简介
- selinux: 内核级加强型防火墙
- 作用: 给每一个文件加载标签(context:安全上下文)
对文件的影响:安全上下文
对服务的影响:对服务的特定功能加开关(sebool) - selinux的三种状态:
enforcing 强制模式
permissive 警告模式
disabled 关闭 - 显示selinux的状态: getenforce
- 更改selinux的开机状态:
更改完状态要重启才能生效
- selinux的两个级别: 强制和警告
setenforce 0 -----> permissive
setenforce 1 -----> enforcing
- selinux报错日志: /var/log/audit/audit.log
二、selinux:安全上下文访问规则
- 安全上下文简介:
所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的
在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的状态由强制模式改为警告模式后
再次登录客户端,就可以看到移动过去的文件hui
- 修改上下文的方法:
(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 表示增加
-t 表示设置安全上下文的类型为public_content_t
/ftphome(/.*)? 表示对文件本身和里面的所有文件,包括隐藏文件 - 再次查看 /ftphome的上下文列表
- 上下文类型永久设定成功
三、管理selinux 布尔(sebool)值
SELinux 布尔值是更改 SELinux 策略行为的开关
SELinux 布尔值是可以启用或禁用的规则
(1)本地用户上传
- 在selinux开启的状态下,默认本地用户是没有上传权限的
- 查看开关(本地用户上传开关是关闭的)
- 开启本地用户上传开关
- 测试:此时本地用户可以上传文件
(2)匿名用户上传 - 在selinux开启的状态下,匿名用户是没有上传权限
- 编辑ftp服务配置文件,将匿名用户上传权限打开
- 修改匿名用户目录的所有组并给组添加权限
- 打开匿名用户上传开关
- 给匿名用户默认家目录的安全上下文类型添加读写权限
- 测试:此时匿名用户可以成功上传文件
四、selinux的排错工具: setroubleshoot-server
- 查看selinux排错工具软件包
- 在/mnt下新建一个文件hui,并将它移动到 /var/ftp
- 清空日志信息,方便测试报错信息
- lftp登录服务端,看不到自己建立的文件,这是由于安全上下文的关系
- 查看selinux的报错日志/var/log/audit/audit.log,会有报错信息产生
- 查看/var/log/messages 日志,里面会有报错的解决方案(排错指令)
- 如果删除setroubleshoot-server软件
此处再次清空日志信息方便测试
- 再次登录服务端并退出
- selinux报错日志/var/log/audit/audit.log中仍有报错,但是/var/log/messages就不会有排错指令了