笔者在使用apache网络服务器时,从其他地方移动过来的网页置于/var/www/html下,但是网页无法访问,但是在目录下正常建立的其他网页就是正常的。百思不得其解,最近学习中看到SELinux,把问题找到了。
Security Enhanced Linux(SELinux)是一个额外的系统安全层,主要目标是防止已遭泄露的系统服务访问用户数据,由美国国安局NSA开发。和windows的用户账户控制设置UAC有点像。
标准的安全模型是用户/组/其他权限,这种用户和组的模型称为自主访问控制DAC。比如apache服务可以对/var/www/html根目录 进行访问,没有SELinux保护的apache可以对其他目录进行访问。SELinux提供另一层安全,基于对象并由更加复杂的规则控制,称为强制访问控制MAC。有SELinux保护的apache不可以对其他目录进行访问。
1、 SELinux context
SELinux context (上下文)是一种标签,没饿过进程、文件、端口都具有特别的标签。SELinux策略(Policy)是白名单原则,使用这些标签来确定某个进程能否访问某个文件、目录或端口。context有四种类型Mode:user、role、type(targeted使用这个)、sensitivity 。SELinux预设使用的策略Policy是targeted,其使用type类型的context来制订自己的规则。
主体Subjects与目标Objects的安全上下文必须一致才能够顺利访问。所有文件和进程都具有安全环境 SELinux context。环境根据安全需要有几种元素,user:role:type:sensitivity:category 。可以通过ls -Z ,ps -Z 查看 。
文件父目录的上下文决定该文件的初始上下文,父目录的上下文会分配给新建立文件,这适用于vim、cp、touch 等。如果文件早其他未知创建,且权限得以保留(mv或者cp -a),那么原始 SELinux context将不会改变。请参考下面的例子,从mycentos用户目录下mv的文件到root用户目录下,SELinux context将不会改变。
更改文件的SELinux context有两个命令:chcon和restorecon 。chcon命令将文件的上下文改为该命令参数的上下文。restorecon,这个命令的作用就是把文件的安全上下文恢复成默认的安全上下文,是首选方法。 restorecon -v可以查看具体信息。
semanage可以设置上下文策略。 semanage fcontext -l查看策略。具体使用方法如下,感觉使用较少就不再测试。
2、SELinux mode
enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中,默认开启。
permissive:许可模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
disabled:关闭 SELinux。
SELinux 工作模式可以在 /etc/selinux/config 中设定。getenforce吗可以查看现在的模式。setenforce来设置模式。命令设置只是临时的,关机或者重启后就会失效,会返回默认的,也就是配置文件中指定的模式。
第二种暂时改变是 SELinux 工作模式的方式是在启动时将参数传递给内核参数。enforcing=0既是许可模式,enforcing=1既是强制模式。 selinux=0时将禁用 。 selinux=1时将启用。
在启动界面按下字母”e“来编辑选项。
在内核参数后面添加enforcing=0,再按ctrl + x来启动。
进入系统后,使用getenforce吗可以查看现在的模式,默认是强制模式1,修改后查看是允许模式0。这种启动时将参数传递给内核参数也是暂时的,重启后会变为默认值。
第三种修改方式就是再配置文件/etc/selinux/config 中设定,修改后需要重启才能生效。
3、SELinux bool
SELinux bool是更改策略的行为的开关,布尔值可以启用或者禁止的规则,有选择的调整策略。
getsebool -a 可以获取所有的布尔值。
更改布尔值的命令如下:
setsebool:用于修改SELinux布尔值
setsebool -P :用于修改SELinux策略并使修改永久生效
semanage boolean -l :显示布尔值是否为永久值,并提供该布尔的简短描述
semanage boolean -l -C:列出本地修改过的布尔值状态(与策略中默认不同的任何设置)
4、SELinux排故
最常见的SELinux故障时不正确的文件上下文,再大多数情况下可以运行 restorecon来解决,另一个措施是调整布尔值。
当发生被SELinux拒绝时,可从下面两个日志中查找错误。
/var/log/audit.log 审核消息
/var/log/messages 提供事件的UUID
sealert工具(需要setroubleshoot-server软件包,可yum list setroubleshoot-server来验证)来协助分析问题。
sealert -l <UUID> 生成指定时间的报告
sealert -a<FILE> 文件中所有时间的报告
网友评论