2021-11-09

SSH与Apache

9.3 不间断会话服务

Terminal Multiplexer(终端复用器,简称为Tmux)是一款能够实现多窗口远程控制的开源服务程序。解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序。
用户还可以使用Tmux服务程序同时在多个远程会话中*切换,能够实现如下功能。
会话恢复:即便网络中断,也可让会话随时恢复,确保用户不会失去对远程会话的控制。
多窗口:每个会话都是独立运行的,拥有各自独立的输入输出终端窗口,终端窗口内显示过的信息也将被分开隔离保存,以便下次使用时依然能看到之前的操作记录。
会话共享:当多个用户同时登录到远程服务器时,便可以使用会话共享功能让用户之间的输入输出信息共享。
在RHEL 8系统中,默认没有安装Tmux服务程序

9.3.1 管理远程会话

tmux命令进入会话窗口中。
会话窗口的编号是从0开始自动排序(即0、1、2、3、……),会话窗口数量少的时候还没关系,数量多的时候区分起来就很麻烦了。接下来创建一个指定名称为backup的会话窗口。
[root@linuxprobe ~]# tmux new -s backup
可以用detach参数将会话隐藏到后台。
[root@linuxprobe ~]# tmux detach
查看一下后台有哪些会话
[root@linuxprobe ~]# tmux ls
回归到backup会话中的方法,直接在tmux命令后面加attach和会话编号或会话名称
[root@linuxprobe ~]# tmux attach -t backup
不再需要使用这个Tmux会话了,而是可以直接使用kill命令杀死这个会话。
[root@linuxprobe ~]# tmux attach -t backup

9.3.2 管理多窗格

Tmux服务有个多窗格功能,能够把一个终端界面按照上下或左右进行切割,从而使得能同时做多件事情。
可以同时按下“Ctrl + B +方向键”调整窗格的尺寸。
Tmux不间断会话多窗格切换命令
命令 作用
tmux select-pane -U 切换至上方的窗格
tmux select-pane -D 切换至下方的窗格
tmux select-pane -L 切换至左方的窗格
tmux select-pane -R 切换至右方的窗格
Tmux不间断会话多窗格互换命令
命令 作用
tmux swap-pane -U 将当前窗格与上方的窗格互换
tmux swap-pane -D 将当前窗格与下方的窗格互换
tmux swap-pane -L 将当前窗格与左方的窗格互换
tmux swap-pane -R 将当前窗格与右方的窗格互换
Tmux服务为用户提供了一系列快捷键来执行窗格的切换。方法是先同时按下Ctrl+B组合键,然后松手后再迅速按下其他后续按键
Tmux会话窗格相关的常用快捷键
快捷键 作用
% 划分左右两个窗格
" 划分上下两个窗格
<方向键> 切换到上下左右相邻的一个窗格
; 切换至上一个窗格
o 切换至下一个窗格
{ 将当前窗格与上一个窗格位置互换
} 将当前窗格与下一个窗格位置互换
x 关闭窗格
! 将当前窗格拆分成独立窗口
q 显示窗格编号

9.3.3 会话共享功能

会话共享功能,当多个用户同时控制服务器的时候,它可以把服务器屏幕内容共享出来。
首先使用ssh服务将客户端A远程连接到服务器,随后使用Tmux服务创建一个新的会话窗口,名称为share:
[root@client A ~]# ssh 192.168.10.10
[root@client A ~]# tmux new -s share
使用ssh服务将客户端B也远程连接到服务器,并执行获取远程会话的命令。
[root@client B ~]# ssh 192.168.10.10
[root@client B ~]# tmux attach-session -t share

9.4 检索日志信息

Linux系统拥有十分强大且灵活的日志系统,用于保存几乎所有的操作记录和服务运行状态,并且按照“报错”“警告”“提示”和“其他”等标注进行了分类。
在RHEL 8系统中,默认的日志服务程序是rsyslog。可以将rsyslog理解成之前的syslogd服务的增强版本,它更加注重日志的安全性和性能指标。为了便于日后的检索,不同的日志信息会被写入到不同的文件中。
常见的日志文件保存路径
文件路径及命令 作用
/var/log/boot.log 系统开机自检事件及引导过程等信息
/var/log/lastlog 用户登录成功时间、终端名称及IP地址等信息
/var/log/btmp 记录登录失败的时间、终端名称及IP地址等信息
/var/log/messages 系统及各个服务的运行和报错信息
/var/log/secure 系统安全相关的信息
/var/log/wtmp 系统启动与关机等相关信息
从理论上讲,日志文件分为下面3种类型。
系统日志:主要记录系统的运行情况和内核信息。
用户日志:主要记录用户的访问信息,包含用户名、终端名称、登入及退出时间、来源IP地址和执行过的操作等。
程序日志:稍微大一些的服务一般都会保存一份与其同名的日志文件,里面记录着服务运行过程中各种事件的信息;每个服务程序都有自己独立的日志文件,且格式相差较大。
journalctl命令用于检索和管理系统日志信息,英文全称为“journal control”,语法格式为“journalctl参数”。它可以根据事件、类型、服务名称等信息进行信息检索,从而大大提高了日常排错的效率。
journalctl命令中常用按键以及作用
参数 作用
-k 内核日志
-b 启动日志
-u 指定服务
-n 指定条数
-p 指定类型
-f 实时刷新(追踪日志)
–since 指定时间
–disk-usage 占用空间
在rsyslog服务程序中,日志根据重要程度被分为9个等级
日志信息登记分类
日志等级 说明介绍
emerg 系统出现严重故障,内核崩溃等情况
alert 应立即修复的故障,数据库损坏等情况
crit 危险较高的故障,硬盘损坏导致程序运行失败的情况
err 一般危险的故障,某个服务启动或运行失败的情况
warning 警告信息,某个服务参数或功能错误的情况
notice 一般无危险的故障,只是需要处理的情况
info 通用性消息,给用户提示一些有用信息
debug 调试程序所产生的信息
none 没有优先级,不做日志记录
如果只想看系统中较高级别的报错信息,可以在journalctl命令中用-p参数进行指定:
[root@linuxprobe ~]# journalctl -p crit
我们不仅能够根据日志等级进行检索,还可以用–since参数按照今日(today)、近N小时(hour)、指定时间范围的格式进行检索,找出最近的日志数据。
仅查询今日的日志信息:
[root@linuxprobe ~]# journalctl --since today
查询指定服务的日志信息。在默认情况下,所有的日志信息都是混在一起的。如果想看具体某项服务的日志信息,可以使用_SYSTEMD_UNIT参数进行查询,服务名称的后面要有“.service”,这是标准服务名称的写法。
[root@linuxprobe ~]# journalctl -u sshd

10.1 网站服务程序

Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户。
目前能够提供Web网络服务的程序有IIS、Nginx和Apache等。其中,IIS(Internet Information Service,互联网信息服务)是Windows系统中默认的Web服务程序,这是一款图形化的网站管理工具,不仅可以提供Web网站服务,还可以提供FTP、NMTP、SMTP等服务。但是,IIS只能在Windows系统中使用
Nginx最被认可的还是其系统资源消耗低且并发能力强的特性
Apache其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。Apache服务程序可以运行在Linux系统、UNIX系统甚至是Windows系统中,它支持基于IP、域名及端口号的虚拟主机功能,支持多种认证方式,集成有代理服务器模块、安全Socket层(SSL),能够实时监视服务状态与定制日志消息,并支持各类丰富的模块。
安装APACHE
第1步:把系统镜像挂载到/media/cdrom目录。
第2步:使用Vim文本编辑器创建软件仓库的配置文件
第3步:动手安装Apache服务程序。
第4步:启用httpd服务程序并将其加入到开机启动项中,使其能够随系统开机而运行,从而持续为用户提供Web服务。
在浏览器的地址栏中输入http://127.0.0.1并按回车键,就可以看到用于提供Web服务的默认页面

10.2 配置服务文件参数

httpd服务程序的主要配置文件及存放位置
Linux系统中的配置文件
作用 文件名称
服务目录 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
网站数据目录 /var/www/html
访问日志 /var/log/httpd/access_log
错误日志 /var/log/httpd/error_log
主配置文件中保存的是最重要的服务参数,一般会被保存到/etc目录中以软件名称命名的一个文件夹之中,名字为“服务名称.conf”,例如这里的“/etc/httpd/conf/httpd.conf”
在httpd服务程序的主配置文件中,存在3种类型的信息:注释行信息、全局配置、区域配置
2021-11-09
全局配置参数就是一种全局性的配置参数,可作用于所有的子站点,既保证了子站点的正常访问,也有效降低了频繁写入重复参数的工作量。区域配置参数则是单独针对每个独立的子站点进行设置的。
配置httpd服务程序时最常用的参数以及用途描述
参数 作用
ServerRoot 服务目录
ServerAdmin 管理员邮箱
User 运行服务的用户
Group 运行服务的用户组
ServerName 网站服务器的域名
DocumentRoot 网站数据目录
Listen 监听的IP地址与端口号
DirectoryIndex 默认的索引页页面
ErrorLog 错误日志文件
CustomLog 访问日志文件
Timeout 网页超时时间,默认为300秒
DocumentRoot参数用于定义网站数据的保存路径,其参数的默认值是/var/www/html(即把网站数据存放到这个目录中);而当前网站普遍的首页面名称是index.html,因此可以向/var/www/html/index.html文件中写入一段内容,替换掉httpd服务程序的默认首页面。该操作会立即生效。

如果想要修改文件默认保存位置
第1步:建立网站数据的保存目录,并创建首页文件。
[root@linuxprobe ~]# mkdir /home/wwwroot
第2步:打开httpd服务程序的主配置文件,将约第122行用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot,同时还需要将约第127行与第134行用于定义目录权限的参数Directory后面的路径也修改为/home/wwwroot。

[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf 
………………省略部分输出信息………………
117 #
118 # DocumentRoot: The directory out of which you will serve your
119 # documents. By default, all requests are taken from this directory, but
120 # symbolic links and aliases may be used to point to other locations.
121 #
122 DocumentRoot "/home/wwwroot"
123 
124 #
125 # Relax access to content within /var/www.
126 #
127 <Directory "/home/wwwroot">
128     AllowOverride None
129     # Allow open access:
130     Require all granted
131 </Directory>
132 
133 # Further relax access to the default document root:
134 <Directory "/home/wwwroot">
………………省略部分输出信息………………

第3步:重新启动httpd服务程序并验证效果

10.3 SELinux安全子系统

SELinux(Security-Enhanced Linux)是美国国家安全局在Linux开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安全子系统。Linux系统使用SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。
SELinux服务有3种配置模式,具体如下。
enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
permissive:遇到服务越权访问时,只发出警告而不强制拦截。
disabled:对于越权的行为不警告也不拦截。
修改selinux为enforcing
[root@linuxprobe ~]# vim /etc/selinux/config
SELINUX=enforcing
SELinux服务的主配置文件中,定义的是SELinux的默认运行状态,可以将其理解为系统重启后的状态,因此它不会在更改后立即生效。可以使用getenforce命令获得当前SELinux服务的运行模式:
[root@linuxprobe ~]# getenforce
可以用setenforce [0|1]命令修改SELinux当前的运行模式(0为禁用,1为启用)。注意,这种修改只是临时的,在系统重启后就会失效:[root@linuxprobe ~]# setenforce 0
[root@linuxprobe ~]# getenforce
Permissive
在ls命令中,-Z参数用于查看文件的安全上下文值,-d参数代表对象是个文件夹。

[root@linuxprobe ~]# setenforce 1
[root@linuxprobe ~]# ls -Zd /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
[root@linuxprobe ~]# ls -Zd /home/wwwroot
drwxrwxrwx. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot

在文件上设置的SELinux安全上下文是由用户段、角色段以及类型段等多个信息项共同组成的。其中,用户段system_u代表系统进程的身份,角色段object_r代表文件目录的角色,类型段httpd_sys_content_t代表网站服务的系统文件
需要使用semanage命令,将当前网站目录/home/wwwroot的SELinux安全上下文修改为跟原始网站目录的一样就行了。
semanage命令用于管理SELinux的策略,英文全称为“SELinux manage”
SELinux服务极大地提升了Linux系统的安全性,将用户权限牢牢地锁在笼子里。semanage命令不仅能够像传统的chcon命令那样设置文件、目录的策略,还能够管理网络端口、消息接口(这些新特性将在本章后文中涵盖)。使用semanage命令时,经常用到的几个参数及其作用
semanage命令中常用参数以及作用

参数 作用
-l 查询
-a 添加
-m 修改
-d 删除

向新的网站数据目录中新添加一条SELinux安全上下文,让这个目录以及里面的所有文件能够被httpd服务程序访问到:

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*

在执行上述设置之后,还无法立即访问网站,还需要使用restorecon命令将设置好的SELinux安全上下文立即生效。在使用restorecon命令时,可以加上-Rv参数对指定的目录进行递归操作,以及显示SELinux安全上下文的修改过程
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/

10.4 个人用户主页功能

如果想在系统中为每位用户建立一个独立的网站,httpd服务程序提供的个人用户主页功能完全可以胜任这个工作。该功能可以让系统内所有的用户在自己的家目录中管理个人的网站,而且访问起来也非常容易。
第1步
在httpd服务程序中,默认没有开启个人用户主页功能。为此,我们需要编辑下面的配置文件,然后在第17行的UserDir disabled参数前面加上井号(#),表示让httpd服务程序开启个人用户主页功能;同时再把第24行的UserDir public_html参数前面的井号(#)去掉(UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录)。
第2步:在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把家目录的权限修改为755,保证其他人也有权限读取里面的内容。

[root@linuxprobe home]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ mkdir public_html
[linuxprobe@linuxprobe ~]$ echo "This is linuxprobe's website" > public_html/index.html
[linuxprobe@linuxprobe ~]$ chmod -R 755 /home/linuxprobe

第3步:重新启动httpd服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格)。
getsebool命令查询并过滤出所有与HTTP协议相关的安全策略。其中,off为禁止状态,on为允许状态。
可以用setsebool命令来修改SELinux策略中各条规则的布尔值了。记得在setsebool命令后面加上-P参数,让修改后的SELinux策略规则永久生效且立即生效。
[root@linuxprobe ~]# setsebool -P httpd_enable_homedirs=on

通过身份验证的用户看到里面的内容,这时就可以在网站中添加密码功能了。
第1步:先使用htpasswd命令生成密码数据库。-c参数表示第一次生成;后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地账户)。
[root@linuxprobe ~]# htpasswd -c /etc/httpd/passwd linuxprobe
第2步:继续编辑个人用户主页功能的配置文件。把第31~37行的参数信息修改成下列内容,其中以井号(#)开头的内容为添加的注释信息,可将其忽略。随后保存并退出配置文件,重启httpd服务程序即可生效。

[root@linuxprobe ~]# vim /etc/httpd/conf.d/userdir.conf
 31 <Directory "/home/*/public_html">
 32     AllowOverride all 
        #刚刚生成出的密码验证文件保存路径
 33     authuserfile "/etc/httpd/passwd" 
        #当用户访问网站时的提示信息
 34     authname "My privately website"
        #验证方式为口令模式
 35     authtype basic
        #访问网站时需要验证的用户名称
 36     require user linuxprobe
 37 </Directory>
 
 [root@linuxprobe ~]# systemctl restart httpd
上一篇:2021-11-09


下一篇:2021-11-09