安全提高式Linux,即SELinux(Security-EnhancedLinux)是一个Linux内核的安全模块,其提供了访问控制安全策略机制,包括了强制访问控制(MandatoryAccessControl,MAC)。SELinux是一组内核更改和用户空间工具,早已被添加到各类Linux发行版中。其软件构架力图将安全决策的执行与安全策略分离,并简化涉及执行安全策略的软件的数目。
Linux安全之SELinux理解
1.SELinux介绍
安全提高式Linux(SELinux)是一种强制访问控制的实现。它的作法是以最小权限原则为基础查看系统版本linux,在Linux核心中使用Linux安全模块。它并非一个Linux发行版,而是一组可以应用在类Unix操作系统(如Linux、BSD等)的更改。
SELinux更能遵照最小权限的理念安全提高式SELinux是一个在内核中实践的强制访问控制安全性机制
Linux安全之SELinux理解
两种访问控制
SELinux有两种工作级别
1.1为何须要SELinux
在未启用SELinux的情况下,要控制用户的文件访问权linux内核空间访问用户空间,惟有通过酌情访问控制(DAC)方式如文件权限或访问控制清单(ACL)。不论用户或程序都可以将不安全的文件权限赋于其它人,或反过来访问系统在正常运作下无须访问的部分。举个例说:
基本上在传统DAC模式只在两个权限级别,root及用户,而当中不能简易地施行最小权限的理念。好多由root引导1的进程在后期会撇除它们的权限并以受限制的用户身分来运行,有些则会在chroot的情况下执行,但这种安全举措都是酌情的。
1.2解决方案
SELinux更能遵照最小权限的理念。在缺省的enforcing情况下,一切均被拒绝,接着有一系列例外的新政来准许系统的每位元素(服务、程序、用户)运作时所需的访问权。当一项服务、程序或用户尝试访问或更改一个它不须用的文件或资源时,它的恳求会遭拒绝,而这个行动会被记录出来。
因为SELinux是在内核中实践的,应用程序无须被非常编撰或重画便可以采用SELinux。其实,假若一个程序非常留心稍后所提到的SELinux错误码,它的运作可能会更畅顺。
理论上linux内核空间访问用户空间linux操作系统界面,下述样例方案可提供更高安全度:
2.SELinux的操作2.1SELinux的三种模式
SELinux拥有三个基本的操作模式,当中Enforcing是缺省的模式。
SELinux的模式可以通过Adminstration选单里的SELinux图象管理界面、或者在命令行执行system-config-selinux来查看及修改(SELinux图象管理界面是policycoreutils-gui组件的一部分,缺省是不会被安装的)。
2.2获取当前SELinux运行状态
sestatus命令
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
getenforce命令
# getenforce
Disabled
2.3改变SELinux运行状态
临时更改
# 强制访问控制
setenforce 1
# 自主访问控制
setenforce 0
永久更改
# cat /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
2.4布尔型规则
由于在SELinux中有些类型没有被启动或则你须要关掉个别类型,这个时侯你就须要使用下述命令来更改SELinux的类型了
获取类型状态
# 获取所以类型及其运行状态
getsebool -a
# 获取某个类型及其运行状态
getsebool httpd_t
更改类型状态
# 临时修改
setsebool httpd_t 1
# 永久修改
setsebool -P httpd_t 1
3.SELinux新政
配置文件/etc/sysconfig/selinux还包含了SELinux运行策略的信息,通过改变变量SELINUXTYPE的值实现。
两种策略
注意事项
# cat /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=strict
4.SELinux访问控制4.1三种访问控制方式4.2访问控制规则解析
所有进程及文件都拥有一个SELinux的安全性脉络,我们这儿查看Apache的主页,来瞧瞧SELinux安全性脉络来瞧瞧它们怎样运作的。
# 查看 Apache 的主页
# -Z 这个标旗在多数工具内都可用来显示 SELinux 安全性脉络(例如:ls -Z、 ps axZ 等)
# ls -Z /var/www/html/index.html
-rw-r--r-- username username system_u:object_r:httpd_sys_content_t /var/www/html/index.html
SELinux脉络栏
# ps axZ | grep httpd
system_u:system_r:httpd_t 3234 ? Ss 0:00 /usr/sbin/httpd
SELinux安全机制
5.排除SELinux疑难5.1SELinux拒接访问缘由
SELinux拒绝某个文件、进程或资源被访问的基要缘由
日志剖析
日志剖析工具
# 这个工具可以从 X 窗口图像管理员的「系统」选单或从命令行引导
sealert -b
# 不运行 X 服务器的人可以通过命令行产生供人阅读的报告
sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt
5.2重新标签文件
chcon:这个指令可以拿来修改一个或多个文件与目录的SELinux安全性脉络,正如chown或chmod可以拿来修改一个文件的拥有者或标准权限。
句型
选项
举例
实战演示
# 就以Apache为例,假设你想修改DocumentRoot以另一个位置来伺服网页,替换缺省的/var/www/html
#目录。譬如说我们在 /html 创建了一个目录(又或者挂载点),然后在那里创建一个 index.html文档:
mkdir /html
touch /html/index.html
# 查看selinux属性信息
# ls -Z /html/index.html
-rw-r--r-- root root user_u:object_r:default_t /html/index.html
# ls -Z | grep html
drwxr-xr-x root root user_u:object_r:default_t html
# 我们可以见到/html这个目录以及/html/index.html这个文件都拥有缺省的default_t安全性脉络类型。
# 如果我们打开浏览器并尝试查看该页,SELinux 将会正确地拒绝它们被访问并记录错误,因为该目录与文
# 件拥有不正确的安全性脉络。我们须要设置供 Apache 使用的 httpd_sys_content_t 正确安全性脉络。
# chcon -v --type=httpd_sys_content_t /html
context of /html changed to user_u:object_r:httpd_sys_content_t
# chcon -v --type=httpd_sys_content_t /html/index.html
context of /html/index.html changed to user_u:object_r:httpd_sys_content_t
# ls -Z /html/index.html
-rw-r--r-- root root user_u:object_r:httpd_sys_content_t /html/index.html
# ls -Z | grep html
drwxr-xr-x root root user_u:object_r:httpd_sys_content_t html
# 我们同样也可以利用 -R 这个回递标旗同时将它们的脉络设置:
chcon -Rv --type=httpd_sys_content_t /html
# 以这个方式更改安全性脉络在系统重新开机后仍会获保留,直至该部份文件系统被重新标签。
# 这个动作也算颇常,因此正确的解决方法,就是于测试后编写一条自定的规则,并把它与本地
# 的规则进行合并。它将会是原有的 200 多条规则外的一条规则。要作出永久性、能过渡文件
# 系统重新标签的安全性脉络改动,我们采用SELinux管理工具,或者在命令行执行semanage指令。
semanage fcontext -a -t httpd_sys_content_t "/html(/.*)?"
# 如此便会将 /html 以下的一切加入 httpd_sys_content_t 这个文件脉络类型。
5.3撤销缺省的安全性脉络
restorecon:这个指令可以拿来撤销为文件缺省的安全性脉络
句型
选项
实战演示
# 让我们再次以 Apache 作为样例。设假有位用户在他的主目录内编辑了一个index.html档并将该文件
# 迁移(mv)至 DocumentRoot 的 /var/www/html 内。纵使复制(cp)这个指令普遍会沿用目标目
# 录或文件的安全性脉络,迁移(mv)指令则会保留源文件的安全性脉络。我们可以利用 chcon 这个指令
# 来更改问题文件的安全性脉络,但由于这些文件已经位于 Apache 缺省的 DocumentRoot内,我们只
# 须撤消这个目录或文件的安全性脉络便成了。要单单撤消 index.html 档的脉络,我们可以利用。
restorecon -v /var/www/html/index.html
# 如果要以回递的方式撤消整个目录的缺省安全性脉络
restorecon -Rv /var/www/html
# 除此之外,如果我们只想检查/var/www/html目录内有哪些文件的安全性脉络需要被撤消
# 我们在采用 restorecon 时可以应用 -n 这个标旗来防止重新标签的行动
restorecon -Rv -n /var/www/html
6.参考链接
送人玫瑰,手有余香!