没有apache,先安装
yum install httpd
启用 httpd 服务程序并将其加入到开机启动项中,使其能够随系统开机而运行,从而持续为用户提供 Web 服务
systemctl start httpd
systemctl enable httpd
配置服务文件参数
Linux 系统中的配置文件
httpd 服务程序的主配置文件的构成
配置 httpd 服务程序时最常用的参数以及用途描述
DocumentRoot 参数用于定义网站数据的保存路径,其参数的默认值是把网站数据存放到/var/www/html 目录中
SELinux 安全子系统
mkdir /home/wwwroot
echo "The New Web Directory" > /home/wwwroot/index.html
打开 httpd 服务程序的主配置文件
参数 DocumentRoot 修改为/home/wwwroot,参数 Directory 后面的路径也修改为/home/wwwroot,如下:
重新启动 httpd 服务程序,无法浏览,Forbidden,You don't have permission to access /index.html on this server.
原因是:SELinux
SELinux(Security-Enhanced Linux),一个强制访问控制(MAC,Mandatory Access Control)的安全子系统
从多方面监控违法行为:对服务程序的功能进行限制(SELinux 域限制可以确保服务程序做不了出格的事情);对文件资源的访问限制(SELinux 安全上下文确保文件
资源只能被其所属的服务程序进行访问)。
SELinux 服务有三种配置模式,具体如下。
enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
permissive:遇到服务越权访问时,只发出警告而不强制拦截。
disabled:对于越权的行为不警告也不拦截。
修改配置文件:vim /etc/selinux/config
getenforce 命令获得当前 SELinux服务的运行模式
setenforce [0|1]命令修改 SELinux 当前的运行模式(0 为禁用,1 为启用)。
办法:
查看原始网站数据的保存目录与当前网站数据的保存目录是否拥有不同的 SELinux 安全上下文值
ls -Zd /var/www/htm
ls -Zd /home/wwwroot
对比分析不同:
SELinux 安全上下文是由用户段、角色段以及类型段等多个信息项共同组成的。
用户段 system_u 代表系统进程的身份,
角色段 object_r 代表文件目录的角色,
类型段 httpd_sys_content_t 代表网站服务的系统文件。
操作:使用 semanage 命令,将当前网站目录/home/wwwroot 的SELinux 安全上下文修改为跟原始网站目录的一样就可以了
semanage 命令用于管理 SELinux 的策略,格式为“semanage [选项] [文件]”。
经常用到的几个参数及其功能如下所示:
-l 参数用于查询;
-a 参数用于添加;
-m 参数用于修改;
-d 参数用于删除。
向新的网站数据目录中新添加一条 SELinux 安全上下文,让这个目录以及里面的所有文件能够被 httpd 服务程序所访问到
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
执行上述设置之后,还无法立即访问网站,还需要使用 restorecon 命令将设置好的 SELinux 安全上下文立即生效。在使用 restorecon 命令时,可以加上-Rv 参数对指定的目录进行递归操作,以及显示 SELinux 安全上下文的修改过程。最后,再次刷新页面,就可以正常看到网页内容了
个人用户主页功能
第 1 步:在 httpd 服务程序中,默认没有开启个人用户主页功能。为此,我们需要编辑下
面的配置文件,然后在第 17 行的 UserDir disabled 参数前面加上井号(#),表示让 httpd 服务
程序开启个人用户主页功能;同时再把第 24 行的 UserDir public_html 参数前面的井号(#)
去掉(UserDir 参数表示网站数据在用户家目录中的保存目录名称,即 public_html 目录)。最
后,在修改完毕后记得保存。
第 2 步:在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把
家目录的权限修改为 755,保证其他人也有权限读取里面的内容。
在用户主目录~下:
mkdir public_html
echo "This is linuxprobe's website" > public_html/ index.html
chmod -Rf 755 /home/用户名
第 3 步:重新启动 httpd 服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格),从理论上来
讲就可以看到用户的个人网站了。不出所料的是,系统显示报错页面。这一定还是 SELinux 惹的祸。
第 4 步:思考这次报错的原因是什么。httpd 服务程序在提供个人用户主页功能时,该用
户的网站数据目录本身就应该是存放到与这位用户对应的家目录中的,所以应该不需要修改
家目录的 SELinux 安全上下文。但是,前文还讲到了 Linux 域的概念。Linux 域确保服务程序
不能执行违规的操作,只能本本分分地为用户提供服务。httpd 服务中突然开启的这项个人用
户主页功能到底有没有被 SELinux 域默认允许呢?
接下来使用 getsebool 命令查询并过滤出所有与 HTTP 协议相关的安全策略。其中,off为禁止状态,on 为允许状态。
getsebool -a | grep http
发现
可以用setsebool 命令来修改 SELinux 策略中各条规则的布尔值了。
一定要记得在 setsebool 命令后面加上-P 参数,让修改后的 SELinux 策略规则永久生效且立即生效。