20201105 使用 Apache 服务部署静态网站-待续

使用 Apache 服务部署静态网站

1 网站服务程序;
2 配置服务文件参数;
3 SELinux 安全子系统;
4 个人用户主页功能;
5 虚拟主机功能;
6 Apache 的访问控制。

 

Web 网络服务是一种被动访问的服务程序,收到请求后才会进行响应,通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户,目前能够提供 Web 网络服务的程序有 IIS Nginx Apache 等,iis只能在windows 中使用,不仅可以提供 Web 网站服务,还可以提供 FTP NMTP SMTP 等服务,nginx 系统资源消耗低且并发能力强, Apache 程序是目前拥有很高市场占有率的 Web 服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的 API 扩展,能够实时监控服务状态,还能定制日志服务

 

安装:设置好本地yum源之后,yum进行安装 Apache 服务的软件包名称为 httpd

[[email protected] study]# yum install -y httpd

systemctl status httpd  查看状态,是否设置未自动启动等等,不在描述

[[email protected] study]# systemctl start httpd

[[email protected] study]# systemctl enable httpd

当我们在防火墙设置放行端口之后(默认是80)外部机器就可以输入 http://192.168.88.11:80访问到测试页面

配置文件中的参数说明:重要的就是日志目录和监听端口

说明:

  1. DocumentRoot "/var/www/html" 目录内放置做好的网页,会立即生效,如果修改这个则需要同步修改 <Directory "/var/www/html">,当我们自己添加后刷新即可,就会显示自己的页面

2 Listen 80  修改这个可以修改端口

 

但是无论修改配置文件的那个部分,然后重启服务之后会发现启动报错,还需要到selinux进行放行

 

》》》SELinux Security-Enhanced Linux)是一个强制访问子系统,SELinux 安全上下文确保文件资源只能被其所属的服务程序进行访问

SELinux 服务有三种配置模式,配置文件是/etc/selinux/config
¾ enforcing 强制:强制启用安全策略模式,将拦截服务的不合法请求。
¾ permissive 放纵的:遇到服务越权访问时,只发出警告而不强制拦截。
¾ disabled 不可用的:对于越权的行为不警告也不拦截。

可以使用[[email protected] ~]# getenforce 来查看selinux当前的状态 如果需要临时修改测试可以用setenforce 0 来修改状态,永久修改需要配置文件,修改之后,确实重启可以成功访问页面了,

分析一下之所以我们会被拦截,只要我们动用不属于httpd自己的资源的时候,比如端口或者其他目录的html这个时候会触发selinux的限制,所以重启任务就失败了,

 

介绍下selinux:工作模式,详细了解可以查看https://www.linuxprobe.com/selinux-introduction.html

传统Linux,一切接文件,由用户,组,权限控制访问

Selinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素所控制其访问所有文件和端口资源和进程都具备安全标签:安全上下文(security context当一个主体Subject(如一个程序)尝试访问一个目标Object(如一个文件),SELinux安全服务器SELinux Security Server(在内核中)从策略数据库Policy Database中运行一个检查。基于当前的模式mode,如果 SELinux 安全服务器授予权限,该主体就能够访问该目标。如果SELinux安全服务器拒绝了权限,就会在/var/log/messages中记录一条拒绝信息,永远不建议关闭selinux 这样会导致inode权限记录错误

 

Selinux有两种策略 ,如果需要切换在配置文件中修改 SELINUXTYPE=targeted

  1. Targeted, 只对目标网络进程(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及 syslogd)受保护
    2 Strict严格 ,对所有进程完全的SELinux保护

查看selinux配置:[[email protected] ~]# cat /etc/selinux/config |grep SELINUX

查看selinux状态:sestatus -v

 

 

semanage 命令用于管理 SELinux 的策略,格式为semanage [选项] [文件]。常用选项是:

-l 查询;-a 添加;-m 修改;-d 删除。常用的策略模块就是port  fcontext 端口和上下文也就是服务端口和目录

 

这个时候我们需要在selinux中去放行,

---------------------------------------------- 如果是端口

 

》查看开放的端口,http_port_t   查看selinux针对http的策略开放的端口。我们想要的82不在

添加我们需要的端口

[[email protected] ~]# semanage port -a -t http_port_t -p tcp 80

ValueError: Port tcp/80 already defined

[[email protected] ~]# semanage port -a -t http_port_t -p tcp 82

如果存在会提示值已经被定义的提示,参数通过帮助,-a 添加,需要删除-d  -t selinux的类型,-p 端口,需要提前指定协议,放行之后重启http服务就可以正确看到我们设置的网页了

 

 

---------------------------------------------- 如果是目录

 

首先我们需要查看二者目录的差异  -Z 是查看安全上下文,增加d就是看目录的,没有d则是看目录中文件的

[[email protected] html]# ls -Zd /var/www/html/

system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

[[email protected] html]# ls -Z /var/www/html/

unconfined_u:object_r:httpd_sys_content_t:s0 index.html

 

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

 

[[email protected] study]# ls -Zd /var/www/html/

system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

[[email protected] study]# ls -Zd /home/lipengchao/study/

unconfined_u:object_r:user_home_t:s0 /home/lipengchao/study/

可以看到一个标记的是http系统上下文类型,一个是用户家目录类型,所以不能通用,这个时候我们可以向上下文中添加一条要指定的目录是http的系统上下文,完了之后再看好像没变化

需要使用restorcon进行修复  和其他参数基本一样-R 递归,-v 显示过程

[[email protected] study]# restorecon -Rv /home/lipengchao/study/

再次查看,可以看到里面设置过的文件和目录都已经改变成了httpd的系统文件,没有设置过的则不受影响

[[email protected] study]# ls -Z /home/lipengchao/study/

unconfined_u:object_r:httpd_sys_content_t:s0 newpage.html

        unconfined_u:object_r:user_home_t:s0 test.txt

,当然了,这个一般我们不可能这么去修改,这里就是举个例子,修改项目目录需要在selinux中进行放开,修改完毕后,我们修改了httpd配置文件,然后重启服务访问

提示没有权限,,检查了用户和权限755这些要求还是不行,先放着

 

在系统中为每位用户建立一个独立的网站我们可以使用httpd的个人主页功能

1 在配置文件中开启个人主页功能,配置文件是二级配置文件userdir.confUserDir 参数表示网站数据在用户家目录中的保存目录名称,即 public_html 目录】

[[email protected] conf.d]# vim /etc/httpd/conf.d/userdir.conf

17     # UserDir disabled            # 注释掉这个禁用,开启功能

24     UserDir public_html           # 指定用户目录

2 :在用户家目录中建立用于保存网站数据的目录及首页面文件

[[email protected] ~]$ mkdir public_html

[[email protected]host ~]$ cat public_html/lipengchao.html

这是lipengchao用户下的主页!!!

另外,还需要把家目录的权限修改为 755

[[email protected] ~]$ chmod -R 755 public_html/

[[email protected] ~]$ systemctl restart httpd

 

3 访问格式 地址~用户名比如

http://192.168.88.11:82/~lipengchao果然又是很讨厌的不能访问源端

 

第四 Linux 域确保服务程序不能执行违规的操作 查看域是否允许

[[email protected] ~]$ getsebool -a |grep httpd_enable

httpd_enable_ftp_server --> off

httpd_enable_homedirs --> off

可以看到没有被允许  -P 让设置立即生效

[[email protected] ~]# setsebool -P httpd_enable_homedirs=on