在搭建如LAMP或者LNMP等环境时,往往大家会设置selinux为宽容或者关闭状态,如使用setenforce 0
或者编辑/etc/selinux/config等文件。出于安全考虑,这是不太好的,当然这很方便。
需要注意的是,本文使用的semanage命令来自于软件policycoreutils-python-utils
,同时,配置方式及命令也不止本文一种。
端口的设置
在SELinux中,当时用非默认端口访问服务器时,服务器上的SELinux会认为从这个端口来的流量不是某个类型的,从而无法访问对应类型的进程。
查看方式
semanage port -l |grep http
#查看SELinux认为的http相关的默认端口设置配置方式
semanage port -a -t http_port_t -p 82 tcp
#将非默认端口82加入到http的端口类型中,从而让SELinux认为从82端口进来的流量是http流量,可以使用httpd类型的进程。实际上,如果不这样设置,而贸然将httpd或者nginx的监听端口改为82,则相应程序无法启动。
端口类型的查看:netstat -anZ
进程类型的查看:ps -efZ
文件安全上下文类型的修改
SELinux在targeted策略,enforcing模式下,强制进程只能访问与之相同类型的文件,并且记录到日志。
通常情况下,创建的文件是无法被httpd等直接访问的,原因就是创建的文件安全上下文类型不匹配。
查看方式
ls -Z /var/www/html/index.html
修改方式
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
#这样修改了/var/www/html文件夹的默认安全上下文类型,并且之后在文件夹中生成或者创建的文件,都将是这个类型。但此时尚未完全修改完毕。
restorecon -Rv /var/www/html
#将/var/www/html及其子文件安全上下文类型全部恢复默认。
通常情况下,做到此处,网站首页已经基本可以访问。
布尔值的修改
但是,由于SELinux对程序功能的限制,此时,可能网站程序在调用时,仍然不能完成初始化,如Discuz!文件不可写(排除掉本身文件不可写)、wordpress提示手动创建文件等。
这里的原因多数是因为SELinux限制了httpd或者Nginx程序的访问,通过日志查看audit2why < /var/log/audit/audit.log
。日志显示php-fpm访问受限
发现如下提示:
Allow access by executing: |
可以看出,日志已经给出了解决办法,就是将httpd_unified的布尔值设置为开启。当然,个人偏好使用如下方式。
查看方式
semanage boolean -l |grep http
semanage boolean -l -C 查看个人配置的布尔值配置方式
semanage boolean -m --on httpd_unified
此时,web服务器应该是可以正常使用的。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1096485692@qq.com