LinuxProbe 0x13 网站服务程序、SELinux安全子系统、个人用户主页功能、虚拟网站主机功能

  • 网站服务程序

Web网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。 ,

Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户。

网站服务程序分类:Apache、Nginx、Tomcat、IIS(Internet Information Services, 物联网信息服务; IIS只适用用windows系统)

挂载系统镜像
# mkdir -p /media/cdrom
# mount /dev/cdrom /media/cdrom
mount: /media/cdrom: WARNING: device write-protected, mounted read-only.
# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660   defaults 0 0


创建软件仓库的配置文件
# vim /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


安装Apache服务程序
# dnf install httpd


启动服务并加入到开机启动中
# systemctl start httpd
# systemctl enable httpd
  • 配置服务文件参数

Linux系统中的配置文件

作用

文件名称

服务目录

/etc/httpd

主配置文件

/etc/httpd/conf/httpd.conf

网站数据目录

/var/www/html

访问日志

/var/log/httpd/access_log

错误日志

/var/log/httpd/error_log

 

主配置文件中保存的是最重要的服务参数,一般名称都是以在/etc中,以软件名称命名的一个文件夹,里面叫做“服务名称.conf”, 配置文件中,所有以井号(#)开始的行都是注释行。

# dnf install -y httpd   安装httpd服务
# 修改配置文件 
#    主配置文件一般在 /etc/服务名称/服务名称.conf  
#    一般配置文件     /etc/服务名称.d

 

 

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

LinuxProbe 0x13 网站服务程序、SELinux安全子系统、个人用户主页功能、虚拟网站主机功能

 

 

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

参数

作用

ServerRoot

服务目录

ServerAdmin

管理员邮箱

User

运行服务的用户

Group

运行服务的用户组

ServerName

网站服务器的域名

DocumentRoot

网站数据目录(默认目录 /var/www/html)

Listen

监听的IP地址与端口号

DirectoryIndex

默认的索引页页面

ErrorLog

错误日志文件

CustomLog

访问日志文件

Timeout

网页超时时间,默认为300秒

修改项目默认目录

将约第122行用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot,同时还需要将约第127行与134行用于定义目录权限的参数Directory后面的路径也修改为/home/wwwroot。

修改项目默认目录
将约第122行用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot,同时还需要将约第127行与134行用于定义目录权限的参数Directory后面的路径也修改为/home/wwwroot。
# vim /etc/httpd/conf/httpd.conf
122 DocumentRoot "/home/wwwroot"
123
124 #
125 # Relax access to content within /var/www.
126 #
127 <Directory "/home/wwwroot">
128     AllowOverride None
129     # Allow open access:
130     Require all granted
131 </Directory>
132
133 # Further relax access to the default document root:
134 <Directory "/home/wwwroot">

重启服务
# systemctl restart httpd
# systemctl status httpd  查看状态 确认是否开启
# systemctl enable httpd  加入开机启动项
# firefox

 

  • SELinux安全子系统

SELinux(Security-Enhanced Linux)是美国国家安全局在Linux开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安全子系统。Linux系统使用SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。

如果一般权限和防火墙是门窗,那么SELinux便是在外面安装的防护栏,让系统内部更加安全。

“SELinux域”和“SELinux安全上下文”称为是Linux系统中的双保险

LinuxProbe 0x13 网站服务程序、SELinux安全子系统、个人用户主页功能、虚拟网站主机功能

SELinux服务有三种配置模式

     enforcing:强制启用安全策略模式,将拦截服务的不合法请求。

     permissive:遇到服务越权访问时,只发出警告而不强制拦截。

     disabled:对于越权的行为不警告也不拦截。

 

# vim /etc/selinux/config   重启生效
SELINUX=enforcing
# getenforce  查看当前状态
# setenforce 0     临时更改状态0禁用1启用

 

查看 SELINUX 安全上下文方法: ls命令中“-Z”参数用于查看文件的安全上下文值,而“-d”参数代表对象是个文件夹。

# ls -ldZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
# ls -ldZ /home/wwwroot
drwxrwxrwx. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot

文件上设置的SELinux安全上下文是由用户段、角色段以及类型段等多个信息项共同组成。

用户段system_u代表系统进程的身份,

角色段object_r代表文件目录的角色,

类型段httpd_sys_content_t代表网站服务的系统文件。

LinuxProbe 0x13 网站服务程序、SELinux安全子系统、个人用户主页功能、虚拟网站主机功能

semanage:用于管理SELinux的策略,英文全称为:“SELinux manage”,语法格式为:“semanage [参数] [文件]”。

参数

作用

-l

查询

-a

添加

-m

修改

-d

删除

semanage命令不仅能够像传统chcon命令那样—设置文件、目录的策略,还能够管理网络端口、消息接口(这些新特性将在本章后文中涵盖)。

 

向新的网站数据目录中新添加一条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服务程序提供的个人用户主页功能完全可以胜任这个工作。

 

开启个人主页功能

第1步:编辑 /etc/httpd/conf.d/userdir.conf 配置文件,

            修改第17行的UserDir disabled参数前面加上井号(#),表示让httpd服务程序开启个人用户主页功能;

            修改第24行的UserDir public_html参数前面的井号(#)去掉(UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录)。

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

第3步:重新启动httpd服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格)

第4步: 用setsebool命令来修改SELinux策略, 开启httpd服务的个人用户主页功能, -P参数参数永久有效

# vim /etc/httpd/conf.d/userdir.conf
11 <IfModule mod_userdir.c>
12     #
13     # UserDir is disabled by default since it can confirm the presence
14     # of a username on the system (depending on home directory
15     # permissions).
16     #
17     # UserDir disabled
18
19     #
20     # To enable requests to /~user/ to serve the user's public_html
21     # directory, remove the "UserDir disabled" line above, and uncomment
22     # the following line instead:
23     #
24       UserDir public_html
25 </IfModule>
26
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 FileInfo AuthConfig Limit Indexes
33     Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
34     Require method GET POST OPTIONS
35 </Directory>


# su - zhangsan
$ mkdir public_html
$ echo "Welcome" > public_html/index.html
$ chmod -R 755 /home/zhangsan


# getsebool -a | grep http   查看SELinux域策略
# setsebool -P httpd_enable_homedirs=on
# firefox

 

开启个人用户站点登录验证

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

第2步:继续编辑个人用户主页功能的配置文件。把第31~37行的参数信息修改成下列内容,

# htpasswd -c /etc/httpd/passwd zhangsan
New password:此处输入用于网页验证的密码
Re-type new password:再输入一遍进行确认
Adding password for user zhangsan


# vim /etc/httpd/conf.d/userdir.conf
31 <Directory "/home/*/public_html">
32     AllowOverride all   伪静态不需要可以 none
        #刚刚生成出的密码验证文件保存路径
33     authuserfile "/etc/httpd/passwd"
        #当用户访问网站时的提示信息
34     authname "My privately website"
        #验证方式为口令模式 基本验证模式
35     authtype basic
        #访问网站时需要验证的用户名称
36     require user zhangsan
37 </Directory>
# systemctl restart httpd

 

验证时使用的账户和密码是用htpasswd命令生成的专门用于网站登录的口令密码,而不是系统中的用户密码

 

 

 

  • 虚拟网站主机功能

虚拟专用服务器(Virtual Private Server,VPS)与云计算技术诞生以前,IDC服务供应商为了能够更充分地利用服务器资源,同时也为了降低购买门槛,于是纷纷启用了虚拟主机功能。

 

利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是,该技术无法实现目前云主机技术的硬件资源隔离,让这些虚拟的服务器共同使用物理服务器的硬件资源,供应商只能限制硬盘的使用空间大小。

 

Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术,用户请求的资源不同,最终获取到的网页内容也各不相同。

 

 

网卡绑定多个IP地址
# vim /etc/sysconfig/network-scripts/ifcfg-ens160
IPADDR0=192.168.10.10
IPADDR1=192.168.10.20
IPADDR2=192.168.10.30
# nmcli reload ens160
# nmcli connection up ens160

 

 

基于IP地址

如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。而且,每个网站都有一个独立的IP地址,对搜索引擎优化也大有裨益。

 

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

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

第3步: 把新的网站数据目录的SELinux安全上下文设置正确 ,并使用restorecon命令让新设置的SELinux安全上下文立即生效。

# 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


# vim /etc/httpd/conf/httpd.conf
132 <VirtualHost 192.168.10.10>注:IP地址
133     DocumentRoot /home/wwwroot/10注:家目录
134     ServerName www.linuxprobe.com注:域名 rhel8中可不加
135     <Directory /home/wwwroot/10>注:权限
136     AllowOverride None注:是否支持伪静态
137     Require all granted注:对请求授权
138     </Directory>
139 </VirtualHost>
  
140 <VirtualHost 192.168.10.20>
141     DocumentRoot /home/wwwroot/20
142     ServerName www.linuxcool.com
143     <Directory /home/wwwroot/20>
144     AllowOverride None
145     Require all granted
146     </Directory>
147 </VirtualHost>
  
148 <VirtualHost 192.168.10.30>
149     DocumentRoot /home/wwwroot/30
150     ServerName www.linuxdown.com
151     <Directory /home/wwwroot/30>
152     AllowOverride None
153     Require all granted
154     </Directory>
155 </VirtualHost>
# systemctl restart httpd
# systemctl enable httpd


# 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

 

基于主机域名

当服务器无法为每个网站都分配一个独立IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。 /etc/hosts是Linux系统中用于强制把某个主机域名解析到指定IP地址的配置文件。

第1步:手工定义IP地址与域名之间对应关系的配置文件,保存并退出后会立即生效。

第2步:分别在/home/wwwroot中创建用于保存不同网站数据的三个目录。

第3步:在httpd服务的配置文件中大约132行处开始,分别追加写入三个基于主机名的虚拟主机网站参数,然后保存并退出,并重启httpd服务。

第4步: 正确设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合,并用restorecon命令让新配置的SELinux安全上下文立即生效。

# vim /etc/hosts
192.168.10.10   www.linuxprobe.com www.linuxcool.com www.linuxdown.com


# 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


# 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>
# systemctl restart httpd
# systemctl enable httpd


# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe/*
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool/*
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown
# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown/*
# restorecon -Rv /home/wwwroot

 

 

 

 

上一篇:Django+Nginx+Uwsgi(全网最全步骤工作原理流程与部署历程)


下一篇:Win10常用快捷键