时间:2023-06-30 23:48:01 | 来源:网站运营
时间:2023-06-30 23:48:01 来源:网站运营
linux入门系列18--Web服务之Apache服务1:前面系列文章讲解了Linux下通过文件传输、文件共享、邮件系统来分享和获取资源,本文讲解网络资源获取和共享的另外一种形式,通过Apache服务程序来提供Web服务。需要注意的是,在CentOS和RHEL上,Apache软件包和服务称为httpd而非apache。
[root@apache ~]# rpm -q httpdpackage httpd is not installed[root@apache ~]# yum install httpdLoaded plugins: fastestmirror, langpacks...省略部分内容Complete![root@apache ~]# rpm -q httpdhttpd-2.4.6-90.el7.centos.x86_64[root@apache ~]#
安装完成后,httpd服务是没有启动的,还需要将其启动,并加入到开机启动中[root@apache ~]# systemctl start httpd[root@apache ~]# systemctl enable httpdln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'[root@apache ~]#
此时在虚拟机Centos内部,打开浏览器,即可看到apache部署成功[root@apache ~]# firewall-cmd --permanent --zone=public --add-service=httpsuccess[root@apache ~]# firewall-cmd --permanent --zone=public --add-service=httpssuccess[root@apache ~]# firewall-cmd --reload success[root@apache ~]#
这样宿主机上也可以直接访问该Web,如下图[root@apache ~]# httpd -vServer version: Apache/2.4.6 (CentOS)Server built: Aug 8 2019 11:41:18[root@apache ~]#
[root@apache ~]# systemctl status httpdhttpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) Active: active (running) since Mon 2020-02-10 10:52:35 CST; 7min ago Docs: man:httpd(8) man:apachectl(8)...省略部分内容
[root@apache ~]# vim /etc/httpd/conf/httpd.conf
如果忘记VI或VIM编辑器使用方法的,请返回复习前面的文章:“linux入门系列4--vi&vim编辑器”。
[root@apache ~]# ll /var/www/html/total 0[root@apache ~]# echo "hi,this is heimatengyun's blog">/var/www/html/index.html[root@apache ~]# ll /var/www/html/total 4-rw-r--r--. 1 root root 31 Feb 10 11:59 index.html[root@apache ~]#
在宿主机通过浏览器再次查看,即可查看刚才新加的网页文件内容[root@apache /]# mkdir /website[root@apache /]# cd /website/[root@apache website]# echo "this is my custom directory">index.html[root@apache website]# lltotal 4-rw-r--r--. 1 root root 28 Feb 10 12:21 index.html[root@apache website]#
(2)主配置文件中配置目录[root@apache website]# vim /etc/httpd/conf/httpd.conf
[root@apache website]# systemctl restart httpd
在宿主机中浏览器查看一般情况只有网站的首页页面文件不存在或用户权限不足时,才显示httpd默认的页面。比如后文的4.1,设置禁止的ip访问后,就直接跳转到此页面。我们在加上文件名试下呢
[root@apache website]# getenforce Enforcing[root@apache website]# setenforce 0[root@apache website]# getenforce Permissive[root@apache website]#
再次在宿主机浏览器访问[root@apache website]# cat /etc/selinux/config# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:# enforcing - SELinux security policy is enforced.# permissive - SELinux prints warnings instead of enforcing.# disabled - No SELinux policy is loaded.SELINUX=enforcing# SELINUXTYPE= can take one of these two values:# targeted - Targeted processes are protected,# minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection.SELINUXTYPE=targeted [root@apache website]#
该文件中的值定义的是SELinux默认的运行状态,也就是系统重启后的状态,因此修改它不会立即生效。[root@apache website]# getenforce Enforcing[root@apache website]#
[root@apache website]# getenforce Enforcing[root@apache website]# setenforce 0[root@apache website]# getenforce Permissive[root@apache website]
因此,如果原来系统的SELinux是关闭的,如果要开启它,需要在配置文件中将进行设置SELINUX=enforcing,并同时要通过setenforce 1进行设置。这样即使系统重启,依然生效。[root@apache ~]# getsebool usage: getsebool -a or getsebool boolean...[root@apache ~]# getsebool -aabrt_anon_write --> offabrt_handle_event --> offabrt_upload_watch_anon_write --> onantivirus_can_scan_system --> off...省略部分内容
其中,on表示允许状态,off表示禁止状态。[root@apache ~]# getsebool -a | grep xdm_write_homexdm_write_home --> off[root@apache ~]# setsebool -P xdm_write_home=on[root@apache ~]# getsebool -a | grep xdm_write_homexdm_write_home --> on[root@apache ~]# setsebool -P xdm_write_home=off[root@apache ~]# getsebool -a | grep xdm_write_homexdm_write_home --> off[root@apache ~]# getsebool xdm_write_homexdm_write_home --> off
以上实验,我们先查看grep xdm_write_home状态,然后将其改为on,查看修改是否生效,然后再将其改回原值。查看某一项的值可以通过正则匹配,也可以直接通过该具体项获取。[root@apache website]# ll -Z /var/www/html/-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html[root@apache website]# ll -Z /website/-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html[root@apache website]#
我们通过ll命令的-Z参数进行查看,很明显就看到了不同。(-Z参数专门用于查看SELinux域相关设置)[root@apache website]# ll -Z /var/www/html/-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html[root@apache website]# ll -Z /website/-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html[root@apache website]# semanage fcontext -a -t httpd_sys_content_t /website[root@apache website]# semanage fcontext -a -t httpd_sys_content_t /website/*[root@apache website]# ll -Z /website/-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html[root@apache website]# restorecon -Rv /website/restorecon reset /website context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0restorecon reset /website/index.html context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0[root@apache website]# ll -Z /website/ -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html[root@apache website]#
需要注意的是,设置上下文值后并非立即生效,还需要执行restorecon才会生效,过程如上,请自行体验。本案例演示了SELinux上下文对资源的限制导致的web不能访问,以及设置上下文值。
[root@apache website]# vim /etc/httpd/conf.d/userdir.conf
[root@apache website]# useradd heima[root@apache website]# echo "123456" | passwd --stdin heimaChanging password for user heima.passwd: all authentication tokens updated successfully.[root@apache website]# su - heima[heima@apache ~]$ ls[heima@apache ~]$ pwd/home/heima[heima@apache ~]$ mkdir public_html[heima@apache ~]$ echo "this is heima's website">public_html/index.html[heima@apache ~]$ ll public_html/total 4-rwxrwxr-x. 1 heima heima 24 Feb 10 16:11 index.html[heima@apache ~]$ chmod -Rf 775 /home/heima/
另外,还需要把家目录的权限修改为755,保证其他人也有权限读取里面的内容。[root@apache ~]# systemctl restart httpd
访问地址为ip/~用户名,其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格。我们回想一下,这个现象和案例1遇到的症状有几分相似,当时是因为我们新建了一个目录/website,而没有设置SELinux上下文所导致。那这次是不是也是因为SELinux的上下文导致呢?
[heima@apache ~]$ ll -Z /home/heima/drwxrwxr-x. heima heima unconfined_u:object_r:httpd_user_content_t:s0 public_html[heima@apache ~]$
对吧,很明显不是SELinux上下文导致,因为httpd默认就给用户目录添加了上下文值。[root@apache ~]# getsebool httpd_enable_homedirshttpd_enable_homedirs --> off[root@apache ~]# setsebool httpd_enable_homedirs=on[root@apache ~]#
此时,我们再次访问,即可正常访问了。[root@apache ~]# htpasswd -c /etc/httpd/passed heimaNew password: Re-type new password: Adding password for user heima[root@apache ~]#
注意,文件名任意取,在下一步中保持一致即可,-c参数表示第一次生成。设置密码为888888,以区别之前heima用户登录系统的密码123456,这样做的目的是为了区分说明不此处设置的密码不是用户登录系统的密码。[root@apache ~]# vim /etc/httpd/conf.d/userdir.conf <Directory "/home/*/public_html"># AllowOverride FileInfo AuthConfig Limit Indexes# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec# Require method GET POST OPTIONS AllowOverride all authuserfile "/etc/htppd/passed" authname "heima website" authtype basic require user heima Require method GET POST OPTIONS</Directory>
将文末的内容注释并按如下进行修改即可[root@apache ~]# systemctl restart httpd
再次访问,就要求输入密码了。这个案例演示了SELinux域对进程的控制,以及如何对其进行设置。
关键词:服务,入门,系列