注:本内容的实验环境为Centos 7,写本文的目的:1、给自己的学习,增加一份笔记,记忆;2、作为开源的精神,在此分享给所有学习Linux的同学。
第1步:把系统光盘中的系统镜像挂载到/media/cdrom目录。(或者你可以直接将光盘的内容直接复制到指定目录)
~]# mkdir -p /media/cdrom
~]# mount /dev/cdrom /media/cdrom
第2步:使用Vim文本编辑器创建Yum仓库的配置文件
~]# vim /etc/yum.repos.d/rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
第3步:动手安装Apache服务程序。注意,使用yum命令进行安装时,跟在命令后面的Apache服务的软件包名称为httpd。如果直接执行yum install apache命令,则系统会报错。
~]# yum install httpd
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分输出信息………………
第4步:启用httpd服务程序并将其加入到开机启动项中,使其能够随系统开机而运行,从而持续为用户提供Web服务:
~]# systemctl status httpd
~]# systemctl start httpd
~]# systemctl status httpd
~]# systemctl enable httpd
大家在浏览器(这里以Firefox浏览器为例)的地址栏中输入目标终端的ip并按回车键,就可以看到用于提供Web服务的httpd服务程序的默认页面了
第5步:在安装完成后,大家可以尝试用这几个命令查看一下安装关于本机上的httpd的信息
~]#rpm -qi httpd #包信息
~]#rpm -qc httpd #配置文件
~]#rpm -ql httpd #安装完成后生成的所有文件列表
~]#rpm -qd httpd #生成的相关说明文档
接下来放上几张表:
配置文件的名称 |
存放位置 |
服务目录 |
/etc/httpd |
主配置文件 |
/etc/httpd/conf/httpd.conf |
网站数据目录 |
/var/www/html |
访问日志 |
/var/log/httpd/access_log |
错误日志 |
/var/log/httpd/error_log |
上面的这张表的内容是根据上面4条rpm包查询命令的查询结果得出。在这里我们只讲比较常用的。
配置httpd.conf服务程序时最常用的参数以及用途描述
参数 |
用途 |
ServerRoot |
服务目录 |
ServerAdmin |
管理员邮箱 |
User |
运行服务的用户 |
Group |
运行服务的用户组 |
ServerName |
网站服务器的域名 |
DocumentRoot |
网站数据目录 |
Directory |
网站数据目录的权限 |
Listen |
监听的IP地址与端口号 |
DirectoryIndex |
默认的索引页页面 |
ErrorLog |
错误日志文件 |
CustomLog |
访问日志文件 |
Timeout |
网页超时时间,默认为300秒 |
如果想在系统中为每位用户建立一个独立的网站,通常的方法是基于虚拟网站主机功能来部署多个网站。但这个工作会让管理员苦不堪言(尤其是用户数量很庞大时),而且在用户自行管理网站时,还会碰到各种权限限制,需要为此做很多额外的工作。其实,httpd服务程序提供的个人用户主页功能完全可以以胜任这个工作。该功能可以让系统内所有的用户在自己的家目录中管理个人的网站,而且访问起来也非常容易。
第1步:在httpd服务程序中,默认没有开启个人用户主页功能。为此,我们需要编辑下面的配置文件,然后在第17行的UserDir disabled参数前面加上井号(#),表示让httpd服务程序开启个人用户主页功能;同时再把第24行的UserDir public_html参数前面的井号(#)去掉(UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录)。最后,在修改完毕后记得保存。
~]# vim /etc/httpd/conf.d/userdir.conf
第2步:建立用于保存网站数据的目录及首页面文件(/var/www/public_html)。另外,还需要把家目录的权限修改为755,保证其他人也有权限读取里面的内容。
~]$ mkdir public_html
~]$ echo "this is private website" > public_html/
index.html
~]$ chmod -Rf 755 /home/zj
第3步:重新启动httpd服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格),从理论上来讲就可以看到用户的个人网站了。不出所料的是,系统显示报错页面,这一定还是SELinux惹的祸。
第4步:思考这次报错的原因是什么。httpd服务程序在提供个人用户主页功能时,该用户的网站数据目录本身就应该是存放到与这位用户对应的家目录中的,所以应该不需要修改家目录的SELinux安全上下文。但是,前文还讲到了Linux域的概念。Linux域确保服务程序不能执行违规的操作,只能本本分分地为用户提供服务。httpd服务中突然开启的这项个人用户主页功能到底有没有被SELinux域默认允许呢?
接下来使用getsebool命令查询并过滤出所有与HTTP协议相关的安全策略。其中,off为禁止状态,on为允许状态。
~]# getsebool -a | grep http
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off #主要关注这一行
~]# setsebool -P httpd_enable_homedirs=on
前者是默认目录的网页、后者是个人目录的网页。
有时,网站的拥有者并不希望直接将网页内容显示出来,只想让通过身份验证的用户访客看到里面的内容,这时就可以在网站中添加口令功能了。
第1步:先使用htpasswd命令生成密码数据库。-c参数表示第一次生成;后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地账户)。
~]# htpasswd -c /etc/httpd/passwd zj
New password:此处输入用于网页验证的密码
Re-type new password:再输入一遍进行确认
Adding password for user zj
第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
32 AllowOverride all
33 authuserfile "/etc/httpd/passwd"
34 authname "My privately website"
35 authtype basic
36 require user linuxprobe
37
~]# systemctl restart httpd
此后,当用户再想访问某个用户的个人网站时,就必须要输入账户和密码才能正常访问了。另外,验证时使用的账户和密码是用htpasswd命令生成的专门用于网站登录的口令密码,而不是系统中的用户密码,请不要搞错了。