Linux系统管理
实验所用系统为Redhat-rhel8.2。
Linux的系统管理–Linux中的远程登陆服务
实验环境–配置两台纯净的虚拟机
- 真机
westos-vmctl reset westosa
westos-vmctl reset westosb
- westosa–server服务端
hostnamectl set-hostname westosa.westos.org
nmcli connection show
nmcli connection delete Wired\ connection\ 1
cd /etc/sysconfig/network-scripts/(非图形设定,也可以nm-connection-editor图形设定)
ls(空)
vim ifcfg-ens3
###
DEVICE=ens3
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.25.254.109
NETMASK=255.255.255.0
NAME=ens3
###
nmcli connection reload
nmcli connection up ens3
rm -rf /root/.ssh/ (默认没有这个文件,删掉保存原始状态)
ifconfig
init 3
sshd(默认下载)
systemctl enable --now sshd(默认打开)
#也可图形方式进行设置
-
wesosb–client客户端
操作同a
-
真机
ssh -l root 172.25.254.109
ssh -l root 172.25.254.209
一、Openssh的功能
1、sshd服务的用途
Secure Shell ===>ssh ##客户端
Secure Shell daemon ===>sshd ##服务端
2、安装包
openssh-server
3、主配置文件
rpm -qc openssh-server
/etc/ssh/sshd_conf
4、默认端口
netstst -antupe | grep ssh
对外开放的接口 22
5、客户端命令
ssh(ssh sshd)
二、ssh
1、基本用法
ssh [-l 远程主机用户] <ip|hostname>
ssh -l root 172.25.254.109 ##通过ssh命令在105主机中 以root身份开启远程shell
当收入yes后
109主机会向当前主机发送身份公钥,并保存此公钥到~/.ssh/known_hosts
109主机持有私钥,当客户主机再次连接时对其进行身份验证
当连接因为认证问题被拒绝时,
vim ~/.ssh/know_hosts
在此文件中删除报错提示相应的行
ssh 常用参数
-l ##指定登陆用户
-i ##指定私钥
-X ##开启图形
###
真机,开启图形
ssh -X -f -l root 172.25.254.109 gedit
###
-f ##后台运行
-o ##指定连接参数
#ssh -l root@172.25.254.x -o "StrictHostKeyChecking=no" 首次连接不需要输入yes
-t ##指定连接跳板
ssh -l root 172.25.254.1 -t ssh -l root 172.25.254.109
实验步骤:
- 客户端b连接服务端a,
/root/.ssh/known_hosts
中生成公钥 - 服务端a
/etc/ssh/ssh_host-ecdsa_key.pub
中生成私钥 - 公钥与私钥内容相同
- 当不同时,ssh失败,即当连接因为认证问题被拒绝
- 客户端b重新连接,报错
known_hosts:x
出错,则删掉对应的行,重新连接。
客户端b连接服务端a
###客户端b
ssh -l root 172.25.254.109(客户端连接服务器)
exit
cd /root/.ssh
ls
cat known_hosts
###服务端a
cd /etc/ssh/
ls
cat ssh_host_ecdsa_key.pub
#客户端b
##服务端a,两者内容相同
##如果两个文件内容不同则不能ssh成功,(当连接因为认证问题被拒绝时)解决:
###a(模仿连接出错)
cd /etc/ssh/
ls
rm -rf ssh_host_* ##删掉配置文件
systemctl restart sshd ##重启sshd
###b
ssh -l root 172.25.254.109
报错known_hosts:1出错
vim known_hosts
删掉对应行
ssh -l root 172.25.254.109
成功
exit
#/root/.ssh/known_hosts中删除第一行
三、sshd key认证
1、认证类型
1)
对称加密:加密和解密是同一串字符
缺点:容易泄露;可暴力破解;容易遗忘
2)
非对称加密加密用公钥,解密用私钥
优点:不会被盗用;攻击者无法通过无密钥方式登陆服务器
2、生成非对称加密密钥
不必要求在服务器或者客户端,在哪都可以
1)方法1:交互式生成密钥
- 客户端b
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_ras): ##存放密钥加密字符串的文件,可输入或者默认
Enter passphrase (empty for no passphrase): ##密钥密码,可为空(免密认证)
Enter same passphrase again: ##确认密码
Your identification has been saved in /root/.ssh/id_ras. ##私钥
Your public key has been saved in /root/.ssh/id_ras.pub。 ##公钥
The key fingerprint is:生成的密钥
[注意] 如果接下来要做自动生成,需要删除已经生成的密钥文件
rm -rf /root/.ssh/
2)自动生成密钥
- 客户端b
ssh-keygen -f /root/.ssh/id_ras -P "" ##生成key;-f 保存加密字符的文件,-P设定密码,""表示免密认证
ssh-copy-id -i /root/.ssh/id_ras.pub root@172.25.254.109 ##用key对指定root用户加密(此时需要输入109的密码才能设定成功)
cat /root/.ssh/id_ras.pub
- 服务端a
ls -l /root/.ssh/
cat /root/.ssh/authorized_keys ##上锁成功,密码内容和b里的/root/.ssh/id_ras.pub相同
当有很多私钥对应一个公钥时,可以用
-i
指定私钥
- 客户端b
ssh -i /root/.ssh/id_ras -l root 172.25.254.109 ##登陆成功,此时登陆不需要密码,是因为第一步-P "",没有设置密码
3、安全优化(对服务器a)
rpm -qc openssh-server ##查找主配置文件
/etc/ssh/sshd_config ##主配置文件
vim /etc/ssh/sshd_config
vim ~/.vimrc ##写入set nu,永久添加行号
systemctl status sshd ##查看sshd服务状态,保证开启
1)关闭原始密码认证
vim /etc/ssh/sshd_config
///
73 PasswordAuthentication yes ##原始密码认证开启 改成no
///
systemctl restart sshd ##重启服务
#原始密码认证关闭,即不能输入密码来登录
测试
没有key的用户没有输入密码的途径
有key的用户可以使用私钥连接
#有key的客户端b使用私钥可以连接服务端a
#没有key的真机被拒绝
[注意] 做完实验要将no改回yes。
2)修改默认端口
将默认端口22改为2021
- 服务端a
getenforce ##限制端口更改
setenforcr 0 ##关掉限制
systemctl disable --now firewalld ##关闭火墙
vim /etc/ssh/sshd_config
///
17 Port 22 改成2021 (同时删掉注释符)
///
systemctl restsrt sshd ##重启服务
- 服务端b
ssh -l root 172.25.254.109 ##连接失败
ssh -l root 172.25.254.109 -p 2021 ##指定端口,连接成功
[注意] 做完实验要将端口改回22。
3)用户白名单
- 服务端a
vim /etc/ssh/sshd_config
///
50 AllowUsers root ... ##指定多个用户可以登陆
///
systemctl restsrt sshd
- 服务端b
ssh -l root 172.25.254.109 ##可以登录
ssh -l westos 172.25.254.109 ##不可以登录
4)用户黑名单
- 服务端a
vim /etc/ssh/sshd_config
///
51 DenyUsers westos ... ##指定用户不可以登陆
##注意:需要注释掉白名单
///
systemctl restsrt sshd ##重启服务
- 客户端b
ssh -l root 172.25.254.109 ##可以登录
ssh -l westos 172.25.254.109 ##不可以登录
Linux的系统管理–Linux中的日志管理
[注意] 还原配置文件或者重启,但是不建议重启
重启
rm -rf /etc/ssh/sshd_config
dnf reinstall openssh-server -y
vim /etc/ssh/sshd_config
systemctl restart sshd
实验环境:
两台纯净的虚拟机
systemctl disable --now firewalld
一、journald程序
服务名称:systemd-journald.service(默认开启)
systemctl status systemd-journald.service ##查看状态
默认日志存放路径:
/run/log/机器码/system.journal
hostnamectl ##查看机器码
1、实验1 journalctl命令的用法
journalctl #分析日志(n,N向上/下匹配)
-n 3 ##日志的最新3条
--since “11:00:00“ ##显示11点之后的日志
--until “11:05:00" ##显示11:05之前的日志(注意引号的中英文区分)
-o ##设定日志的显示方式
#short 经典模式显示日志
#verbose 显示日志的全部字节
#export 适合传出和备份的二进制格式(不常用)
#json js格式显示输出(不常用)
-p ##显示制定级别的日志
#0 emerg 系统的严重问题日志
#1 alert 系统中立即要更改的信息
#2 crit 严重级别会导致系统软件不能正常工作
#3 err 程序报错
#4 warning 程序警告
#5 notice 重要信息的普通日志
#6 info 普通信息
#7 debug 程序排错信息
-F PRIORITY ##查看可控日志级别
-u sshd ##查看指定服务
--disk-usage ##查看日志大小
设定日志回滚,将最先生成,最早存放的日志删除(期限,大小)
--vacuum-size=1G ##设定日志存放大小
--vacuum-time=1w ##设定日志在系统中最长存放时间
-f ##监控日志
_日志里的信息 ##查看该信息的日志
例:journalctl _PID=32350
journalctl _PID=10924 _SYSTEMD_UNIT=sshd.servie
#根据条件显示日志
#查看可控日志级别
#查看指定服务
#查看日志大小与设置回滚(注意大小写)
#监控日志,默认后十行
[注意] 关机后/run/log/机器码/system.journal会被清理,重启后日志从当前开始
2、实验2 用journald服务永久存放日志
- 系统默认保存日志:/run/log/journal中,关机后被清理
想要永久保存日志,则需要将其放在硬盘里
mkdir /var/log/journal
chgrp systemd-journal /var/log/journal ##程序只能识别属于他的组的文件
chmod 2775 /var/log/journal
systemctl restart systemd-journald.service
服务重启后,日志将存放在:
/var/log/journal
- 测试方法:
查看日志
重启系统
再次查看日志
可以看到重启以前的日志被清理(看id,日志开始时间)
但是完成以上操作,日志会被保存
步骤:
###与虚拟机连接的真机
mkdir /var/log/journal ##建立永久保存日志的目录
ls -ld /var/log/journal ##查看目录的权限
chgrp systemd-journal /var/log/journal ##改变目录的所有组
chmod 2775 /var/log/journal ##改变目录的权限
systemctl restart systemd-journald.service ##重启服务
ls -l /run/log ##查看原日志文件
ls -ld /var/log/journal ##查看新日志文件的权限
ls /var/log/journal ##查看日志文件
cd /var/log/journal/机器码/
ls
ls -i system.journal ##查看日志的节点号
date ##查看日志的时间
reboot ##重启
ping 172.25.254.109 ##用来查看虚拟机是否开启
ssh -l root 172.25.254.109 ##连接
journalctl ##查看日志开始时间是否改变
#日志开始时间并未因为重启而改变,即永久保存日志
二、rsyslog程序
日志采集工具:采集日志到指定位置
- 服务名称:rsyslog.service
日志存放:
/var/log/ ##所有
/var/log/messages ##系统服务日志,常规信息,服务报错
/var/log/secure ##系统认证信息日志
/var/log/maillog ##系统邮件日志信息
/var/log/cron ##系统定时任务信息
/var/log/boot.log ##系统启动日志信息
var/log/firewalld ##火墙日志
- 配置文件:/etc/rsyslog.conf
实验1、自定义日志采集路径
日志类型.日志类型级别 日志存放路径
*.* /var/log/westos ##把系统中所有级别的日志存放到westos中
*.*;authpriv.none /var/log/westos ##把系统中除了authpriv的日志的所有级别都存放在westos中
日志类型
auth #用户认证
authpriv #服务认证
cron #时间任务
kern #内核类型
mail #邮件
news #系统更新信息
user #用户
日志级别
debug #程序排错信息
info #程序常规运行信息
notice #重要信息的普通日志
waring #程序警告
err #程序报错
crit #严重级别会导致系统软件不能正常工作
alert #系统中立即要更改的信息
emerg #系统的严重问题日志
none #不采集
实验步骤:
1.虚拟机a–修改配置文件将所有日志的所有级别都采集到/var/log/westos中
2. 重启服务,清空日志
3. 虚拟机b–ssh链接虚拟机a
4. 虚拟机a–在/var/log/westos生成了新的日志
###a(所有日志的所有级别都采集到/var/log/westos中)
vim /etc/rsyslog.conf
///
47 *.* /var/log/westos
///
systemctl restart rsyslog.service
> /var/log/westos
cat /var/log/westos
###b
ssh -l root 172.25.254.109
###a
cat /var/log/westos
#虚拟机a中修改配置文件,重启服务,清空日志;在b链接a之后,生成新日志
#配置文件内容
#虚拟机b链接a
实验2 、日志远程同步remote machinevim
设定
b发送日志;a接收日志
UDP协议和TCP协议都是传输层协议。
TCP(Transmission Control Protocol,传输控制协议)提供的是面向连接,可靠的字节流服务。即客户和服务器交换数据前,必须现在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
稳定,但是内网主机不需要。
UDP(User Data Protocol,用户数据报协议)是一个简单的面向数据报的运输层协议。它不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。由于UDP在传输数据报前不用再客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输速度很快。
速度快,效率高。
@ #表示使用UDP传输日志
@@ #表示使用TCP传输日志
例:
@172.25.254.109 #把本机日志用UDP传输方式发送到172.25.254.109主机
实验步骤:
- 在虚拟机b中修改配置文件,将所有日志的所有级别都用UDP传输方式采集到虚拟a中,重启服务
- 在虚拟机a中修改配置文件,使udp传输可用
- 测试,清空a和b的日志,在a中监控日志,在b中发送消息
###b发送
vim /etc/rsyslog.conf
///
47 *.* @172.25.254.109 ##所有日志的所有级别都用UDP传输方式采集到172.25.254.109
///
systemctl restart rsyslog.service
###a接收
vim /etc/rsyslog.conf
删掉19,20的注释(注意:删掉UDP的注释,看仔细)
///
19 module(load="imudp") ##打开日志接收模块
20 input(type="imudp" port="514") ##指定模块使用接口
///
systemctl restart rsyslog.service
netstat -antlupe | grep rsyslog ##查询端口(关闭防火墙的原因:保证UDP的514端口畅通)
测试
在a和b里
> /var/log/messages ##清空日志
###a
tail -f /var/log/messages
###b
logger hhh #生成日志
#虚拟机b中,修改配置文件,生成日志
#虚拟机b的配置文件
#虚拟机a,修改配置文件,重启服务,监控日志
#虚拟机a的配置文件
实验3、更改日志采集格式
[注意] 接收方作改变(在哪看日志就在哪里改)
- 定义日志采集格式
$template WESTOS,"%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"
##指定采集日志的格式,名称叫WESTOS,注意","
WESTOS 格式名称(必须大写)
%timegenerated% 日志生成时间
%FROMHOST-IP% 日志来源主机的IP
%syslogtag% 日志生成服务
%msg% 日志内容
\n 换行符
- 设定日志采集格式应用
47 *.info;mail.none;authpriv.none;cron.none /var/log/messages;WESTOS
##应用该格式采集日志到/var/log/messages中(设定使用该格式,不做设定则使用默认格式)
34 module(load="builtin:omfile" Template="WESTOS")
##定义日志采集格式
实验步骤:
- 在虚拟机a中修改配置文件,将接收方的标志从主机名改成对应的IP
- 测试,清空a和b的日志,在a中监控日志,在b中发送消息
###a接收
vim /etc/rsyslog.conf(如果需要其他内容,可以man 5 rsyslog.conf)
///
28 $template WESTOS,"%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"
33 module(load="builtin:omfile" Template="WESTOS")
46 *.info;mail.none;authpriv.none;cron.none /var/log/messages;WESTOS
///
systemctl restart rsyslog.service
测试
在a和b里
> /var/log/messages ##清空日志
###a
tail -f /var/log/messages
###b
logger hhh #生成日志
#虚拟机a,修改配置文件,重启服务,监控日志,日志发送方显示为ip
#修改配置文件
#在b中发送
三、timedatectl
timedatectl (status) ##查看时间信息
timedatectl set-time "2020-02-13 10:00:00" ##设定系统时间(关闭时间同步服务systemctl stop chronyd.service,默认是开启的)
timedatectl list-timezones ##显示系统的所有时区
timedatectl set-timezone "Asia/Shanghai" ##设定系统时区
timedatectl set-local-rtc 0|1 ##设定系统时间计算方式;0表示使用utc时间计算方式,1表示使用rtc时间计算方式(推荐使用utc)
timedatectl显示信息
Local time: Wed 2021-07-21 10:12:53 CST ##当地时间
Universal time: Wed 2021-07-21 02:12:53 UTC ##世界时间(伦敦时间,硬件时间+时区)
RTC time: Wed 2021-07-21 02:12:54 ##硬件时间(本地时间)
Time zone: Asia/Shanghai (CST, +0800) ##所在时区
System clock synchronized: no ##系统时钟同步
NTP service: active ##NTP服务
RTC in local TZ: no ##所采用的时间是rtc(yes)还是utc(no)
#设定系统时间(关闭时间同步服务systemctl stop chronyd.service,默认是开启的)
#设定系统时区
#设定系统时间计算方式;0表示使用utc时间计算方式,1表示使用rtc时间计算方式(推荐使用utc),所采用的时间是rtc(yes)还是utc(no)
四、时间同步服务
服务名称:chronyd.service
配置文件:/etc/chrony.conf
vim /etc/chrony.conf
23 allow 172.25.254.0/24 ##允许172.25.254.0网段主机同步时间
26 local stratum 10 ##开启时间同步服务器功能并设定级别为10
实验步骤:
- 在虚拟机a,关闭火墙,修改配置文件,将本机作为时间同步源
- 在虚拟机b中,修改配置文件,指定a为要同步的对象
- 测试
###a服务端
systemctl stop firewalld ##关闭火墙
vim /etc/chrony.conf
///
23 allow 0.0.0.0/0 ##删掉注释符,修改为0.0.0.0/0,指定让谁同步
26 local stratum 10 ##删掉注释符,把本机作为时间源,服务开启
///
systemctl restart chronyd.service
###b客户端
vim /etc/chrony.conf
///
3 pool 172.25.254.109 iburst ##指定要同步的对象
///
systemctl restart chronyd.service
测试(不会同步时区,时区不同会导致时间不同)
在a和b
watch -n 1 date
###b
chronyc sources -v
#虚拟机a中,关闭火墙,修改配置文件
#虚拟机a的配置文件
#虚拟机b中,修改配置文件,时间同步
[注意] 如果一直显示为? 表示网络没有设置正确,需要设置配置文件中的网络
#虚拟机b的配置文件,设置与虚拟机a的时间同步
#虚拟机a的时间经过上一个实验设置为2020年
#虚拟机b的时间被a同步为2020年