文章目录
日志
• 系统和程序的“日记本”
记录系统、程序运行中发生的各种事件
通过查看日志,了解及排除故障
信息安全控制的“依据”
• 由系统服务rsyslog统一记录/管理
– 日志消息采用文本格式
– 主要记录事件发生的时间、主机、进程、内容
常见的日志文件
日志文件 | 主要用途 |
---|---|
/var/log/messages | 记录内核消息、各种服务的公共消息 |
/var/log/dmesg | 记录系统启动过程的各种消息 |
/var/log/cron | 记录与cron计划任务相关的消息 |
/var/log/maillog | 记录邮件收发相关的消息 |
/var/log/secure | 记录与访问限制相关的安全消息 |
日志分析
• 通用分析工具
– tail、tailf、less、grep等文本浏览/检索命令
– awk、sed等格式化过滤工具
tailf:实时跟踪日志消息
• users、who、w 命令
– 查看已登录的用户信息,详细度不同
• last、lastb 命令
– 查看最近登录成功/失败的用户信息
Linux内核定义的事件紧急程度
– 分为 0~7 共8种优先级别
– 其数值越小,表示对应事件越紧急/重要
0 EMERG(紧急) 会导致主机系统不可用的情况
1 ALERT(警告) 必须马上采取措施解决的问题
2 CRIT(严重) 比较严重的情况
3 ERR(错误) 运行出现错误
4 WARNING(提醒) 可能会影响系统功能的事件
5 NOTICE(注意) 不会影响系统但值得注意
6 INFO(信息) 一般信息
7 DEBUG(调试) 程序或系统调试信息等
• 提取由 systemd-journal 服务搜集的日志
– 主要包括内核/系统日志、服务日志
• 常见用法
– journalctl | grep 关键词
– journalctl -u 服务名 [-p 优先级]
– journalctl -n 消息条数
SELinux
SELinux的运行模式
– enforcing(强制)、permissive(宽松)
– disabled(彻底禁用)
– 任何模式变成disabled,都需要重启系统
切换运行模式
– 临时切换:setenforce 1|0
– 固定配置:/etc/selinux/config 文件
getenforce #查看当前系统SELinux模式
setenforce 0 #临时设置当前SELinux模式
vim /etc/selinux/config
SELINUX=permissive
遗忘root的密码(破解系统root的密码)
前提:须是服务器的管理者,涉及重启服务器
破解密码思路
1)重启系统,进入 恢复模式
[root@A ~]# reboot
开启虚拟机A,在此界面按e键
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RVxln4tU-1608640104253)(系统服务.assets/20201116195113.gif)]
找到linux16该行,在该行的最后,空格输入 rd.break console=tty0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q5Erity1-1608640104256)(系统服务.assets/20201116195114.gif)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qnPLfa33-1608640104258)(系统服务.assets/20201116195115.gif)]
按 ctrl + x 启动,会看到switch_root#
2)以可写方式重新挂载 /,并切换到此环境
switch_root# chroot /sysroot #切换环境,切换到硬盘操作系统的环境
sh-4.4# mount -o remount,rw / #让根目录下所有数据,可以读也可以写入
3)重新设置root的密码
sh-4.4# echo 1 | passwd --stdin root
4)如果SELinux是强制模式,才需要重设SELinux策略(其他模式不需要做此操作)
sh-4.4# vim /etc/selinux/config #查看SELinux开机的运行模式
如果不想改变模式
sh-4.4# touch /.autorelabel #SELinux是强制模式,让SELinux失忆
5)强制重启系统完成修复
sh-4.4# reboot -f
服务管理
防火墙管理firewall
• 管理工具:firewall-cmd(命令)、firewall-config(图形工具)
• 根据所在的网络场所区分,预设保护规则集
• public:仅允许访问本机的ssh、dhcp、ping服务
• trusted:允许任何访问
• block:拒绝任何来访请求,有明确的回应
• drop:丢弃任何来访的数据包,没有明确的回应
• 防火墙判定的规则:
1.查看请求中源IP地址,查看自己所有区域,哪个区域有该源IP地址规则,则进入哪个区域
2.进入默认区域(默认情况下为public)
rpm -q firewalld
firewall-cmd --get-default-zone #查看默认区域
firewall-cmd --set-default-zone=trusted #修改默认区域
firewall-cmd --zone=public --list-all #查看区域规则
firewall-cmd --zone=public --add-service=http #添加协议
#拒绝192.168.4.207的访问
firewall-cmd --zone=block --add-source=192.168.4.207
#--permanent 永久
firewall-cmd --permanent --zone=public --add-service=http
success
firewall-cmd --reload #重新加载防火墙所有永久配置
上帝进程systemd
•Linux系统和服务管理器
–是内核引导之后加载的第一个初始化进程(PID=1)
–负责掌控整个Linux的运行/服务资源组合
•一个更高效的系统&服务管理器
–开机服务并行启动,各系统服务间的精确依赖
–配置目录:/etc/systemd/system/
–服务目录:/lib/systemd/system/
–主要管理工具:systemctl
systemctl -t service --all #列出所有的服务
systemctl restart 服务名 #重起服务
systemctl start 服务名 #开启服务
systemctl stop 服务名 #停止服务
systemctl status 服务名 #查看服务当前的状态
systemctl enable 服务名 #设置服务开机自启动
systemctl disable 服务名 #设置服务禁止开机自启动
systemctl is-enabled 服务名 #查看服务是否开机自启
管理运行级别
RHEL6:运行级别 300
0:关机 0个服务
1:单用户模式(基本功能的实现,破解Linux密码) 50个服务
2:多用户字符界面(不支持网络) 80个服务
3:多用户字符界面(支持网络)服务器默认的运行级别 100个服务
4:未定义 0个服务
5:图形界面 300个服务
6:重起 0个服务
切换运行级别:init 数字
RHEL7:运行模式(运行级别)
字符模式:multi-user.target
图形模式:graphical.target
当前直接切换到字符模式
[root@svr7 /]# systemctl isolate multi-user.target #相当于原来的init 3
当前直接切换到图形模式
[root@svr7 /]# systemctl isolate graphical.target #相当于原来的init 5
查看每次开机默认进入模式
[root@svr7 /]# systemctl get-default
#设置永久策略,每次开机自动进入multi-user.target
[root@svr7 /]# systemctl set-default multi-user.target
[root@svr7 /]# reboot
KVM
前期准备(VMware平台下虚拟机开启虚拟机)
内存调大
开启虚拟化
添加硬盘
扩展根设备的空间,把新加的硬盘加进来
[root@svr7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 50G 0 disk
sr0 11:0 1 9.6G 0 rom /mnt/cdrom
[root@svr7 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
[root@svr7 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
[root@svr7 ~]# vgextend centos /dev/sdb
Physical volume "/dev/sdb" successfully created.
Volume group "centos" successfully extended
[root@svr7 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 2 2 0 wz--n- 68.99g <50.00g
[root@svr7 ~]# lvextend -L 40G /dev/centos/root
Size of logical volume centos/root changed from <17.00 GiB (4351 extents) to 40.00 GiB (10240 extents).
Logical volume centos/root successfully resized.
[root@svr7 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 40.00g
swap centos -wi-ao---- 2.00g
[root@svr7 ~]# df -h | grep root
/dev/mapper/centos-root 17G 6.0G 12G 35% /
[root@svr7 ~]# blkid /dev/centos/root
/dev/centos/root: UUID="e8cb8aba-6ba6-4d27-b0c7-fda8d6b0dc52" TYPE="xfs"
[root@svr7 ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=1113856 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=4455424, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4455424 to 10485760
部署安装KVM
• KVM虚拟化主要软件包
– qemu-kvm :为 kvm 提供底层仿真支持
– libvirt-daemon :libvirtd 守护进程,管理虚拟机
– libvirt-client :用户端软件,提供客户端管理命令
– libvirt-daemon-driver-qemu :libvirtd 连接 qemu 的驱动
– virt-manager :图形管理工具
[root@svr7 ~]# yum -y install qemu-kvm
[root@svr7 ~]# yum -y install libvirt-daemon
[root@svr7 ~]# yum -y install libvirt-client
[root@svr7 ~]# yum -y install libvirt-daemon-driver-qemu
[root@svr7 ~]# yum -y install virt-manager
virsh
virsh list #列出现在正在运行的虚拟机
virsh list --all #列出所有虚拟机
virsh dominfo xxxx #查看指定虚拟机xxxx的信息
virsh nodeinfo #查看KVM节点(服务器)信息,即安装虚拟机软件的机子
virsh shutdown xxxx #关机,可能失败
virsh destory xxxx#强制关机,百分百成功
virsh start xxxx #开机
virsh autostart xxxx #设置开机自启动
virsh autostart xxxx --disable #禁止开启自启动
KVM虚拟机的组成
xml配置文件:
定义虚拟机的名称,UUID,CPU,内存,虚拟磁盘,网卡等各种参数设置
xml文件默认存放路径: /etc/libvirt/qemu/
磁盘镜像文件:
保存虚拟机的操作系统及文档数据,镜像路径取决于xml配置文件中的定义
磁盘镜像文件默认存放路径: /var/lib/libvirt/images
命令行手动克隆虚拟机
复制配置文件(简单修改)和磁盘镜像文件即可
建立新的磁盘镜像文件
[root@svr7 ~]# cd /var/lib/libvirt/images/
[root@svr7 images]# ls
nsd2010.qcow2
[root@svr7 images]# cp nsd2010.qcow2 stu01.qcow2
[root@svr7 images]# ls
nsd2010.qcow2 stu01.qcow2
建立新的xml文件
[root@svr7 libvirt]# cd /etc/libvirt/qemu
[root@svr7 qemu]# ls
networks nsd2010.xml
[root@svr7 qemu]# cp nsd2010.xml stu01.xml
[root@svr7 qemu]# ls
networks nsd2010.xml stu01.xml
修改xml
1.name
2.uuid 随便改或者删除
建议删除 linux识别时没有uuid会自动生成
3.虚拟机文件,source file对应虚拟机的
4.网卡mac address地址 建议删除自动生成
导入新的xml文件
virsh define 目录/xxx.xml
删除
取消定义
virsh undefine xxx
删除磁盘镜像文件
rm -rf /var/lib/libvirt/images/xxx.qcow2
三合一做法:
先复制磁盘镜像文件
virsh edit nsd2010(模版虚拟机)
编辑了域 dc01 XML 配置。
编辑完成即完成了
查看:
[root@svr7 images]# virsh list --all
Id 名称 状态
----------------------------------------------------
- dc01 关闭
- nsd2010 关闭
- stu01 关闭
离线访问虚拟机
yum provides */guestmount #查看仓库中那个包产生
yum -y install libguestfs-tools-c
离线访问虚拟机
• 使用 guestmount 工具
– 支持离线挂载 raw、qcow2 格式虚拟机磁盘
– 可以在虚拟机关机的情况下,直接修改磁盘中的文档
– 方便对虚拟机定制、修复、脚本维护
需要注意 SELinux 机制的影响 切换为permissive
基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点
如:guestmount -a /var/lib/libvirt/images/tc01.qcow2 -i /mnt/
ls /mnt
umount /mnt #卸载
systemd Unit
配置Unit文件实现自定义systemctl控制的服务
在linux系统中,有些程序无法利用systemctl控制,就需要添加Unit文件
Unit文件语法格式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aqy9vnQJ-1608640104262)(系统服务.assets/table004.png)]
Unit文件语法格式
[root@web1 ~]# systemctl #列出所有启动的服务
[root@web1 ~]# systemctl status <服务名称> #查看服务状态
[root@web1 ~]# systemctl start <服务名称> #启动服务状态
[root@web1 ~]# systemctl stop <服务名称> #关闭服务状态
[root@web1 ~]# systemctl restart <服务名称> #重启服务状态
[root@web1 ~]# systemctl enable <服务名称> #设置开机自启
[root@web1 ~]# systemctl enable --now <服务名称> #设置开机自启并启动
[root@web1 ~]# systemctl disable <服务名称> #禁止开机自启
[root@web1 ~]# systemctl enable <服务名称> #设置开机自启
[root@web1 ~]# systemctl is-active <服务名称> #查看是否激活
[root@web1 ~]# systemctl is-enabled <服务名称> #查看是否开启自启
[root@web1 ~]# systemctl reboot #重启计算机
[root@web1 ~]# systemctl poweroff #关闭计算机
案例:编写一个nginx管理服务
[root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server #描述信息
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
#仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT ${MAINPID}
[Install]
WantedBy=multi-user.target