SELinux安全子系统就是为了杜绝此类情况而设计的,它能够从多方面监控违法行为:对服务程序的功能进行限制(SELinux域限制可以确保服务程序做不了出格的事情);对文件资源的访问限制(SELinux安全上下文确保文件资源只能被其所属的服务程序进行访问)。“SELinux域”和“SELinux安全上下文”是SELinux的双保险,使服务程序无法进行越权操作。
SELinux服务有三种运行模式,具体如下:

  • Enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
  • Permissive:遇到服务越权访问时,只发出警告而不强制拦截。
  • Disabled:对于越权的行为不警告也不拦截。

selinux的配置文件位置:/etc/selinux/config,链接文件位置:/etc/sysconfig/selinux
本人的机器环境

ip地址 操作系统 安装软件
192.168.2.211 Centos 7 64位 yum方式安装httpd

1、查询selinux服务的工作状态
sestatus

2、查看selinux的运行模式
getenforce

3、修改selinux的运行模式

setenforce 0  #将运行模式设置为Permissive,即临时关闭selinux,重启系统后失效
setenforce 1  #将运行模式设置为Enforcing,如果配置文件里是Permissive,重启系统后失效


4、修改配置文件,使其永久关闭selinux,重启系统后生效
注:配置文件里定义的是selinux的默认运行状态,可以理解为系统重启后的状态

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
sed -i 's/SELINUXTYPE=targeted/#&/' /etc/selinux/config
setenforce 0

5、查询安全上下文相关命令,使用-Z参数
查看目录的安全上下文,使用ls -Z

查看文件的安全上下文

查看进程的安全上下文,使用ps -Z

查看selinux用户的安全上下文,使用id -Z

6、使用selinux需要记住的四个命令

  • semanage:该命令用于管理selinux的安全上下文,可查看、添加、修改和删除进程、文件或目录的安全上下文策略
  • restorecon:执行semanage命令后,需要使用restorecon命令将设置好的安全上下文立即生效,可以加上-Rv参数对指定的目录进行递归操作,以及显示修改过程
  • getsebool:查询selinux域的安全策略,需要加上-a参数
  • setsebool:修改selinux域的安全策略的规则,加上-P参数使其永久且立即生效

7、修改httpd服务的默认网站目录,来配置selinux
(1)安装httpd服务,并设置firewalld防火墙允许http服务

yum -y install httpd
firewall-cmd --permanent --add-service=http
firewall-cmd --reload

(2)将网站数据目录修改为/home/wwwroot目录,并创建首页文件

mkdir /home/wwwroot
echo "The New Web Directory" > /home/wwwroot/index.html

(3)修改httpd服务的配置文件
vim /etc/httpd/conf/httpd.conf

(4)启动httpd服务,并验证效果
systemctl start httpd

通过浏览器访问发现显示上图页面,而这正是selinux在捣鬼。
(5)查看selinux运行状态,并关闭它

getenforce
setenforce 0


再次刷新页面,就会看到正常的网页内容了。

我们把httpd服务的网站数据默认保存目录修改为/home/wwwroot,这显然违反了selinux的监管原则,/home目录是用来存放普通用户的家目录数据的,而现在httpd服务却要去获取普通用户家目录中的数据,selinux自然是不允许了。我们现在把selinux服务恢复到强制启用安全策略模式,然后修改selinux的安全上下文即可。
(6)启用selinux,并且对比/var/www/html和/home/wwwroot目录的安全上下文有什么区别

setenforce 1
ls -Zd /var/www/html/
ls -Zd /home/wwwroot/


selinux安全上下文是由用户段、角色段和类型段等多个信息项组成的,用户段system_u表示系统进程的身份,角色段object_r表示文件目录的角色,类型段httpd_sys_content_t表示网站服务的系统文件。即然如此,那我们只将/home/wwwroot目录的安全上下文修改为跟原始网站目录一样就行了。
(7)安装所需命令软件包
yum -y install policycoreutils-python.x86_64
(8)将/home/wwwroot目录添加一条安全上下文

semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*


我们再通过浏览器访问一下,能正常显示网页内容,OK。

8、开启httpd服务的个人用户主页功能,来配置selinux
(1)修改配置文件,开启个人用户主页功能
vim /etc/httpd/conf.d/userdir.conf

(2)切换到普通用户,并且创建网站目录及首页文件

useradd xuad
su - xuad
mkdir public_html
echo "This is user's website" > public_html/index.html
chmod -Rf 755 /home/xuad/
exit
systemctl restart httpd

在浏览器地址栏里输入“http://192.168.2.223/~xuad”,不出所料,报错了。

httpd服务既然提供了个人用户主页功能,那么用户的网站目录自然是存在在用户的家目录中,所以应该不是selinux安全上下文的问题。我们前面有提到过selinux域,那么是不是被它给阻止了呢?
(3)查看与http协议相关的安全策略
getsebool -a | grep http

这么多的安全策略规则,我们没必要逐个理解它们,只需要通过名字大致猜测出相关的策略用途就可以了。那么通过名字我们很容易能发现应该是httpd_enable_homedirs规则,而此规则是off,我们应该将其修改为on。
(4)修改selinux域策略规则,该操作永久生效,并且立即生效
setsebool -P httpd_enable_homedirs=on
然后刷新一下页面,能正常显示首页内容了。

9、配置基于端口号的多站点,来配置selinux
(1)创建网站目录及首页文件

mkdir -p /home/wwwroot/8111
mkdir -p /home/wwwroot/8222
echo "port:8111" > /home/wwwroot/8111/index.html
echo "port:8222" > /home/wwwroot/8222/index.html

(2)修改配置文件,增加两个监听端口,并且添加两个虚拟站点配置
vim /etc/httpd/conf/httpd.conf


(3)查看selinux安全上下文

ls -Zd /home/wwwroot/8111/
ls -Zd /home/wwwroot/8222/


前面我们修改了/home/wwwroot目录的安全上下文,此时我们新建的两个目录默认继承了上层目录的安全上下文,这里无须再修改了。现在重启httpd服务
systemctl restart httpd

奇怪,启动时居然报错了。因为8111和8222端口不属于httpd服务,但现在却被httpd服务监听使用了,所以selinux会拒绝httpd服务使用这两个端口。
(4)查看与http协议相关的selinux服务允许的端口列表
semanage port -l | grep http

显然http_port_t规则里没有8111和8222这两个端口号。
(5)往http_port_t规则里添加端口号

semanage port -a -t http_port_t -p tcp 8111
semanage port -a -t http_port_t -p tcp 8222


此操作立即生效,且永久生效,无须使用restorecon命令。
(6)配置firewalld防火墙允许8111和8222端口

firewall-cmd --permanent --add-port=8111/tcp
firewall-cmd --permanent --add-port=8222/tcp
firewall-cmd --reload
firewall-cmd --list-ports


(7)重启httpd服务,并通过浏览器验证
systemctl restart httpd


网站页面正常显示,OK。

SELinux的使用相关推荐

  1. centos7下selinux永久关闭

    ----------------------------------------------selinux永久关闭------------------------------------------- ...

  2. 【linux】SELinux工具:semanage的安装和使用

    1.安装 在ubuntu14.04上安装 sudo apt-get install policycoreutils 在CentOS7上安装 sudo yum -y install policycore ...

  3. 9.5. SELINUX

    禁用SElinux编辑/etc/selinux/config,修改如下内容: SELINUX=disabled 使用命令 getenforce setenforce 0 lokkit --selinu ...

  4. SELinux与强制访问控制系统应用

    几乎可以肯定每个人都听说过 SELinux (更准确的说,尝试关闭过),甚至某些过往的经验让您对 SELinux 产生了偏见.不过随着日益增长的  0-day 安全漏洞,或许现在是时候去了解下这个在 ...

  5. phpMyAdmin FTP iptables Selinux

    四.修改配置 1.vi /usr/local/php/etc/php.ini 1) ; Directory in which the loadable extensions (modules) res ...

  6. linux防火墙伦堂,「linux专栏」自从看了这篇文章,我彻底搞懂了selinux和防火墙...

    很多网友提到linux的防火墙就犯难,现在又多出一个selinux,愈加分不清了.曾几何时,小编也是如此,不过当你看完这篇文章之后,再也无需为此犯难了. 何为SELinux 简单来书,SELinux( ...

  7. context linux,使用selinux contexts

    SELinux增强了Linux系统的安全,但是对于初学者来说很容易造成各种各样的错误,经常被搞的莫名其妙不知所措,最后只能祭出大招把SELinux一关了之.笔者也是初学者,也没有搞清楚其中的道理,只是 ...

  8. 提升篇——SELINUX相关介绍

    1.SElinux简介 SELinux:Secure Enhanced Linux,是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Comp ...

  9. centos selinux mysql 5.6_centos 6.4下安装mysql 5.6.11

    今天有空来测试下最新的centos6.4下安装最新数据可mysql5.6.11 系统安装在这里不再叙述 centos6.4采用最小化安装 mysql5.6.11采用源码包安装 初始化系统:关掉ipta ...

  10. android+关闭selinux权限问题,快速解决Android中的selinux权限问题【转】

    在Android开发的过程中,遇到关于selinux相关的东西,当时还一下子看不懂,现在好像有点眉目了. 比如,内核打印这个提示 type=1400 audit(32.939:25): avc: de ...

最新文章

  1. C语言遥控器程序,红外遥控
  2. 操作系统实验1—实现单处理机下的进程调度程序
  3. CVPR 2020 | CMU HKUST提出binary网络自动化搜索,同时实现超高压缩与高精度
  4. window安装mysql5.7解压版(解决乱码问题)
  5. matlab控制树莓派3b,树莓派3B+ 手机h5网页控制GPIO
  6. 图像去雾算法学习笔记1——何凯明博士基于暗通道先验的单幅图像去雾算法公式推导
  7. linux硬盘速率测试,【Linux】测试硬盘读写速度
  8. java的一种加解密方法
  9. 【H5钢琴示例代码】
  10. 复旦大学计算机学院教师简介,复旦大学计算机科学技术学院导师教师师资介绍简介-危辉...
  11. java 图片检查_使用JAVA如何对图片进行格式检查以及安全检查处理
  12. (手机自适应)成人高考自考资讯网源码 织梦dedecms模板
  13. mysql minus 语句用法_mysql如何用minus运算符?
  14. InfluxDB2.2及Influx安装
  15. 大数据-安装 Hadoop3.1.3 详细教程-单机/伪分布式配置(Centos)
  16. 下载全免费瑞星升级包的好地方
  17. mysql table crashed_快速解决MySQL:Table xxx is marked as crashed and should be repaired五个办法...
  18. SecondLife 架构剖析
  19. 物联网工程专业的迷茫与抉择
  20. win7 flash无法全屏,win7全屏问题

热门文章

  1. el-scrollbar 使用说明
  2. python开发安卓盒子_python实现音乐播放器 python实现花框音乐盒子
  3. 0x80004005错误代码解决方法_lol手游100014是什么意思 错误代码100014解决方法[多图] -手游问答...
  4. Web项目知识点积累
  5. 赛尔号7月17日服务器维护,赛尔号7月17日新精灵资料汇总 御象灵尊喜获新皮肤 滑铲梗专用...
  6. excel 用poi设置打开密码
  7. mysql中文乱码解决_mysql中文乱码解决方式
  8. 广电大数据用户画像及营销推荐策略(四)——Python实现
  9. Houdini Chop 数据chan格式
  10. JS中bignumber处理高精度小数运算的使用