云计算学习笔记——日志、SELinux、FTP、systemd篇
《云计算学习日记Day15》—— 从零开始的云计算之旅
今天是系统学习云计算的第十五天,记录了关于我的云计算学习,后续将每日更新我的笔记。欢迎大家一起来学习,如果内容有遗漏和错误,还请大家多多指正和包涵,谢谢大家
因为前一节我们已经掌握了远程控制ssh的使用,所以之后我选择用windows的WindTerm来远程管理这些虚拟机,更加方便一些
关于远程管理,还可以补充一些内容:
1.tmux防止远程管理中断
简单描述一下,当我们在进行远程管理的时候,可能会因为突发情况(服务器停摆等)与远程主机断开连接,这样会导致我们正在进行的任务中断,进而造成任务失败、内存损失等。但是我们使用tmux可以保证我们意外断开连接时,当前任务继续完成
首先安装amux:yum -y install tmux
然后直接运行:
命令:tmux #进入tmux会话
2.tmux多窗口(多会话)
命令:tmux list-sessions #列出已有会话
命令:tmux kill-server #杀死所有会话
日志管理
日志概述
日志的功能
- 系统和程序的日记本
- 记录系统、程序运行中发生的各种事件
- 通过查看日志,了解及排除故障
- 信息安全控制的“依据”
内核及系统日志
- 由系统服务rsyslog统一记录/管理
- 日志消息采用文本格式
- 主要记录时间发生的时间、主机、进程、内容
- 常见的日志文件
日志文件 | 主要用途 |
---|---|
/var/log/messages | 记录内核消息、各种服务的公共消息 |
/var/log/cron | 记录与cron计划任务相关的消息 |
/var/log/maillog | 记录邮件收发相关的消息 |
/var/log/secure | 记录与访问限制相关的安全消息 |
用户日志
- 由登录程序负责记录/管理
- 日志消息采用二进制格式
- 记录登录用户的时间来源、执行的命令等信息
日志文件 | 主要用途 |
---|---|
/var/log/lastlog | 记录最近的用户登录事件 |
/var/log/wtmp | 记录成功的用户登录/注销事件 |
/var/log/btmp | 记录失败的用户登录事件 |
日志分析
查看文本日志消息
- 通用分析工具
- tail、tailf、less、grep等文本浏览/检索命令
- awk、sed等格式化过滤工具
- 专用工具分析
- ELK日志分析平台
- Elasticesearch、k'iba'na等日志统计套件
用户登录分析
- users、who、w命令
- 查看已登录的用户信息,详细度不同
- last、lastb命令
- 查看最近登录成功/失败的用户信息
日志消息的优先级
-
Linux内核定义的事件紧急程度
- 分为0~7,共八个优先级别
- 其数值越小,表示对应事件越紧急、越重要
EMERG | 告急 | 会导致主机系统不可用的情况 |
---|---|---|
ALERT | 警告 | 必须马上采取措施解决问题 |
CRIT | 严重 | 比较严重的情况 |
ERR | 错误 | 运行出现错误 |
WARNING | 提醒 | 可能会影响系统功能的事件 |
NOTICE | 注意 | 不会影响系统,但是值得注意 |
INFO | 信息 | 一般信息 |
DEBUG | 调试 | 程序或系统调试信息等 |
使用journalctl工具
- 提取由systemd-journal服务搜索的日志
- 主要包括内核/系统日志、服务日志
- 常见用法:
- journalctl | grep 关键词
- journalctl -u 服务名 [-p 优先级]
- journalctl -n 消息条数
SELinux
SELinux安全机制
SELInux概述
- Security-Enhanced Linux
- 美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系
- 集成到Linux内核(2.6及以上)中运行
- SELinux体系对用户、进程、目录和文件提供了预设的保护策略,以及管理工具
SELinux运行模式的切换
- SELinux的运行模式
- enforcing:强制模式
- permissive:宽松模式
- disabled:彻底禁用
- 切换运行模式:
- 临时切换:setenforce 1 | 0
- 查看当前模式:getenforce
- 固定配置:/etc/selinux/config文件
#查看现在的selinux运行模式
[root@test1 ~]# getenforce
Enforcing
[root@test1 ~]# setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]#进行临时修改
[root@test1 ~]# setenforce 0
[root@test1 ~]# getenforce
Permissive
那么有人会问:配置文件里面怎么改?
#首先查找配置文件里面的SELINUX
#找到的下面的第四条SELINUX=ecforcing就是配置信息
#要是想要改为宽松模式,只需要把enforcing改为permissive,然后重启即可
#要是想要改为彻底禁用,只需要把enforcing改为disabled,然后重启即可
[root@test1 ~]# grep SELINUX /etc/selinux/config
# SELINUX= can take one of these three values:
# NOTE: Up to RHEL 8 release included,
SELINUX=disabled would also
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
SELINUXTYPE=targeted
系统故障修复
故障排除
忘记root密码
解决思路
- 第一步:重启系统,进入救援模式
- 开机的时候按e键,进入页面后,将linux开头的那一行中的ro修改为rw(read only→read wirte)
- 还是在这一行,在最末尾的地方,添加rd.break
- 按快捷键ctrl + x启动,会看到switch_root:/#
- 第二步:切换到此环境
- switch_root:/# chroot /sysroot
- 第三步:将管理员root的密码进行重设
- 第四步:重设SELinux安全标签
- touch /.autorelabel #让SELinux失忆,或者修改SELinux模式,但是只能采取一种方式
- 第五步:前后执行reboot完成修复
- reboot -f #强制重新启动
系统文件损坏故障
主要问题:开机自动挂载配置文件书写错误
解决思路:引导进入修复模式,然后进行修复
构建FTP服务
FTP介绍
基本信息
- FTP服务器:数据传输
- FTP协议:文件传输协议
- 实现FTP服务的软件:vsftpd
- FTP默认共享数据的主目录:/var/ftp
安装软件vsftpd
[root@test1 ~]# yum install vsftpd
实现FTP服务
检查软件安装情况
[root@test1 ~]# rpm -q vsftpd
vsftpd-3.0.5-6.el9.x86_64
修改配置文件
修改vsftpd的配置文件,修改设置为开启无需验证访问功能
[root@test1 ~]# grep anonymous_enable= /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
[root@test1 ~]# vim /etc/vsftpd/vsftpd.conf
[root@test1 ~]# grep anonymous_enable= /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
[root@test1 ~]#
访问FTP服务
我们使用另一台虚拟机test2来访问test1的FTP服务
但是这里访问失败了,这是为什么呢?这里是因为防火墙firewalld存在的缘故,我们把它卸载掉就可以,当然也可以修改firewalld配置来实现。看下一小节我们就能明白为什么
防火墙策略管理
firewalld服务基础
Linux的防火墙体系
- 系统服务:firewalld
- 管理工具(指令):firewalld-cmd、firewalld-config
- 作用:严格过滤
预设安全区域
- 根据所在的网络场所区分,预设保护规则集
- public:仅允许访问本机的sshd、dhcp(自动获取ip)、ping等少数几个服务
- trusted:允许任何访问
- block:阻塞任何来访请求
- drop:丢弃任何来访的数据包
- 配置规则的位置
- 运行时:runtime
- 永久:permanent
防火墙判定原则
1.查看客户端请求中源IP地址,查看自己所有区域中的规则,哪个区域中有该源IP地址规则,则进入该区域
2.进入默认区域(默认情况下为public)
查看防火墙规则列表
列表查看规则
- firewalld-cmd - -list-all [- -zone=区域名]
- firewalld-cmd - -list-all-zones
- firewalld-cmd - -get-zones
- firewalld-cmd - -get-services
- firewalld-cmd - -get-dedault-zone
配置防火墙
指定默认的安全区域
- 使用命令:firewalld-cmd - -set-defaults-zone=区域名
- 默认为public,限制比较严格
- 对于开放式环境,建议将默认区域修改为trusted
- 针对“运行时/永久配置”均有效
[root@test1 ~]# firewall-cmd --get-default-zone
public
[root@test1 ~]# firewall-cmd --set-default-zone=trusted
success
[root@test1 ~]# firewall-cmd --get-default-zone
trusted
书接上文,我们修改了默认安全区域,这下应该可以实现FTP服务了,用test2连接一下test1试一下
[root@test2 ~]# curl <ftp://192.168.99.10>
drwxr-xr-x 2 0 0 6 Nov 06 2024 pub
成功连接上了,这里可以看到一个pub,这就是test1共享的内容,上面我们也讲过了,提供FTP服务的默认文件路径是/var/ftp/,我们在test1中修改,再用test2访问查看是否会更新
在test1中:
[root@test1 ~]# ls /var/ftp/
pub
[root@test1 ~]# echo 'Hello World!!' > /var/ftp/hello.txt
[root@test1 ~]# cat /var/ftp/hello.txt
Hello World!!
在test2中:
[root@test2 ~]# curl <ftp://192.168.99.10>
-rw-r--r-- 1 0 0 14 Sep 03 11:49 hello.txt
drwxr-xr-x 2 0 0 6 Nov 06 2024 pub
我们在test1中创建的hello.txt可以通过FTP服务提供给test2,说明成功
封网段、开服务
- 若针对“永久配置”,需要添加- -permanent
- 使用:- -add-source=网段名
- 使用:- -add-service=服务名
举例
服务管理
systemd介绍
init程序的作用
- Linux系统和服务管理器
- 是内核引导之后加载的第一个初始化进程(PID=1)
- 负责掌控整个Linux的运行/服务资源组合
- 传统的init程序风格
- system v:顺序加载,RHEL5系列采用
- upstart:事件触发,RHEL6系列采用
systemd
- 一个更高效的系统&服务管理器
- 开机服务并启动,各系统服务间的精确依赖
- 服务目录:/lib/systemd/system/
- 主要管理工具:systemctl
- 用户→systemctl→systemd→服务启动配置文件→服务程序
- 服务启动配置文件目录:/lib/systemd/system/
管理系统服务
列出服务
- 列出活动的系统服务
- systemctl -t service
- 列出所有的系统服务(包括不活动的)
- systemctl -t service - -all
启动/停止/重启/看状态
- systemctl restart 服务名:重启服务
- systemctl start 服务名:开启服务
- systemctl stop 服务名:停止服务
- systemctl status 服务名:查看服务当前状态
- systemctl enable 服务名:设置服务开机自启动
- systemctl disable 服务名:设置服务禁止开机自启动
- systemctl is-enabled 服务名:查看服务是否开机自启动
管理运行级别
切换级别
1.单用户模式(基本功能的实现,破解Linux密码)····50个服务
2.多用户字符界面(不支持网络)····80个服务
3.多用户字符界面(支持网络)服务器默认运行级别····100个服务
4.未定义····0个服务
5.图形界面····300个服务
6.重启····0个服务····相当于reboot
#当前直接切换到字符模式
systemctl isolate multi-user.target #相当于init 3#当前直接切换到图形模式
systemctl isolate graphical.target #相当于init 5
设置默认级别
查看每次开机默认进入的模式
[root@test1 ~]# systemctl get-default
graphical.target
设置永久策略,每次开机自动进入字符模式
[root@test1 ~]# systemctl set-default multi-user.target
Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.
[root@test1 ~]# systemctl get-default
multi-user.target
这样就设置成功了,之后我们将一直使用字符模式,一方面为了提高专业能力,一方面减小系统负担