标题
环境
rhel-8.0-x86_64-linuxprobe.com.iso
配置yum源
第1步:把系统镜像挂载到/media/cdrom目录
mkdir -p /media/cdrom
mount /dev/cdrom /media/cdrom
第2步:使用Vim文本编辑器创建软件仓库的配置文件
cat <<EOF> /etc/yum.repos.d/rhel8.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0
EOF
第3步:验证源
yum clean all
yum makecache
代码合集如下:
mkdir -p /media/cdrom
mount /dev/cdrom /media/cdrom
cat <<EOF> /etc/yum.repos.d/rhel8.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0
EOF
yum clean all
yum makecache
httpd部署和运行
yum -y install httpd # 安装服务
systemctl start httpd # 启动
systemctl enable httpd # 开机自启
试验
firefox # 浏览器输入http://127.0.0.1
修改保存网站数据的目录为/home/wwwroot
第1步:建立网站数据的保存目录,并创建首页文件。
html后缀的文件是网页,所以写入The New web Directory会直接生成网页,这里涉及html语言。
mkdir /home/wwwroot # 创建文件夹
echo "The New web Directory" > /home/wwwroot/index.html # 输入新的语句
第2步:打开httpd服务程序的主配置文件,修改保存网站数据的目录为/home/wwwroot
将约第122行用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot
将约第127行与第134行用于定义目录权限的参数Directory后面的路径也修改为/home/wwwroot。
vi +122 /etc/httpd/conf/httpd.conf
# DocumentRoot "/home/wwwroot" 保存退出
vi +127 /etc/httpd/conf/httpd.conf
# <Directory "/home/wwwroot"> 保存退出
vi +134 /etc/httpd/conf/httpd.conf
# <Directory "/home/wwwroot"> 保存退出
SELinux安全子系统修改
修改网站的服务文件
用户段system_u:代表系统进程的身份
角色段object_r:代表文件目录的角色
类型段httpd_sys_content_t:代表网站服务的系统文件
使用restorecon命令将设置好的SELinux安全上下文立即生效,-Rv参数对指定的目录进行递归操作
vim +6 /etc/selinux/config # SELINUX=enforcing
setenforce 0
不使用setenforce 0,也使用以下注释的
# setenforce 1
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
# restorecon -Rv /home/wwwroot/
getenforce
systemctl restart httpd
firefox # 浏览器输入http://127.0.0.1
部署个人用户页面
第1步:
在httpd服务程序中,默认没有开启个人用户主页功能。为此,我们需要编辑下面的配置文件
在第17行的UserDir disabled参数前面加上井号(#),表示让httpd服务程序开启个人用户主页功能
vim +17 /etc/httpd/conf.d/userdir.conf
把第24行的UserDir public_html参数前面的井号(#)去掉**(UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录)**。
vim +24 /etc/httpd/conf.d/userdir.conf
第2步:在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把家目录的权限修改为755,保证其他人也有权限读取里面的内容。
useradd linuxprobe
passwd linuxprobe
su - linuxprobe
mkdir public_html
echo "This is linuxprobe's website" > public_html/index.html
chmod -R 755 /home/linuxprobe
exit
第3步:重新启动httpd服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格)
systemctl restart httpd
setsebool -P httpd_enable_homedirs=on
加密个人用户界面
第1步:先使用htpasswd命令生成密码数据库。
htpasswd -c /etc/httpd/passwd linuxprobe
第2步:继续编辑个人用户主页功能的配置文件。
把第31~37行的参数信息修改成下列内容,其中以井号(#)开头的内容为添加的注释信息,可将其忽略。随后保存并退出配置文件,重启httpd服务程序即可生效。
vim +31 /etc/httpd/conf.d/userdir.conf
<Directory "/home/*/public_html">
AllowOverride all
#刚刚生成出的密码验证文件保存路径
authuserfile "/etc/httpd/passwd"
#当用户访问网站时的提示信息
authname "My privately website"
#验证方式为口令模式
authtype basic
#访问网站时需要验证的用户名称
require user linuxprobe
</Directory>
systemctl restart httpd
基于IP地址
第1步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便稍后能更直观地检查效果。
mkdir -p /home/wwwroot/10
mkdir -p /home/wwwroot/20
mkdir -p /home/wwwroot/30
echo "IP:192.168.10.10" > /home/wwwroot/10/index.html
echo "IP:192.168.10.20" > /home/wwwroot/20/index.html
echo "IP:192.168.10.30" > /home/wwwroot/30/index.html
第2步:从httpd服务的配置文件中大约第132行处开始,分别追加写入3个基于IP地址的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。
vim +132 /etc/httpd/conf/httpd.conf
<VirtualHost 192.168.10.10>
DocumentRoot /home/wwwroot/10
ServerName www.linuxprobe.com
<Directory /home/wwwroot/10>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.10.20>
DocumentRoot /home/wwwroot/20
ServerName www.linuxcool.com
<Directory /home/wwwroot/20>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.10.30>
DocumentRoot /home/wwwroot/30
ServerName www.linuxdown.com
<Directory /home/wwwroot/30>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
第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
firefox
基于主机域名
第1步:手动定义IP地址与域名之间对应关系的配置文件,保存并退出后会立即生效。可以通过分别ping这些域名来验证域名是否已经成功解析为IP地址。
cat <<EOF >> /etc/hosts
192.168.10.10 www.linuxprobe.com www.linuxcool.com www.linuxdown.com
EOF
ping -c 4 www.linuxprobe.com
第2步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便稍后能更直观地检查效果。
mkdir -p /home/wwwroot/linuxprobe
mkdir -p /home/wwwroot/linuxcool
mkdir -p /home/wwwroot/linuxdown
echo "www.linuxprobe.com" > /home/wwwroot/linuxprobe/index.html
echo "www.linuxcool.com" > /home/wwwroot/linuxcool/index.html
echo "www.linuxdown.com" > /home/wwwroot/linuxdown/index.html
第3步:从httpd服务的配置文件中大约第132行处开始,分别追加写入3个基于主机名的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。
vim /etc/httpd/conf/httpd.conf
132 <VirtualHost 192.168.10.10>
133 Documentroot /home/wwwroot/linuxprobe
134 ServerName www.linuxprobe.com
135 <Directory /home/wwwroot/linuxprobe>
136 AllowOverride None
137 Require all granted
138 </Directory>
139 </VirtualHost>
140 <VirtualHost 192.168.10.10>
141 Documentroot /home/wwwroot/linuxcool
142 ServerName www.linuxcool.com
143 <Directory /home/wwwroot/linuxcool>
144 AllowOverride None
145 Require all granted
146 </Directory>
147 </VirtualHost>
148 <VirtualHost 192.168.10.10>
149 Documentroot /home/wwwroot/linuxdown
150 ServerName www.linuxdown.com
151 <Directory /home/wwwroot/linuxdown>
152 AllowOverride None
153 Require all granted
154 </Directory>
155 </VirtualHost>
基于端口号
第1步:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便稍后能更直观地检查效果。
mkdir -p /home/wwwroot/6111
mkdir -p /home/wwwroot/6222
mkdir -p /home/wwwroot/6333
echo "port:6111" > /home/wwwroot/6111/index.html
echo "port:6222" > /home/wwwroot/6222/index.html
echo "port:6333" > /home/wwwroot/6333/index.html
第2步:在httpd服务配置文件的第46行~48行分别添加用于监听6111、6222和6333端口的参数。
vim /etc/httpd/conf/httpd.conf
45 Listen 80
46 Listen 6111
47 Listen 6222
48 Listen 6333
第3步:从httpd服务的配置文件中大约第134行处开始,分别追加写入3个基于端口号的虚拟主机网站参数,然后保存并退出。记得需要重启httpd服务,这些配置才生效。
vim /etc/httpd/conf/httpd.conf
134 <VirtualHost 192.168.10.10:6111>
135 DocumentRoot /home/wwwroot/6111
136 ServerName www.linuxprobe.com
137 <Directory /home/wwwroot/6111>
138 AllowOverride None
139 Require all granted
140 </Directory>
141 </VirtualHost>
142 <VirtualHost 192.168.10.10:6222>
143 DocumentRoot /home/wwwroot/6222
144 ServerName www.linuxcool.com
145 <Directory /home/wwwroot/6222>
146 AllowOverride None
147 Require all granted
148 </Directory>
149 </VirtualHost>
150 <VirtualHost 192.168.10.10:6333>
151 DocumentRoot /home/wwwroot/6333
152 ServerName www.linuxdown.com
153 <Directory /home/wwwroot/6333>
154 AllowOverride None
155 Require all granted
156 </Directory>
157 </VirtualHost>
第4步:因为我们把网站数据目录存放在/home/wwwroot目录中,因此还是必须要正确设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合。最后记得用restorecon命令让新配置的SELinux安全上下文立即生效。
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333/*
restorecon -Rv /home/wwwroot/
第5步:SELinux允许的与HTTP协议相关的端口号中默认没有包含6111、6222和6333(semanage port -l | grep http用这个查看),因此需要将这3个端口号手动添加进去。该操作会立即生效,而且在系统重启过后依然有效。设置好后再重启httpd服务程序,然后就可以看到网页内容了
semanage port -a -t http_port_t -p tcp 6111
semanage port -a -t http_port_t -p tcp 6222
semanage port -a -t http_port_t -p tcp 6333
systemctl restart httpd
firefox
Apache的访问控制
第1步:先在服务器上的网站数据目录中新建一个子目录,并在这个子目录中创建一个包含Successful单词的首页文件。
mkdir /var/www/html/server
echo "Successful" > /var/www/html/server/index.html
第2步:打开httpd服务的配置文件,在第161行后面添加下述规则来限制源主机的访问。这段规则的含义是允许使用Firefox浏览器的主机访问服务器上的首页文件,除此之外的所有请求都将被拒绝。
vim /etc/httpd/conf/httpd.conf
161 <Directory "/var/www/html/server">
162 SetEnvIf User-Agent "Firefox" ff=1
163 Order allow,deny
164 Allow from env=ff
165 </Directory>
systemctl restart httpd
firefox
# 再用其他浏览器试一试
第3步:除了匹配源主机的浏览器特征之外,还可以通过匹配源主机的IP地址进行访问控制。我们只允许IP地址为192.168.10.20的主机访问网站资源,那么就可以在httpd服务配置文件的第161行后面添加下述规则。这样在重启httpd服务程序后再用本机(即服务器,其IP地址为192.168.10.10)来访问网站的首页面时就会提示访问被拒绝了
vim /etc/httpd/conf/httpd.conf
161 <Directory "/var/www/html/server">
162 Order allow,deny
163 Allow from 192.168.10.20
164 </Directory>
………………省略部分输出信息………………
systemctl restart httpd
firefox
如果主机想访问虚拟机的httpd页面(可选操作)
添加一块net网卡
编辑==》虚拟网络编辑器
,找到这个虚拟机使用的NET网卡
打开NAT setting,nat设置,添加,设置端口就好了
添加一个端口映射,我们将主机988端口映射成虚拟机80端口
最后记得按“应用+确定”
主机浏览器访问虚拟机搭建的httpd的时候输入ip就OK
systemctl stop firewalld
# 暂时关闭防火墙,重启防火墙或者重启系统都会再次开启防火墙