Linux_21 日志系统、ssh服务、系统安装及系统故障排除
日志系统
Linux上的日志系统
syslog:红帽5使用的日志系统
syslog-ng:升级版,配置更加复杂,红帽6以后使用的
日志系统:syslog()
A:
B:
C:
syslog服务:
syslogd:系统,非内核产生的信息
klogd:内核,专门负责记录内核产生的日志信息
信息详细程序:日志级别
子系统:facility,设施
动作:
物理终端:启动系统,屏幕上打印的信息是在物理终端上显示的
虚拟终端:再启动后,给login,让输入账号密码,这变成了虚拟终端
伪终端:ssh远程登录叫伪终端
kernel-->物理终端(/dev/console)-->/var/log/dmesg #系统启动之后,在物理终端打印的信息显示的很快,可以在启动之后的/var/log/dmesg中查看,cat /var/log/dmesg 或者通过dmesg命令查看
dmesg | less
cat /var/log/dmesg
日志需要滚动:当一个文件记录日志信息占用空间过大,查看非常消耗内存的,因此需要切割,当一个日志记录一个周期或达到一定大小以后,将日志命名 messages.1 从新启一个messages
messages
/sbin/init
/var/log/messages:系统标准错误日志信息;非内核产生引导信息;各子系统产生的信息;
/var/log/maillog:邮件系统产生的日志信息;
/var/log/secure # 用户登录相关的详细信息(尝试登录次数、),这个文件权限为600,只有管理员能读写;
不接受syslog管理的日志可以放到 /var/log下
cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
cat /etc/logrotate.conf
ls /etc/logrotate.d
bootlog firewalld httpd subscription-manager syslog up2date wpa_supplicant yum
syslog:
syslogd
klogd
配置文件:/etc/syslog.conf
配置文件定义格式为 facility.priority action
facility,可以理解为日志的来源或设备目前常用的facility有以下几种:
auth # 认证相关的
authpriv # 权限,授权相关的
cron # 任务计划相关的
daemon # 守护进程相关的
kern # 内核相关的
lps # 打印相关的
mail # 邮件相关的
mark # 标记相关的
news # 新闻相关的
security # 安全相关的,与auth类似
syslog # syslog自己的
user # 用户相关的
uucp # unix to unix cp 相关的
loca10到local17 # 用户自定义使用
* # * 表示所有的facility
priority(log level)日志的级别,一般有以下几种级别(从低到高)
debug # 程序或系统的调试信息
info # 一般信息
notice # 不影响正常功能,需要注意的消息
warning/warn # 可能影响系统功能,需要提醒用户的重要事件
err/error # 错误信息
crit # 比较严重的
alert # 必须马上处理的
emerg/panic # 会导致系统不可用的
* # 表示所有的日志级别
none # 根*相反,表示啥也没有
action(动作)日志记录的位置
系统上的绝对路径 # 普通文件 如:/var/log/xxx
| 管道 通过管道送给其他的命令处理
终端 # 终端 如:/dev/console
@HOST # 远程主机 如:@10.0.0.1
用户 # 系统用户 如:root
* # 登录到胸痛上的所有用户,一般emerg级别的日志是这样定义的
定义格式例子:
mail.info /bar/log/mail.log # 表示mail相关的,级别为info及info以上级别的信息记录到/var/log/mail.log文件中
auth.=info @10.0.0.1 # 表示将auth相关的,基本为info的信息记录到10.0.0.1主机上去,前提是10.0.0.1要能接收其他主机发来的日志信息
user.!=error # 表示记录user相关的,不包括error级别的信息
user.!error # 与user.error相反
*.info # 表示记录所有的日志信息的info级别
mail.* # 表示记录mail相关的所有级别的信息
*.* # 你懂的
cron.info;mail.info # 多个日志来源可以用";"隔开
cron,mail.info # 与cron.info;mail.info 是一个意思
mail.*;mail.!=info # 表示记录mail相关的所有级别的信息,但是不包括info级别的
日志配置文件操作参考:https://blog.csdn.net/qq_34889607/article/details/78649115
红帽7的syslog服务是rsyslog:
chkconfig --list rsyslog
systemctl status rsyslog
cat /etc/rsyslog.conf # rsyslog configuration file
如果想更换日志格式,可以编辑rsyslog.conf,编辑之后,systemctl restart rsyslog,但是如果rsyslog这时正在往磁盘上发送信息,重启会导致日志信息丢失;可以systemctl reload rsyslog,让一个服务不用重启,就可以读取该服务的配置文件。发送的是1# 信号(kill -l)
启动脚本:红帽5
/etc/rc.d/init.d/syslog
/etc/sysconfig/rsyslog #文件内部可以配置SYSLOGD_OPTIONS选项,加-r 重服务,就可以作为日志服务器,接收其他主机发来的信息,并且记录到本主机。
如何指定发送到哪台主机:
修改/etc/rsyslog.conf
比如:
mail.* @172.16.100.1
ssh服务
telnet:远程登录协议,23/TCP
C/S
S:telnet服务器
C:telnet客户端
ssh:Secure Shell,应用层协议,22/tcp
通信过程及认证过程是加密的,主机认证
用户认证过程加密
数据传输过程加密
ssh v1,v2
man-in-middle # 安全性低,已经被穿透
sshv2
认证过程:
基于口令认证
基于密钥认证
协议:规范
实现:服务器端、客户端
Linux:openSSH
C/S
服务器端:sshd,配置文件/etc/ssh/sshd_config
客户端:ssh,配置文件/etc/ssh/ssh_config
ssh-keygen:密钥生成器,为某个用户生成一个密钥对
ssh-copy-id:将公钥传输至远程南横服务器,并能保存至用户家目录的某个文件中,
scp:跨主机安全复制工具
在使用ssh登录一台主机的时候,如果是第一次登录,会提示(yes/no)是否接收对方主机的密钥认证,这个密钥存放在本地服务器~/.ssh/known_hosts文件中。在对方服务器的主机上保存在/etc/ssh/ssh_host_ecdsa_key.pub 文件中。
ssh:
# 登录远程主机的两种方式
ssh USERNAME@HOST
ssh -l USERNAME HOST
# 在不登陆远程主机的情况下,并在远程主机上执行命令,并将命令的执行结果返回到本地;
ssh USERNAME@HOST 'COMMAND1;COMMAND2;....'
scp:
scp SRC DEST
-r # 递归拷贝目录文件
-a
scp USERNAME@HOST:/path/to/somefile /path/to/local # 将远程主机上的文件拷贝到本地
scp /path/to/local USERNAME@HOST:/path/to/somefile # 将本地主机上的文件拷贝到远程主机的某个目录中
ssh-keygen
-t rsa # -t指定生成密钥
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
-f /path/to/KEY_FILE
-P '' :指定加密私钥的密码串
加上 -f -P 选项,在生成密钥对时就不用连敲两次回车了
公钥追加保存到远程主机某用户的家目录下的.ssh/authorized_keys文件或.ssh/authorized_keys2文件中。
ssh-copy-id
-i ~/.ssh/id_rsa.pub
ssh-copy-id -i ~/.ssh/id_rsa.pub USERNAME@HOST # 此命令能自动将本地公钥以追加的方式保存至远程主机的.ssh/authorized_keys文件中,如果.ssh/authorized_keys不存在,则自动帮我们创建
给小系统添加ssh服务
dropbear:嵌入式系统专用的ssh服务器端和客户端工具
服务器端:dropbear
dropbearkey # 密钥生成工具
客户端:dbclient
dropbear默认使用nsswitch实现名称解析
/etc/nsswitch.conf
/lib/libnss_files*
/usr/lib/libnss3.so
/usr/lib/libnss_files*
没有nsswitch无法实现名称解析,无法将用户的账号转换成id,用户无法登录。
dropbear会在用户登录检查器默认shell是否是当前系统的安全shell
/etc/shells
当用户登录的时候默认会给用户打开一个伪终端,
tty
/dev/pts/0
cat /etc/fstab
devpts /dev/pts devpts gid=5,mode=620 0 0
#下载dropbear
lftp 172.16.0.1
cd /pub/Source/Busybox
get dropbear.tar.bz2
bye
tar xf dropbear.tar.bz2
cd dropbear
# 编译dropbear
./configure
make
make install
# 编译完成后,生成dropbear/dropbearconvert/dropbearkey这三个文件,将这三个文件拷贝到小系统对应目录下
./bincp.sh
dropbear
dropbearkey
dbclient
sync
cd /mnt/sysroot
# 给登录用户添加安全的shell
vim etc/shells
/bin/sh
/bin/bash
/bin/ash
/bin/hush
# 添加伪文件系统
vim /etc/fstab
devpts /dev/pts devpts gid=5,mode=620 0 0
mkdir dev/pts
sync
主机密钥默认位置:
/etc/dropbear/
RSA:dropbear_rsa_host_key
长度可变,只要是8的整数倍,默认为1024
DSS:dropbear_dss_host_key
长度固定,默认为1024
mkdir etc/dropbear/
dropbearkey
-t rsa|dsa
-f
dropbearkey -t rsa -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key -s 2048
dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key
ls etc/dropbear/
dropbear_rsa_host_key dropbear_dss_host_key
ls usr/
bin sbin local
mkdir usr/lib
pwd
/mnt/sysroot
cd
cp -d /lib/libnss_files* /mnt/sysroot/lib/
cd -d /usr/lib/libnss3.so /usr/lib/libnss_files.so /mnt/sysroot/usr/lib/
cp /etc/nsswitch.conf /mnt/sysroot/etc/
vim etc/nsswitch.conf
passwd: files
shadow: files
group: files
hosts: files dns
sync
启动小系统并登录
ifconfig
ifconfig is not found
export PATH=$PATH:/usr/bin:/sbin:/usr/local/bin:/usr/local/sbin/
ifconfig
没有网卡信息
ifconfig eht0 IP NETMASK
ping GATEWAY # 正常
ssh USERNAME@IP # 在当前小系统登录远程主机正常
系统安装及Kickstart
locale -a # 显示所有语言
必备命令
keyboard us
lang Asia/Shanghai
timezone
rootpw --iscrpted # 对管理员密码加密
authconfig --useshadow
bootloader --location
clearpart --initlabel --linux
driverdisk --source=
firewall --disabled
firstboot --disabled
text|graphical
key --skip
可选命令
# 检查anaconda-ks.cfg文件语法的命令
ksvalidator # 需要 安装工具
# yum list all | grep kick
yum install -y system-config-kickstart
ksvalidator /root/anaconda-ks.cfg
system-config-kickstart & # 可以启动一个图形界面,在图形界面上选择配置
mkisofs -R -b isolinux/isolinux.bin -no-emul-boot -boot-info-table -o boot.iso iso/
系统故障排除
常见的系统故障排除:
1. 确定问题的故障特征
2. 重现故障
3. 使用工具收集进一步信息
4. 排除不可能的原因
5. 定位故障:
从简单的问题入手
一次尝试一种方式
1. 备份原文件
2. 尽可能借助于工具
可能会出现的故障:
1. 管理员密码忘记;# 进入单用户模式,直接修改。
2. 系统无法正常启动 #
a. grub损坏(MBR损坏、grub配置文件丢失)
b. 系统初始化故障(某文件系统无法正常挂载,驱动不兼容)
c. 服务无法正常启动
d. 用户无法登录系统(bash程序故障)
3. 命令无法运行
4.编译过程无法继续(开发环境缺少基本组件)
一、MBR损坏:
1.借助别的主机修复;
2.使用紧急救援模式;
a、/boot.iso
b、使用完整的系统安装光盘
boot:linux rescue
# 进入小型linux系统之后,首先进入grub的命令行模式,安装grub
grub
root (hd0,0) # / 指的是内核所在分区的设备 设置根分区在磁盘的位置
如果不知道内核位置,可以使用find查找
find (hd0,0)/
# 安装
setup (hd0) # 将引导文件写入磁盘,比如把stage1写入hd0即第一个磁盘的1号分区,第一个扇区的位置;其实就是自动安装grub
二、grub(grub.conf)配置文件丢失:# 启动系统,系统就已经直接进入了grub命令提示符
grub> root (hd0,0)
grub> kernel /vmlinuz- ro root=/dev/vo10/root rhgb quiet
grub> initrd /initrd-
grub> boot
vim grub.conf
grub.conf
default=0
timeout=10
title RHEL 5.8
root (hd0,0)
kernel /vmlinuz-2.6.18-308.e15 ro root=/dev/vo10/root
initrd /initrd-
cp /root/grub.conf /boot/grub/
三、kernel panic:内核恐慌
四、另外的故障:
把默认级别设定为0或6: --> 进入单用户模式,编辑inittab文件
/etc/rc.d/rc3.d --> 进入单用户模式,修改目录系统
某个服务故障导致启动停止,如sendmail配置文件时间戳检查无法通过 --> 进入交互式模式