在实验环境中,我们不会去关注apache的优化,但是如果要用于生产环境中,必须要对apahe进行优化后,才可以上线进行服务,不然会出现很多问题:如安全性,不方便查看日志等等
一台centos7主机IP192.168.1.11 纯净就可以,配置好yum源,如有需要软件包,我后面会提供百度云
1)查看默认自己的版本信息
2)隐藏apache版本信息
只有源码安装中的编译过程,才可以修改apache版本信息,我们先来源代码安装apahe
1.上传并解压httpd软件包
2.修改ap_release.h参数以隐藏版本信息
3.源码安装上apache服务
1)先把刚刚yum安装的httpd服务删除了
[root@apache httpd-2.4.38]# yum -y remove httpd
2)安装编译环境
[root@apache httpd-2.4.38]# yum -y install gcc gcc-c++ apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre openssl*
3)编译并安装
[root@apache httpd-2.4.38]# https://blog.csdn.net/weixin_45308292/article/details/configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-ssl --enable-mpms-shared=all
这里解释一下参数
–enable-so :
–enable-rewrite:
–enable-charset-lite:
–enable-cgi:
–enable-ssl:
–enable-mpms-shared=all:
[root@apache httpd-2.4.38]# make && make install
6)启动服务
[root@apache ~]# systemctl start apache
[root@apache ~]# netstat -anpt | grep 80
7)添加环境变量path,以便可以随时使用apache的命令
[root@apache ~]#ln -s /usr/local/httpd/bin/* /usr/local/bin/
3)测试隐藏版本信息效果
4)彻底隐藏版本号
5)测试最终结果
1)查看并修改apache默认用户
1.查看apache默认用户
虽然daemon没有系统登陆的权限,但是好多服务默认都是daemon用户,如黑客获取了daemon用户权限有可能会破坏其他服务,所以我们要给apache创建一个单独用户
2.修改apache默认用户为apache
[root@apache ~]# cat /etc/passwd | grep apache
2)权限分离
在实验环境中一般使用root用户,或单一用户给予关于其服务的全部权限,可是这样在实际生产完全性非常低,一旦有入侵者攻破这一用户,那整个网站服务和其中的数据,也就任其所为了
1.先设置一些重要目录的属主属组,之后再进行细分
1)将整个apache目录属主属组设为apache
[root@apache ~]# chown -R apache:apache /usr/local/httpd/
2)再单独给于daemon用户,让daemon用户拥有对应权限
[root@apache ~]# chown -R daemon:daemon /usr/local/httpd/htdocs/
[root@apache ~]# ll /usr/local/httpd/htdocs/
#这里可以发现apache对其也只有读权限,一定程度分离了权限
2.网页与目录文件快速赋权
在网站的站点目录,也就是/usr/local/httpd/htdocs,会存在目录或文件,我们需要给予对应的权限
1.设置此目录下所有文件的权限为644
[root@apache ~]# find /usr/local/httpd/htdocs -type f -exec chmod 644 {} ;
-type后面的f就是文件的意思,-exec 是要执行的命令,{} 是将find的结果 执行前面的chmod命令
[root@apache ~]# ll /usr/local/httpd/htdocs/index.html
2.设置此目录下所以目录的权限为755
先再htdocs目录下,创建一个目录,方便看效果
[root@apache ~]# mkdir /usr/local/httpd/htdocs/directory
[root@apache ~]# find /usr/local/httpd/htdocs -type d -exec chmod 755 {} ;
-d是目录的意思
[root@apache ~]# ll -d /usr/local/httpd/htdocs/directory/
#这个属组的s暂且不管,总之现在属组也有x执行权限,通过getfacl命令查看
[root@apache ~]# getfacl /usr/local/httpd/htdocs/directory/
#这行就是属组的权限
3.日志文件单独授权为root用户,提高安全
[root@apache ~]# chown -R root:root /usr/local/httpd/logs/
[root@apache ~]# ll -d /usr/local/httpd/logs/access_log
其他用户也仅有读取权限
4.重启服务,保证权限配置正确,用户依然可以正常访问
apache默认开启目录浏览功能,意思就是/usr/local/httpd/htdocs中如果不存在index.html文件,就显示这个目录下的目录结构
如果index.html文件为空不会显示目录结构
如果存在其他html文件,但不是index.html也会显示目录结构
1.在htdocs目录下创建测试目录与文件
[root@apache ~]# echo > /usr/local/httpd/htdocs/123.html
[root@apache ~]# mkdir /usr/local/httpd/htdocs/{dir1,dir2}
[root@apache ~]# ls /usr/local/httpd/htdocs/
2.移走index.html
[root@apache ~]# mv /usr/local/httpd/htdocs/index.html /opt/
3.测试,可以看到目录结构
4.修改配置文件,取消此功能
[root@apache ~]# systemctl restart apache
5.测试
默认不进行日志切割,日志都是在一个文件中,很不方便查看如果不进行日志切割无法进行定期清理日志,造成资源浪费
1)使用apache系统自动切割工具rotatelogs
1.先修改主配值文件
这里解释一下其中的参数
|:
-l:
%Y%m%d:
86400:
2.更改正确日志位置
[root@apache ~]# systemctl restart apache
Job for apache.service failed because the control process exited with error code. See “systemctl status apache.service” and “journalctl -xe” for details.
[root@apache ~]# systemctl restart apache
4.测试rotatelogs工具效果
1.先测试错误日志
[root@apache ~]# ls /usr/local/httpd/logs/
可以看到,已经有错误日志,而且是当前的日期,另几个日志是没有开启日志分隔时的日志
[root@apache ~]# date
2.测试正确日志
这里是因为测试日志遍历,现在移动回来
[root@apache ~]# mv /opt/index.html /usr/local/httpd/htdocs/
客户访问机网页httpd://192.168.1.11时多次刷新
[root@apache ~]# ls /usr/local/httpd/logs/
2)使用cronolog进行日志切换
apache自带的切割工具容易造成数据丢失,因此我们一般使用第三方切割工具cronolog
1.上传cronolog工具并安装
链接:https://pan.baidu.com/s/1547EuH46lSQa-5sbf-IL-g
提取码:q6ij
2.查找安装到了哪里,/sbin下的那个是命令
[root@apache cronolog-1.6.2]# find / -name cronolog
3.这次使用虚拟主机做
[root@apache ~]# systemctl restart apache
2.添加一个I临时P(重启网卡会失效),做基于IP的虚拟主机
[root@apache ~]# ifconfig ens33:1 192.168.1.200
[root@apache ~]# ifconfig
4.创建配置文件中写的目录与默认首页
[root@apache ~]# mkdir -p /virtual/{logs,htdocs}
[root@apache ~]# echo > /virtual/htdocs/index.html
[root@apache ~]# systemctl restart apache
Job for apache.service failed because the control process exited with error code. See “systemctl status apache.service” and “journalctl -xe” for details.
[root@apache ~]# systemctl restart apache
5.测试效果
可以试一下
[root@apache ~]# date -s "2020-12-11"
这条命令修改系统时间
这时候,访问一次虚拟主机192.168.1.200
再回来看日志,已经多了一个
[root@apache logs]# ls
然后上面没有说一个问题,现在运行apache的用户是apache,正常说我们新创建的文件/virtual和下面的子文件夹,apache用户肯定没有写入权限,日志也就无法写入,