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配置文件时间戳检查无法通过 --> 进入交互式模式
posted on 2021-06-06 16:10  jueyuanfengsheng  阅读(325)  评论(0编辑  收藏  举报