SELinux(Security-Enhanced Linux) 【安全增强型linux】是美国国家安全局(NSA)对于强制访问控制的实现,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
1.我们可以通过 getenforce命令来查看SElinux服务的运行状态:
总共有三种状态:
第一种: 关闭状态 disabled
第二种: 开启状态下的警告级别 Permissive
第三种: 开启状态下的强制级别 Enforcing
其中 开启状态下的级别转换通过setenforce 0/1来进行改变!
2.如何开启关闭SElinux服务:
vim /etc/sysconfig/selinux
打开可以看到文件内容:
将 disabled 改为enforcing
注因为 SElinux为内核级别的服务,所以需要重启系统才能生效!
重启系统:
reboot命令
重启之后可以看到SElinux的状态:(更改为了 Enforcing)
开启状态的级别转换操作如下:
setenforce 0 :更改为 Permissive
但配置文件里面没有更改!
setenforce 1: 更改为 Enforcing
如果想要关闭SElinux服务就需要将配置文件里的enforcing 或者 permissive 改为disabled 并且重启系统(reboot)才可关闭生效!
当selinux为关闭(disabled)状态的时候:
我们作如下操作:
新建一个 /mnt目录下的 westosfile文件,并把该文件移动到 匿名用户家目录 /var/ftp/目录下看看会发生什么:
(mv 移动是一个重命名的过程,cp复制是一个新建的过程,cp可能会使文件的属性,权限发生一些变化,不利于我们实验.)
在客户端匿名登陆ftp:(可以看到我们刚才移动到家目录里面的westosfile文件)
通过 ls -Z + 目录的命令可以查看 文件的上下文信息:
可以看到原本属于家目录的下的pub目录上下文为public_content_t:s0; 而从/mnt底下移动过来的westosfile文件显示的是?(问号)【即上下文不一致】
当selinux服务开启时:(Enforcing状态时)
我们重复上述操作可以看到:
新建westosfile1 移动到匿名用户家目录
匿名用户登陆访问ftp:(看不到我们刚才上传的westosfile1文件)
查看安全上下文:(selinux开启状态下如果上下文不一致不会显示家目录里面不一致的文件,目录)
但是当selinux开启状态为(Permissive)时:
新建一个/mnt底下的ccc文件,移动到匿名用户家目录下
观察文件的安全上下文:(可以发现ccc和其他三个都不一样)
但是ccc还是可以在Permissive状态下显示出来:
另外:
当 selinux为关闭(disabled)状态时,只要/etc/vsftpd/vsftpd.conf 配置文件里配置好文件上传功能,且家目录权限,组更改好就可以正常上传!
当selinu为开启(Permissive)状态时,只要/etc/vsftpd/vsftpd.conf 配置文件里配置好文件上传功能且家目录权限,组更改好,也可以上传!
可以看到上传/etc/passwd文件成功
当selinux为开启(Enforcing)状态时,不管满足什么条件,都是无法上传文件的,错误为553:
A:临时修改:
我们建立一个目录/ftphome,可以用ls -Zd + 目录 查看 目录的上下文信息,/ftphome的安全上下文为:default_t:s0
现在我们临时修改它:(利用chcon 命令, -t 表示修改上下文为后面跟的字符)
chcon -t public_content_t /ftphome
可以看到更改成功:
我们将它移动到匿名用户家目录下(Enforcing状态下):
可以看到临时更改上下文是有效果的:
所谓临时更改是指: 当我们更改配置文件/etc/sysconfig/selinux 为disabled ,reboot系统 ,再改回enforcing开启后可以看到临时更改的文件上下文恢复原样了!:(注:在这我们需要将/var/ftp/ftphome 移动回 / 下)
B:永久更改:
首先查看 /var/ftp 和 /ftphome的上下文列表:
/var/ftp 的上下文列表如下:
/ftphome 的上下文列表:(可以看到没有信息,因为ftphome是我们新建的目录)
新建一个/ftphome下的kkk目录:
永久修改/ftphome及其底下的目录,文件的安全上下文:(-a 增加, -t 修改内容 /ftphome(/.*)?表示 ftphome目录及其下面的所以文件,目录全部内容。)
可以看到效果:
首先上下文列表有了:
上下文更改也完成了:
这种更改,不会受到reboot重启系统影响!
selinux布尔值相当于是一个功能开关,可以启用或者关闭相关策略行为:
比如
(1)匿名用户上传文件:
默认的,在selinux开启(enforcing)的状态下本地用户是没有上传权限的:
可以看到:无法上传!
此时我们可以查看selinux布尔值开关:
getsebool -a |grep ftp
可以看到匿名用户上传开关是关闭状态:
开启上传服务:
开启匿名用户上传服务:
查看:
再添加匿名用户默认家目录的安全上下文类型的读写权限!:
读写权限添加成功:
继续上传:
此时上传成功!
selinux的日志信息目录为: /var/log/audit/audit.log
查看selinux排错工具的软件包:
可以看到我们已经安装了排错软件:
开始实验:
首先:我们在/mnt目录下新建一个 aaa文件,并且把它移动到/var/ftp/匿名用户家目录底下去:
其次:先清空一次selinux日志信息和常规日志信息(/var/log/messages),便于我们观察所需的报错信息:
登陆ftp服务端,看不到我们移动到匿名用户家目录里的文件(安全上下文的关系),查看selinux日志信息:
该日志会报错,但是不提供解决方法!
查看常规日志信息:(/var/log/messages)
此段开始给你解决方法(需要细心读!)
注:!!!当我们没有安装,或者卸载了 settoubleshoot-server排错软件时:
查看 selinux 日志(/var/log/audit/audit.log)还是会报错,且没有解决办法;
另一方面,查看常规日志(/var/log/messages)也会没有解决方法了!