14-Linux启动流程和内核管理

  • CentOS 6 的启动管理
  1. POST加电自检
  2. MBR引导
  3. GRUB
  4. 加载内核
  1. 启动init进程
  2. 读取/etc/initab文件;/etc/init/*.conf文件
  1. 使用/etc.d/rc.d/rc.sysinit初始化脚本
  2. 执行/etc/rc.d/rc脚本
  1. 会加载/etc/rc#.d/下的所有脚本,#为默认级别
  1. 执行/etc/rc.d/rc.local脚本
  2. 执行/bin/login程序,进入登陆状态
1. 加载BIOS的硬件信息,获取第一个启动设备
2. 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3. 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4. 核心执行init程序,并获取默认的运行信息
5. init程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
6. 启动核心的挂载模块
7. init执行运行的各个批处理文件(scripts)
8. init执行/etc/rc.d/rc.local
9. 执行/bin/login程序,等待用户登录
10. 登录之后开始以Shell控制主机
  • 硬件启动POST
  • ROM中存放BIOS程序,用于对计算机基本的输入输出、系统信息设置、开机加电自检、系统启动自举...断电情况下也不会丢失数据;在BIOS中一个主要的功能是POST,负责对硬件进行检测。
  • 启动加载器-Bootloader
  • 独立与BIOS,引导操作系统启动,运行在BIOS之后
  • Linux中主要使用grub
  • 两种引导模式
  • BIOS模式:Bootloader第一阶段的程序(代码)存储在硬盘0磁道0扇区的前446个字节的空间内,由第一阶段的程序来引导第二阶段的bootloader程序,像ntloader,LILO,GRUB等都是采用这种分段执行的方式。
  • UEFI模式:直接由EFI系统分区中的 .efi 引导程序来引导操作系统。
  • grub
grub 配置文件
[root@c6 ~]# ll /etc/grub.conf
lrwxrwxrwx. 1 root root 22 Aug 29 05:50 /etc/grub.conf -> ../boot/grub/grub.conf

[root@c6 ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_c6-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-71.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_c6-lv_root
rd_LVM_LV=vg_c6/lv_root rd_LVM_LV=vg_c6/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM
LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us
crashkernel=auto rhgb quiet
initrd /initramfs-2.6.32-71.el6.x86_64.img

新增启动配置,将默认启动设为第二项,并注释 hiddenmenu
[root@c6 ~]# vim /boot/grub/grub.conf
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
title CentOS (2.6.32-71.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_c6-lv_root
rd_LVM_LV=vg_c6/lv_root rd_LVM_LV=vg_c6/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM
LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us
crashkernel=auto rhgb quiet
initrd /initramfs-2.6.32-71.el6.x86_64.img
title CentOS-NewName
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_c6-lv_root
rd_LVM_LV=vg_c6/lv_root rd_LVM_LV=vg_c6/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM
LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us
crashkernel=auto rhgb quiet
initrd /initramfs-2.6.32-71.el6.x86_64.img
reboot系统,默认显示系统选择界面,并定位在第二个title 上
  • init进程
  • /sbin/init 程序是内核启动之后的第一个进程,也是进程树中的树根,所以其进程ID始终为1 。
  • /sbin/init 程序的功能之一就是要挂载整个根文件系统, /sbin/init 这个程序的可执行文件,它自己也是在根文件系统里面(矛盾)
  • initrd机制
  • 是在内核启动的早期提供用一个户态环境,用于完成在内核启动阶段不易完成的工作通过此系统先形成一个精简版的linux系统,里面包含常用的文件系统的驱动,以及常用的工具和命令,然后再挂载真正的根文件系统,再定位到/sbin/init 程序,从而完在真正的启动。
[root@c6 ~]# cat /etc/grub.conf | grep initramfs
initrd /initramfs-2.6.32-71.el6.x86_64.img
[root@c6 ~]# ll /boot/initramfs-2.6.32-71.el6.x86_64.img -h
-rw-r--r--. 1 root root 14M Aug 29 05:50 /boot/initramfs-2.6.32-
71.el6.x86_64.img
[root@c6 ~]# file /boot/initramfs-2.6.32-71.el6.x86_64.img
/boot/initramfs-2.6.32-71.el6.x86_64.img: gzip compressed data, from Unix, last
modified: Mon Aug 29 05:50:36 2022, max compression
[root@c6 ~]# cp /boot/initramfs-2.6.32-71.el6.x86_64.img /opt/
[root@c6 ~]# cd /opt/
[root@c6 opt]# mv initramfs-2.6.32-71.el6.x86_64.img initramfs-2.6.32-
71.el6.x86_64.img.gz
[root@c6 opt]# ls
initramfs-2.6.32-71.el6.x86_64.img.gz
[root@c6 opt]# gzip -d initramfs-2.6.32-71.el6.x86_64.img.gz
[root@c6 opt]# ls
initramfs-2.6.32-71.el6.x86_64.img
[root@c6 opt]# file initramfs-2.6.32-71.el6.x86_64.img
initramfs-2.6.32-71.el6.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
[root@c6 opt]# cpio -id < initramfs-2.6.32-71.el6.x86_64.img
75084 blocks
[root@c6 opt]# ls
bin emergency initqueue-finished lib64
pre-udev sysroot
cmdline etc initqueue-settled mount
proc tmp
dev init initramfs-2.6.32-71.el6.x86_64.img pre-pivot
sbin usr
dracut-004-32.el6 initqueue lib pre-trigger
sys var
#此系统中有根系统的文件系统驱动
[root@c6 opt]# df / -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_c6-lv_root
ext4 51606140 3013552 45971148 7% /
[root@c6 opt]# find -name ext4
./lib/modules/2.6.32-71.el6.x86_64/kernel/fs/ext4
Magedu-
  • grub 安全
  • 破解centos6 中的 root口令
  • 1. 编辑grub菜单(选定要编辑的title,而后使用a 或 e 命令)
  • 2. 在选定的kernel后附加参数 1(s|S|single),此参数是用来进入单用户模式
  • 3. 在kernel所在行,敲 b 键,以此配置启动,即可无密码以root身份进入系统
  • 设置grub密码,防止破解系统root密码
  • 使用工具
  • grub-md5-crypt
  • grub-crypt
#查看grub工具
[root@c6 ~]# grub
grub grubby grub-install grub-md5-crypt grub-terminfo
#使用md5工具生成密文
[root@c6 ~]# grub-md5-crypt
Password:
Retype password:
$1$B0do8$z5jKhXah4sInKxPGQRQWE0
[root@c6 ~]#
[root@c6 ~]# vim /etc/grub.conf
default=0
timeout=5
password --md5 $1$B0do8$z5jKhXah4sInKxPGQRQWE0
title Centos6
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_c6-lv_root
initrd /initramfs-2.6.32-71.el6.x86_64.img
想再次编辑grub,就需要密码认证

生成grub启动背景图片
[root@c6 ~]# convert -resize 640x480 -colors 14 winner.png splash.xpm
[root@c6 ~]# more splash.xpm
#生成splash.xpm.gz
[root@c6 ~]# gzip splash.xpm
[root@c6 ~]# mv splash.xpm.gz /boot/grub
  • 加载 kernel
  • 初始化过程
  • 1. 探测可识别到的所有硬件设备
  • 2. 加载硬件驱动程序(借助于ramdisk加载驱动)
  • 3. 以只读方式挂载根文件系统
  • 4. 运行用户空间的第一个应用程序:/sbin/init
  • 核心文件
ramdisk:辅助的伪根系统,加载相应的硬件驱动,ramdisk --> ramfs 提高速度
CentOS 5 /boot/initrd-VERSION-release.img
CentOS 6 以后版本 /boot/initramfs-VERSION-release.img
  • 模块文件-/lib/modules/VERSION-release
误删除内核文件/boot/vmlinuz-2.6.32-754.el6.x86_64无法启动,故障恢复
[root@centos6 ~]#rm -f /boot/vmlinuz-2.6.32-754.el6.x86_64
[root@centos6 ~]#reboot
#进入rescue模式
#chroot /mnt/sysimage
#mount /dev/sr0 /mnt/
#cp /mnt/isolinux/vmlinuz /boot/vmlinuz-2.6.32-754.el6.x86_64
#sync
#exit
#reboot
  • ramdisk文件的制作:
mkinitrd命令
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

dracut命令
dracut /boot/initramfs-$(uname -r).img $(uname -r)

误删除/boot/initramfs-2.6.32-754.el6.x86_64.img无法启动,故障恢复
[root@centos6 ~]#rm -f /boot/vmlinuz-2.6.32-754.el6.x86_64
[root@centos6 ~]#reboot
#进入rescue模式
#chroot /mnt/sysimage
#mount /dev/sr0 /mnt/
#cp /mnt/isolinux/vmlinuz /boot/vmlinuz-2.6.32-754.el6.x86_64
#sync
#exit
#reboot
  • init初始化
  • /sbin/init 程序是内核启动之后的第一个进程,也是进程树中的树根,所以其进程ID始终为1 。
CentOS6中的init
[root@c6 ~]# which init
/sbin/init
[root@c6 ~]# rpm -qf /sbin/init
upstart-0.6.5-6.1.el6.x86_64
  • 切换运行级别
查看现在使用的默认级别
[root@c6 ~]# cat /etc/inittab

查看当前级别
[root@c6 ~]# runlevel
N 5
[root@c6 ~]# who -r
run-level 5 2022-08-31 03:52

定义运行级别
[root@c6 ~]# vim /etc/inittab

切换级别
init N
  • 初始化脚本sysinit
[root@c6 ~]# wc -l /etc/rc.d/rc.sysinit
668 /etc/rc.d/rc.sysinit
  • 系统初始化脚本功能
  • 1. 设置主机名
  • 2. 设置欢迎信息
  • 3. 激活udev和selinux
  • 4. 挂载/etc/fstab文件中定义的文件系统
  • 5. 检测根文件系统,并以读写方式重新挂载根文件系统
  • 6. 设置系统时钟
  • 7. 激活swap设备
  • 8. 根据/etc/sysctl.conf文件设置内核参数
  • 9. 激活lvm及software raid设备
  • 10. 加载额外设备的驱动程序
  • 11. 清理操作
  • /etc/rc.d/rc 控制服务脚本的开机自动运行
[root@c6 ~]# cat /etc/rc.d/rc
# First, run the KILL scripts.
# K(kill) 开头表示关闭服务,K后面的数字表示运行顺序,数字越小,越先运行,表示越先被停止,这类服
# 务通常是要依赖其它服务
for i in /etc/rc$runlevel.d/K* ; do
......
......
done
# Now run the START scripts.
# S(start) 开头表示开启服务,S后面的数字表示运行顺序,数字越小,越先运行,表示越先被启动,这类
# 服务通常是要被其它服务依赖
for i in /etc/rc$runlevel.d/S* ; do
......
......
done
  • chkconfig 命令管理服务
自定义服务脚本
#创建服务脚本
[root@c6 ~]# vim /etc/init.d/testsrv
#!/bin/bash
# chkconfig: - 96 3
# description: This is test service script
. /etc/init.d/functions
start(){
[ -e /var/lock/subsys/testsrv ] && exit || touch /var/lock/subsys/testsrv
echo $PATH
action "Starting testsrv"
sleep 3000 &
}
stop(){
[ -e /var/lock/subsys/testsrv ] && rm /var/lock/subsys/testsrv || exit
action "Stopping testsrv"
}
status(){
[ -e /var/lock/subsys/testsrv ] && echo "testsrv is running..." || echo
"testsrv is stopped"
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo $"Usage $0 {start|stop|status|restart}"
exit 2
esac

#加可执行权限
[root@c6 ~]# chmod a+x /etc/init.d/testsrv
#添加服务
[root@c6 ~]# chkconfig --add testsrv
#查看
[root@c6 ~]# chkconfig --list testsrv
testsrv 0:off 1:off 2:off 3:off 4:off 5:off 6:off
#开机启动
[root@c6 ~]# chkconfig testsrv on
[root@c6 ~]# chkconfig --list testsrv
testsrv 0:off 1:off 2:on 3:on 4:on 5:on 6:off
#启动
[root@c6 ~]# service testsrv start
/sbin:/usr/sbin:/bin:/usr/bin
Starting testsrv [ OK ]
#停止
[root@c6 ~]# service testsrv stop
Stopping testsrv [ OK ]
#删除服务
[root@c6 ~]# chkconfig --del testsrv
  • service 命令手动管理服务
[root@c6 ~]# service crond stop
Stopping crond: [ OK ]
[root@c6 ~]# service crond start
Starting crond: [ OK ]
[root@c6 ~]# service crond startt
Usage: /etc/init.d/crond {start|stop|status|restart|condrestart|tryrestart|
reload|force-reload}
[root@c6 ~]# service crond status
crond (pid 1756) is running...
  • 非独立服务
  • 一般用 xinetd 服务来管理非独立服务,默认没有安装xinetd,但当安装非独立服务时,就会安装xinetd服务
[root@c6 ~]# rpm -qi xinetd
package xinetd is not installed

#安装非独立服务telnet-server
[root@c6 ~]# yum install -y telnet-server
[root@c6 ~]# rpm -ql telnet-server
/etc/xinetd.d/telnet
/usr/sbin/in.telnetd
/usr/share/man/man5/issue.net.5.gz
/usr/share/man/man8/in.telnetd.8.gz
/usr/share/man/man8/telnetd.8.gz
[root@c6 ~]# rpm -q xinetd
xinetd-2.3.14-29.el6.x86_64

启动服务
[root@c6 ~]# service xinetd start
Starting xinetd: [ OK ]
[root@c6 ~]# chkconfig telnet on

telnet服务的23端口,现在被 xinetd 接管
[root@c6 ~]# ss -tnlp | grep 23
0 64 :::23 :::*
users:(("xinetd",3759,5))

进程中也没有telnet 服务
[root@c6 ~]# ps aux | grep xinetd
root 3759 0.0 0.0 21972 1004 ? Ss 18:13 0:00 xinetd -
stayalive -pidfile /var/run/xinetd.pid
root 3880 0.0 0.0 103152 820 pts/0 S+ 18:30 0:00 grep xinetd
[root@c6 ~]# ps aux | grep telnet
root 3883 0.0 0.0 103152 820 pts/0 S+ 18:30 0:00 grep telnet

通过telnet 客户端连接,则会激活本机的telnet服务
[root@rocky86 ~]# telnet 10.0.0.155
Trying 10.0.0.155...
Connected to 10.0.0.155.
#centos6上的 telnet 开启了
[root@c6 ~]# ps aux | grep telnet
root 3979 0.0 0.0 12436 972 ? Ss 18:50 0:00 in.telnetd:
bogon
root 3982 0.0 0.0 103152 820 pts/0 S+ 18:50 0:00 grep telnet
  • 开机启动文件 rc.local
  • 正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本
  • 不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中
  • /etc/rc.d/rc.local在指定运行级别脚本后运行
  • 注意:默认Ubuntu 无 /etc/rc.local 文件,需要手动创建并添加可执行权限,首行必须有shebang机制
#创建测试脚本
[root@c6 ~]# vim rc-local-test.sh
#!/bin/bash
sleep 3000
#加执行权限
[root@c6 ~]# chmod a+x rc-local-test.sh
#加入开机启动
[root@c6 ~]# vim /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/root/rc-local-test.sh

重启,测试看是否启动
[root@c6 ~]# uptime
19:18:33 up 1 min, 1 user, load average: 0.15, 0.04, 0.01
[root@c6 ~]# ps aux | grep rc-local
root 1843 0.0 0.0 108112 1244 ? S 19:17 0:00 /bin/bash
/root/rc-local-test.sh
root 1890 0.0 0.0 103152 820 pts/1 S+ 19:21 0:00 grep rc-local
[root@c6 ~]# pstree -p | grep rc-local
|-rc(982)---S99local(1841)---rc-local-test.s(1843)---sleep(1844)
  • CentOS 6 启动过程总结
POST #加电自检
boot loader #引导启动内核
vmlinux(initrd /initramfs-2.6.32-71.el6.x86_64.img) #临时系统
rootfs #根文件系统
/sbin/init #执行init程序
/etc/inittab #设置默认运行级别
/etc/rc.d/rc.sysinit #运行系统初始脚本完成系统初始

/etc/rcN.d/KNN #当前级别下需要停止的服务
/etc/rcN.d/SNN #当前级别下需要启动的服务
/etc/rc.d/rc.local #没加服务的自定义开机启动项
设置登录终端

  • systemd和启动流程
  • Systemd:从 CentOS 7 版本之后开始用 systemd 实现init进程,系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程
  • Systemd 新特性
  • 系统引导时实现服务并行启动
  • 按需启动守护进程
  • 自动化的服务依赖关系管理
  • 同时采用socket式与D-Bus总线式激活服务
  • socket与服务程序分离
  • 向后兼容sysv init脚本
  • 使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,systemctl无法与之通信和控制
  • 系统状态快照
  • systemd 中的unit
  • 查看类型

14-Linux启动流程和内核管理

  • 常见Unit类型说明

unit类型

后缀

作用

service

.service

定义系统服务

socket

.socket

定义进程间通信用的socket文件,可以延迟启动,按需启动

target

.target

不同服务的集合,用于模拟运行级别

device

.device

用于定义内核识别的设备

mount

.mount

定义文件系统挂载点

automount

.automount

文件系统的自动挂载点

swap

.swap

用于标识swap设备

timer

.timer

用于安排激活另一个单元的计时器

path

.path

用于定义文件系统中的文件或目录,常用于当文件系统变化时,延迟激活服务,如spool 目录

slice

.slice

通过 Linux 控制组节点 (cgroups) 限制资源

scope

.scope

systemd 总线接口的信息,常用于管理外部系统进程

  • unit的配置文件
/usr/lib/systemd/system/ #每个服务最主要的脚本文件目录,
类似于之前的/etc/init.d/
/run/systemd/system/ #系统执行过程中所产生的服务脚本,
比上面目录优先运行
/etc/systemd/system/ #管理员建立的执行脚本,
类似于/etc/rcN.d/Sxx的功能,比上面目录优先运
  • service 系统服务管理
  • systemctl COMMAND name.service (格式)
  • 常用命令

启动服务

systemctl start name1.service

[name2.service] ...

停止服务

systemctl stop name.service

重启服务

systemctl restart name.service

查看状态

systemctl status name.service

禁止服务启动

systemctl mask name.service

恢复可启动

systemctl unmask name.service

当前是否可启动状态

systemctl cat name.service

查看所有已经激活的服务

systemctl list-units --type service|-t service

查看所有服务

systemctl list units type service| t service

--all|-a

设定服务开机启动

systemctl enable name.service

设定服务开机禁止启动

systemctl disable name.service

查看所有服务开机启动状态

systemctl list-unit-files --type service --all|-a

查看服务在不同运行级别下的启用禁用

ls  /etc/systemd/system/*.wants/name.service

查看服务是否开机自启动

systemctl is-enabled name.service

列出失败的服务

systemctl --failed --type=service

开机启动并立即启动

systemctl enable --now name.service

开机禁用并立即禁用

systemctl disable --now name.service

查看服务的依赖

systemctl list-dependencies name.service

杀进程

systemctl kill unitname

  • 注意:对于新安装的服务,在安装完成后,ubuntu系统中会默认启动,centos系统中则是停止状态,需要手动启动
  • service unit 文件格式

14-Linux启动流程和内核管理

  • 运行级别
#查看默认启动级别
[root@rocky86 ~]# systemctl get-default
graphical.targe

runlevel 和target 之间的对应关系

运行级别

target

真实文件

0

runlevel1.target

poweroff.target

1

runlevel2.target

rescue.target

2

runlevel3.target

multi-user.target

3

runlevel4.target

multi-user.target

4

runlevel5.target

multi-user.target

5

runlevel6.target

graphical.target

6

runlevel7.target

reboot.target

常用模式快捷切换

#切换至救援模式
systemctl rescue
#切换至紧急模式
systemctl emergency
#关机
systemctl halt
systemctl poweroff
#重启
systemctl reboot
#挂起
systemctl suspend
#休眠
systemctl hibernate
#休眠并挂起
systemctl hybrid-sleep
  • CentOS 7之后版本引导顺序
1. UEFi或BIOS初始化,运行POST开机自检
2. 选择启动设备
3. 引导装载程序, centos7是grub2,加载装载程序的配置文件: /etc/grub.d/,
/etc/default/grub ,/boot/grub2/grub.cfg
4. 加载initramfs驱动模块(可以实现根文件系统的挂载)
5. 加载虚拟根中的内核
6. 虚拟根的内核初始化,Centos7使用systemd代替init,第一个进程
7. 执行initrd.target 所有单元,包括挂载 /etc/fstab
8. 从initramfs根文件系统切换到磁盘根目录
9. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
10. systemd执行sysinit.target初始化系统及basic.target准备操作系统
11. systemd启动multi-user.target 下的本机与服务器服务
12. systemd执行multi-user.target 下的/etc/rc.d/rc.local
13. Systemd执行multi-user.target下的getty.target及登录服务
14. systemd执行graphical需要的服务

查看 initramfs- uname -r .img的内容

[root@rocky86 ~]# cd /opt/
[root@rocky86 opt]# /usr/lib/dracut/skipcpio /boot/initramfs-$(uname -r).img |
zcat |cpio -idmv
[root@rocky86 opt]# ls
bin dev etc init lib lib64 proc root run sbin shutdown sys sysroot
tmp usr var

通过systemd-analyze 工具可以了解启动的详细过程

systemd-analyze plot > boot.html
sz boot.html

打开文件如下图

  • 破解
2.7 破解 root 密码
破解CentOS8,7的root密码
方法一
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux 开始的行,添加内核参数 rd.break
按ctrl+x启动
mount –o remount,rw /sysroot
chroot /sysroot
passwd root
#如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行
touch /.autorelabel
exit
reboot

此方式也适用于ubuntu18.04
  • grub2 安全
#添加grub2密码,会生在一个配置文件
[root@rocky86 ~]# ll /boot/grub2/user.cfg
ls: cannot access '/boot/grub2/user.cfg': No such file or directory
[root@rocky86 ~]# grub2-setpassword
Enter password:
Confirm password:
[root@rocky86 ~]# ll /boot/grub2/user.cfg
-rw------- 1 root root 298 Sep 3 14:56 /boot/grub2/user.cfg
#清空grub2密码
[root@rocky86 ~]# cat /dev/null > /boot/grub2/user.cfg
#或者直接删除文件
[root@rocky86 ~]# rm -f /boot/grub2/user.cfg
  • grub2 修复
grub2-install /dev/sda #BIOS环境
grub2-install #UEFI环境

#删除/boot/下所有内容
[root@rocky86 ~]# rm -rf /boot/*
[root@rocky86 ~]# ls /boot/
#重启,从光盘启动,进救援模式
#切根
chroot /mnt/sysimage #centos7
chroot /mnt/sysroot #centos8
#安装grub2
grub2-install /dev/sda #BIOS环境
grub2-install #UEFI环境
#挂载光盘
mount /dev/sr0 /mnt
#安装内核
rpm –ivh /mnt/Packages/kernel-3.10.0-1062.el7.x86_64.rpm --force
#centos7
rpm -ivh /mnt/BaseOS/Packages/k/kernel-core-4.18.0-372.9.1.el8.x86_64.rpm --
force #centos8
#生成配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
#重启
exit
reboot
  • 内核参数管理
  • sysctl 命令用来配置linux 系统内核参数,这些参数以文件的形式显示在 /proc/sys/ 目录中,配置项就是目录名加文件名,值就是该文件中的内容注意:不是所有内核参数都是可以被修改的
常用内核参数
net.ipv4.ip_forward #是否开启ipv4地址转发
net.ipv4.icmp_echo_ignore_all #是否禁用ping功能
net.ipv4.ip_nonlocal_bind #允许应用程序可以监听本地不存在的IP
vm.drop_caches #缓存回收机制 3 回收所有 2 释放数据区和信息节点
3 释放页面缓存
fs.file-max = 1020000 #内核可以支持的全局打开文件的最大数
vm.overcommit_memory = 0 #超分 0表示进程申请内存时会判断,不够则返回错
误,1表示内核允许分配所有的物理内存,而不管当前的内存状态如何,2表示内核允许分配超过所有物理内存
和交换空间总和的内存
vm.swappiness = 10 #使用swap空间时物量内存还有多少可用,10 表示物
理存只有10%时才使用swap
#禁用IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
发表评论

相关文章