Linux:Apache应用设置,SELinux,虚拟主机功能(1)

systemctl start httpd

systemctl enable httpd

配置服务文件参数

Linux 系统中的配置文件

在 httpd 服务程序的主配置文件中,存在三种类型的信息:注释行信息、全局配置、区域配置

配置 httpd 服务程序时最常用的参数以及用途描述

DocumentRoot 参数用于定义网站数据的保存路径,其参数的默认值
是把网站数据存放到/var/www/html 目录中;而当前网站普遍的首页面名称是 index.html,因
此可以向/var/www/html 目录中写入一个文件,替换掉 httpd 服务程序的默认首页面,该操作
会立即生效

想把保存网站数据的目录修改为/home/wwwroot 目录,该怎么操作呢?

vim /etc/httpd/conf/httpd.conf

       DocumentRoot "/home/wwwroot"

       <Directory "/home/wwwroot">
          AllowOverride None
         # Allow open access:
         Require all granted
        </Directory>

重启,访问http://127.0.0.1/index.html页面,竟然发现页面中显示 “ Forbidden,You don't have permission to SELinux 安全子系统access /index.html on this server.”。而这一切正是 SELinux 在捣鬼。

SELinux 安全子系统

SELinux(Security-Enhanced Linux)

SELinux 服务有三种配置模式

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

vim /etc/selinux/config

        SELINUX=enforcing

getenforce

setenforce 0        修改 SELinux 当前的运行模式(0 为禁用, 1 为启用)

httpd 服务程序的功能是允许用户访问网站内容,因此 SELinux 肯定会默认放行用户对网
站的请求操作。但是,我们将网站数据的默认保存目录修改为了/home/wwwroot,而这就产生
问题了。 /home 目录是用来存放普通用户的家目录数据的,而现在, httpd
提供的网站服务却要去获取普通用户家目录中的数据了, 这显然违反了 SELinux 的监管原则。

把 SELinux 服务恢复到强制启用安全策略模式,然后分别查看原始网站数据
的保存目录与当前网站数据的保存目录是否拥有不同的 SELinux 安全上下文值:

setenforce 1

以下对比以下两个目录:

ls -Zd /var/www/html

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

ls -Zd /home/wwwroot

drwxrwxrwx. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot

在文件上设置的 SELinux 安全上下文是由用户段、角色段以及类型段等多个信息项共同
组成的。其中,用户段 system_u 代表系统进程的身份,角色段 object_r 代表文件目录的角色,
类型段 httpd_sys_content_t 代表网站服务的系统文件。

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 安全上下文的修改过程。最后,再次刷新页面,就可以正
常看到网页内容了

restorecon -Rv /home/wwwroot/

个人用户主页功能

在 httpd 服务程序中,默认没有开启个人用户主页功能。为此,我们需要编辑下
面的配置文件/etc/httpd/conf.d/userdir.conf,然后在第 17 行的 UserDir disabled 参数前面加上井号(#),表示让 httpd 服务
程序开启个人用户主页功能;同时再把第 24 行的 UserDir public_html 参数前面的井号(#)
去掉(UserDir 参数表示网站数据在用户家目录中的保存目录名称,即 public_html 目录)。最
后,在修改完毕后记得保存。

vim /etc/httpd/conf.d/userdir.conf

第 2 步:在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把
家目录的权限修改为 755,保证其他人也有权限读取里面的内容。

第 3 步:重新启动 httpd 服务程序。在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格) ,从理论上来讲就可以看到用户的个人网站了。如果浏览个人网页出错,则是因为SELinux

接下来使用 getsebool 命令查询并过滤出所有与 HTTP 协议相关的安全策略。其中, off为禁止状态, on 为允许状态。

getsebool -a | grep http

可以发现:httpd_enable_homedirs --> off

用setsebool 命令来修改 SELinux 策略中各条规则的布尔值了。一定要记得在 setsebool 命令
后面加上-P 参数,让修改后的 SELinux 策略规则永久生效且立即生效。

setsebool -P httpd_enable_homedirs=on

有时,网站的拥有者并不希望直接将网页内容显示出来,只想让通过身份验证的用户访
客看到里面的内容,这时就可以在网站中添加口令功能了。

第 1 步:先使用 htpasswd 命令生成密码数据库。 -c 参数表示第一次生成;后面再分
别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的
本地账户)

htpasswd -c /etc/httpd/passwd linuxprobe

第 2 步:编辑个人用户主页功能的配置文件。把第 31~35 行的参数信息修改成下列内容,
其中井号(#)开头的内容为添加的注释信息,可将其忽略。随后保存并退出配置文
件,重启 httpd 服务程序即可生效。

vim /etc/httpd/conf.d/userdir.conf

27 #
28 # Control access to UserDir directories. The following is an example
29 # for a site where these directories are restricted to read-only.
30 #
31 <Directory "/home/*/public_html">
32 AllowOverride all
#刚刚生成出来的密码验证文件保存路径
33 authuserfile "/etc/httpd/passwd"
#当用户尝试访问个人用户网站时的提示信息
34 authname "My privately website"
35 authtype basic
#用户进行账户密码登录时需要验证的用户名称
36 require user linuxprobe
37 </Directory>

systemctl restart httpd

虚拟主机功能

利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。

Apache 的虚拟主机功能是服务器基于用户请求的不同 IP 地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术

基于 IP 地址

利用nmtui工具配置服务器的三个IP地址如下:

第 1 步:分别在/home/wwwroot 中创建用于保存不同网站数据的 3 个目录,并向其中分
别写入网站的首页文件。

[root@linuxprobe ~]# mkdir -p /home/wwwroot/10
[root@linuxprobe ~]# mkdir -p /home/wwwroot/20
[root@linuxprobe ~]# mkdir -p /home/wwwroot/30
[root@linuxprobe ~]# echo "IP:192.168.10.10" > /home/wwwroot/10/index.html
[root@linuxprobe ~]# echo "IP:192.168.10.20" > /home/wwwroot/20/index.html
[root@linuxprobe ~]# echo "IP:192.168.10.30" > /home/wwwroot/30/index.html

第 2 步:在 httpd 服务的配置文件中大约 113 行处开始,分别追加写入三个基于 IP 地址的虚
拟主机网站参数,然后保存并退出。记得需要重启 httpd 服务,这些配置才生效。

vim /etc/httpd/conf/httpd.conf

………………省略部分输出信息………………
113 <VirtualHost 192.168.10.10>
114 DocumentRoot /home/wwwroot/10
115 ServerName www.linuxprobe.com
116 <Directory /home/wwwroot/10 >
117 AllowOverride None
118 Require all granted
119 </Directory>
120 </VirtualHost>
121 <VirtualHost 192.168.10.20>
122 DocumentRoot /home/wwwroot/20
123 ServerName bbs.linuxprobe.com
124 <Directory /home/wwwroot/20 >
125 AllowOverride None
126 Require all granted
127 </Directory>
128 </VirtualHost>
129 <VirtualHost 192.168.10.30>
130 DocumentRoot /home/wwwroot/30
131 ServerName tech.linuxprobe.com
132 <Directory /home/wwwroot/30 >
133 AllowOverride None
134 Require all granted
135 </Directory>
136 </VirtualHost>

systemctl restart httpd

第 3 步:此时访问网站,则会看到 httpd 服务程序的默认首页面。大家现在应该立刻就反
应过来—这是 SELinux 在捣鬼。由于当前的/home/wwwroot 目录及里面的网站数据目录的
SELinux 安全上下文与网站服务不吻合,因此 httpd 服务程序无法获取到这些网站数据目录。
我们需要手动把新的网站数据目录的 SELinux 安全上下文设置正确(见前文的实验) ,并使用
restorecon 命令让新设置的 SELinux 安全上下文立即生效,这样就可以立即看到网站的访问效
果了

semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

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

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

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

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

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

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

restorecon -Rv /home/wwwroot

后续参考:https://blog.csdn.net/lm19770429/article/details/105846241

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值