Apache部署网站,基于IP地址,域名,端口三种方式实现虚拟网站主机功能,Apache的访问控制 | 您所在的位置:网站首页 › apache服务器主目录的路径 › Apache部署网站,基于IP地址,域名,端口三种方式实现虚拟网站主机功能,Apache的访问控制 |
网站服务程序 我们平时访问的网站服务就是Web网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。如图所示,Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户。 部署Apache程序: yum install httpd #安装Apache服务程序(Apache服务的软件包名为httpd) systemctl start httpd #启用httpd服务 systemctl enable httpd #加入开机启动项用浏览器访问:127.0.0.1(本机)可以看到httpd服务程序的默认页面,当看到这个页面时,说明服务程序正常启动,但可能还会有另外两种情况 1.权限不足 2.网站内没有数据 在Linux系统中配置服务,其实就是修改服务的配置文件,因此,还需要知道这些配置文件的所在位置以及用途,httpd服务程序的主要配置文件及存放位置如表所示。 服务目录 /etc/httpd 主配置文件 /etc/httpd/conf/httpd.conf 网站数据目录 /var/www/html 访问日志 /var/log/httpd/access_log 错误日志 /var/log/httpd/error_log打开httpd服务程序的主配置文件,可能会吓一跳—竟然有353行!但是,因为在这个配置文件中,所有以井号(#)开始的行都是注释行,其目的是对httpd服务程序的功能或某一行参数进行介绍,不需要逐行研究这些内容。 在httpd服务程序的主配置文件中,存在三种类型的信息:注释行信息、全局配置、区域配置,如图所示。 httpd服务程序的主配置文件的构成 在httpd服务程序主配置文件中,最为常用的参数如图所示。 SELinux安全子系统 SELinux(Security-Enhanced Linux)是美国国家安全局在Linux开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安全子系统。RHEL 7系统使用SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。 “SELinux域”和“SELinux安全上下文”称为是Linux系统中的双保险,系统内的服务程序只能规规矩矩地拿到自己所应该获取的资源,这样即便黑客入侵了系统,也无法利用系统内的服[root@linuxprobe ~]# getenforce Enforcing 务程序进行越权操作。但是,非常可惜的是,SELinux服务比较复杂,配置难度也很大,加之很多运维人员对这项技术理解不深,从而导致很多服务器在部署好Linux系统后直接将SELinux禁用了;这绝对不是明智的选择。 SELinux服务有三种配置模式,具体如下。 enforcing:强制启用安全策略模式,将拦截服务的不合法请求。 permissive:遇到服务越权访问时,只发出警告而不强制拦截。 disabled:对于越权的行为不警告也不拦截。虽然在禁用SELinux服务后确实能够减少报错几率,但这在生产环境中相当不推荐。 SELinux服务的主配置文件中,定义的是SELinux的默认运行状态,可以将其理解为系统重启后的状态,因此它不会在更改后立即生效。可以使用getenforce命令获得当前SELinux服务的运行模式: [root@linuxprobe ~]# getenforce Enforcinggetenforce:查看当前SELinxu服务的运行模式 setenforce [0|1]:修改SELinux当前的运行模式(0禁用,1启用)。此修改是临时的,在系统重启后就会失效。 分析上面实例被SELinux拦截的原因: httpd服务程序的功能是允许用户访问网站内容,因此SELinux会默认放行用户对网站的请求操作。但是,/home目录是用来存放普通用户的家目录数据的,而将网站数据的默认保存目录修改为了/home/wwwroot,导致httpd提供的网站服务要去获取普通用户家目录中的数据,这显然违反SELinux的监管原则。 semanage命令:用于管理SELinux的策略,格式:semanage [选项] [文件]。 semanage命令不仅能够像传统chcon命令那样—设置文件、目录的策略,还可以管理网络端口、消息接口。常用参数: -l:用于查询; -a:用于添加; -m:用于修改; -d:用于删除; -t:指定要想修改的值。semanage命令没有递归功能,因此要先修改目录的安全上下文,再修改目录里所有文件的安全上下文。另外semanage命令修改好的配置不会立即生效。 restorecon命令:将设置好的SELinux安全上下文立即生效。格式: restorecon [选项] [指定目录或文件]。 常用参数: -R:对指定目录进行递归操作 -v:显示SELinux安全上下文的修改过程实例:解决上面实例被SELinux拦截的问题。 #1.把SELinux服务恢复到强制启用安全策略模式 setenforce 1 #2.分别查看原始网站数据的保存目录与当前网站数据的保存目录的SELinux安全上下文值 ls -Zd /var/www/html #SElinux安全上下文为httpd_sys_content_t ls -Zd /home/wwwroot #SELinux安全上下文为home_root_t #3.把当前网站数据保存目录的安全上下文设置成和原始网站数据保存目录的安全上下文一样 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot #修改目录的安全上下文 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/* #修改目录里的所有文件的安全上下文 #4.使设置好的SELinux安全上下文立即生效 restorecon -Rv /home/wwwroot/个人用户主页功能 如果想在系统中为每位用户建立一个独立的网站,通常的方法是基于虚拟网站主机功能来部署多个网站。但这个工作会让管理员苦不堪言(尤其是用户数量很庞大时),而且在用户自行管理网站时,还会碰到各种权限限制,需要为此做很多额外的工作。其实,httpd服务程序提供的个人用户主页功能完全可以胜任这个工作。该功能可以让系统内所有的用户在自己的家目录中管理个人的网站,而且访问起来也非常容易。 getsebool命令:搭配-a参数输出所有安全策略(off禁止,on允许) setsebool命令:修改SELinux策略中各条规则的布尔值。搭配-P参数使得修改后的SELinux策略规则立即且永久生效。 实例:实现个人用户主页功能 #1.修改配置文件/etc/httpd/conf.d/userdir.conf ,让httpd服务程序开启个人用户主页功能。 vim /etc/httpd/conf.d/userdir.conf ... 17 UserDir public_html #UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录 ... 31 #注意要和17行的目录名一致 ... 35 #2.在用户家目录中建立用于保存网站数据的目录及首页文件。把自己家目录的权限修改为755,以保证其他人也有权限读取里面的内容。退出该用户。 su - linuxprobe mkdir public_html #注意要和配置文件中的目录名一致 echo "linuxprobe's website" > public_html/index.html chmod -Rf 755 ~ #“~”代表就是当前用户的家目录,相当于/home/linuxprobe exit #3.重启httpd服务。在浏览器输入网址验证(格式:网址/~用户名),会报错。原因依然在于SELinux。 systemctl restart httpd #4.查询并过滤出所有与http协议相关的安全策略。留意httpd_enable_homedirs是否为on状态,若不是,修改为on状态并立即且永久生效。 getsebool -a | grep http setsebool -P httpd_enable_homedirs=on实例:在上面实例的基础上,为网站中添加口令功能,让只有通过身份验证的用户访客才能看到网站内容。 htpasswd命令:建立和更新存储用户名、密码的文本文件, 用于对HTTP用户的basic认证。htpasswd 是开源 http 服务器apache httpd的一个命令工具。其中,用于验证的用户名称不必是系统已有的本地账户,该命令生成的账户密码和系统中的账户密码是独立的,没有联系。 #1.生成密码数据库 htpasswd -c /etc/httpd/passwd liwh #生成密码文件,添加一个名为liwh的用户 htpasswd /etc/httpd/passwd liangjm #往密码文件追加一个用户liangjm #2.修改个人用户主页功能的配置文件 vim /etc/httpd/conf.d/userdir.conf ... 31 32 AllowOverride all #允许伪静态技术 33 authuserfile "/etc/httpd/passwd" #指定生成的密码文件的存放路径 34 authname "Hello" #当用户尝试访问个人用户网站时的提示信息 35 authtype basic #采用基本验证方式 36 require user mumu #指定用户进行账户密码认证时支持验证的用户(可以支持多个用户验证,比如:mumu,haha) 37 #3.重启httpd服务,刷新页面,会弹出窗口要求输入账户密码。其中liwh的帐号密码是没用的,只能用liangjm账号密码验证 systemctl restart httpdSElinux的防火墙:配置文件vim /etc/selinux/config 前提配置单网卡 [zhuxing@caoxinyang wwwroot]$ cd ~ [zhuxing@caoxinyang ~]$ mkdir -p public_html [zhuxing@caoxinyang ~]$ cd public_html/ [zhuxing@caoxinyang public_html]$ echo "张怡蓉5211baby" > index.html [zhuxing@caoxinyang public_html]$ cd ~ [zhuxing@caoxinyang ~]$ chmod -Rf 755 public_html/ [zhuxing@caoxinyang ~]$ ls -ald public_html/ drwxr-xr-x. 2 zhuxing zhuxing 23 Nov 2 06:58 public_html/ [zhuxing@caoxinyang ~]$ cd [zhuxing@caoxinyang ~]$ su Password: [root@caoxinyang zhuxing]# systemctl restart httpd [root@caoxinyang zhuxing]# getsebool -a | grep httpd_en httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off [root@caoxinyang zhuxing]# setsebool -P httpd_enable_homedirs=on [root@caoxinyang zhuxing]# getsebool -a | grep httpd_en httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> on [root@caoxinyang zhuxing]# setenforce 1 [root@caoxinyang zhuxing]# htpasswd -c /etc/httpd/passwd zhuxing New password: Re-type new password: Adding password for user zhuxing systemctl restart httpd利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是,该技术无法实现目前云主机技术的硬件资源隔离,让这些虚拟的服务器共同使用物理服务器的硬件资源,供应商只能限制硬盘的使用空间大小。出于各种考虑的因素(主要是价格低廉),目前依然有很多企业或个人站长在使用虚拟主机的形式来部署网站。 Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术,如图所示,用户请求的资源不同,最终获取到的网页内容也各不相同。 在配置虚拟网站主机功能前,做些基本设置:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中要有明确区分不同网站内容的信息,以便能更直观地检查效果。由前面实例可知,目录/home/wwwroot及其下级目录和文件一定会受到SELinux安全上下文的制约,要修改相关内目录及其里面所有文件的SELinux安全上下文,并让设置立即生效 mkdir -p /home/wwwroot/10 mkdir -p /home/wwwroot/20 mkdir -p /home/wwwroot/30 echo "This is 10" > /home/wwwroot/10/index.html echo "This is 20" > /home/wwwroot/20/index.html echo "This is 30" > /home/wwwroot/30/index.html 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/20 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30 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/30/* restorecon -Rv /home/wwwroot1.为网卡配置3个ip地址 ,基于IP vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 ... IPADDR0=192.168.11.14 IPADDR1=192.168.11.15 IPADDR2=192.168.11.16 PREFIX=24 #2.编辑httpd服务的主配置文件,追加写入3个基于IP地址的虚拟主机网站参数 vim /etc/httpd/conf/httpd.conf ... 113 documentroot /home/wwwroot/10 servername www.a.com allowoverride none require all granted DocumentRoot /home/wwwroot/20 ServerName www.b.com AllowOverride None Require all granted DocumentRoot /home/wwwroot/30 ServerName www.c.com AllowOverride None Require all granted #3.重启httpd服务,在浏览器分别输入相应的ip地址进行验证。 systemctl restart httpd
设置Apache访问控制,使得只有ip地址为192.168.10.1或使用火狐浏览器的客户端才能访问指定的网页。 #1.在默认网站数据目录新建一个子目录,并在该子目录创建一个首页文件。 mkdir /var/www/html/server echo "NB" > /var/www/html/server/index.html #2.修改httpd服务的主配置文件,编辑规则限制源主机的访问。 vim /etc/httpd/conf/httpd.conf ... 129 #针对该子目录的权限设置 130 SetEnvIf User-Agent "Firefox" ff=1 #设置环境变量,相当于ff="用户通过Firefox访问" 131 Order allow,deny #先匹配允许规则再匹配拒绝规则 132 Deny from 192.168.10.55 #拒绝ip地址为192.168.10.55的主机访问 133 Allow from env=ff #允许使用火狐浏览器的人访问 134 Allow from 192.168.10.1 #允许ip地址192.168.10.1的主机访问 135 ... #3.重启httpd服务 systemctl restart httpd |
CopyRight 2018-2019 实验室设备网 版权所有 |