1.selinux的概念
- SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统
- SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到
- SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念
- selinux是一种控制服务安全,是内核上面的一个插件,也叫做内核加强型火墙
- SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制(MAC)系统
- SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念
2.selinux特点
1.MAC:对访问的控制彻底化,对所有的文件、目录、端口的访问都是基于策略设定的,可由管理员时行设定
2.RBAC:对于用户只赋予最小权限。用户被划分成了一些role(角色),即使是root用户,如果不具有sysadm_r角色的话,也不是执行相关的管理。哪里role可以执行哪些domain,也是可以修改的
3.安全上下文:所有的操作系统访问控制都是主体和客体的相关访问控制属性,在SELINUX,访问控制属性称为安全上下文,安全上下文是一个简单的、一致的访问控制属性,所有客体(文件,进程间通信,通信管道,套接字,网络主机等)和主体(进程)有一个和客体和他们相关的单一安全上下文,一个进程的类型通常称为域,域和域类型都一样,即都是安全上下文的’TYPE’,一个安全上下文是由角色,用户和类型标识符
3.查看、更改seliunx状态
getenforce ###查看SELinux当前状态
enforceing | 表示强制 |
---|---|
permissive | 表示警告 |
disabled | 表示关闭 |
- 如果是Enforcing和Permissive模式之间的转化,利用命令即可生效:
setenforce 0 (宽容模式)| 1 (强制模式)
- 而这两种模式想切换到disbaled,需在文件vim /etc/sysconfig/selinux 中修改:SELINUX=disabled且修改后重启才能生效。
4.对安全上下文的修改
1.当selinux开启时,每个程序每个文件都有特定的安全上下文。特定安全上下文的程序只能访问特定安全上下文的文件。如果我们可以改变安全上下文,使得程序可以访问目标文件。
2.解决方法一:临时修改安全上下文
-
chcon -t public_content_t 文件
#将复制进去的文件的标签改成与发布目录一致的就可以了 -
但是chcon这个更改标签的方式是临时的,selinux重启之后就不会再生效
-
selinux这个插件被禁用又被启用
3.解决方法二:永久修改安全上下文 -
mkdir /westos
#创建新目录 -
touch /westos/file{1,2}
#创建新目录下的文件 -
semanage fcontext -l |grep /var/ftp
#查看有关/var/ftp的安全上下文 -
semanage fcontext -a -t public_content_t '/westos(/.*)?'
#将目录里的所有文件修改为指定的安全上下文 -
restorecon -RvvF /westos
#重新加载目录文件的安全上下文
5.修改程序的bool值
-
chcon -t public_content _rw_t /var/ftp/pub/
#让匿名用户具有读写这个目录的权力(必须设置) -
getsebool -a | grep ftp
#查看ftp匿名用户能干的事情的状态为off还是on
-
setsebool -P ftpd_anon_write on
#永久设置让匿名用户可以上传 -
vim /etc/vsftpd/vsftpd.conf
#编辑配置文件设置匿名用户可以上传 -
systemctl restart vsftpd
##重启服务 -
chgrp ftp /var/ftp/pub/
-
chmod 775 /var/ftp/pub/
-
setsebool -P ftp_home_dir on
#将本地用户的家目录永久开启
-
注意:
0=off 1=on
要注意vsftpd版本与主机版本是否一致的问题
之前上传文件需要在disable状态下设置配置文件等等一些操作,现在直接在enforceing状态下设置也可以上传文件
6.报错及解决方法
/var/log/messages 为系统日志,提供一些解决方案 ,需要安装服务才能提供解决方案
/var/audit/audit.log 为selinux真正的日志,不提供解决方案
yum search selinux
yum install setroubleshoot-server.x86_64 -y
1.有setroubleshoot这个软件服务的情况下:
cd /mnt/
touch /mnt/westosfile
mv /mnt/westosfile /var/ftp/
> /var/log/messages
- 在客户端lftp 172.25.254.111查看:并没有复制过来的文件
cat /var/log/messages #可以看到日志提供的解决办法 然后就能看到mv过去的了
restorecon -vR /var/ftp/ #刷新(-v不行)利用这个更改标签
ls -Z /var/ftp/ #查看标签是否一致(只有标签一致的时候才能看见复制过去的文件)
- 在客户端lftp 172.25.254.111查看:出现复制过来的文件
2.没有setroubleshoot 时日志不提供解决办法:
yum search selinux
yum -qa | grep setroubleshoot
yum remove setroubleshoot-server.x86_64 -y
将上述步骤重新使用一遍,就看不到messages日志提供的解决办法
再次安装软件
yum install setroubleshoot-server.x86_64 -y