一、Linux系统启动过程
1. 开机自检
计算机加电后,BIOS会检查计算机的硬件状态,包括CPU、内存、硬盘等,确保所有的硬件可以正常工作。
2. MBR引导或GPT引导
开机自检完成后,BIOS会根据设置的启动顺序来查找启动设备(硬盘、U盘、光驱等)。MBR分区方案中,BIOS会从启动设备的MBR读取记录引导信息的扇区。这步的主要作用是,告诉计算机到启动设备的哪个位置去寻找操作系统。
3. GRUB菜单
完成MBR引导或GPT引导后,会启动引导加载程序,Linux系统上常见的引导加载程序是GRUB。GRUB是一个多操作系统引导管理器,允许用户在启动时选择不同的操作系统,或根据默认配置加载系统。GRUB会显示一个菜单,列出所有可启动的内核和操作系统选项。
4. 加载Linux内核
选择好操作系统后,GRUB会加载选定的操作系统内核以及初始内存映像(initramfs)。Linux内核是一个预先编译好的二进制可执行文件,介于各种硬件资源与系统程序之间, 负责资源分配与调度。初始内存映像是一个临时的文件系统,包含了启动Linux系统所需的基本工具和驱动程序。
5. init进程初始化
内核加载完成后,会启动init进程。这是Linux系统中的第一个进程,是系统所有进程的起点,没有这个进程,系统中任何进程都不会启动。init进程负责启动系统运行级别,根据配置文件(如/etc/inittab)或使用systemd的配置文件来启动系统服务和应用程序。
二、Linux服务控制
1. init和Systemd的比较
init依赖于串行执行Shell 脚本启动服务,导致效率低下,系统启动速度较慢。而Systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度 。
2. Systemd单元类型
2.1 Systemd单元概述
在Systemd中,不同类型的Systemd对象被称为单元,Systemd单元类型是用于定义系统启动和服务管理的不同种类的配置文件。每种单元类型对应不同的系统资源或服务,并定义了如何启动和管理这些资源或服务。
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器 |
Snapshot | .snapshot | 用于保存一个systemd的状态 |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述一组systemd的单元 |
2.2 systemctl命令 – 管理系统服务
systemctl命令来自英文词组system control的缩写,功能是管理系统服务。Systemd服务的管理就是通过systemctl命令来实现的。
systemctl [选项] 控制命令 服务
常见的控制命令:
控制命令 | 功能 |
---|---|
start | 启动 |
stop | 停止 |
reload | 重新加载服务配置 |
restart | 重启 |
enable | 设置开机自启动 |
disable | 取消开机自启动 |
reenable | 重新设置开机自启动 |
2.3 运行级别
运行级别 | Systemd单元类型 | 说明 |
---|---|---|
0 | target | 关机 |
1 | rescue.target | 单用户模式 |
2 | multi-user.target | 字符串界面多用户模式 |
3 | multi-user.target | 字符串界面多用户模式 |
4 | multi-user.target | 字符串界面多用户模式 |
5 | graphical.target | 图形化界面多用户模式 |
6 | reboot.target | 重启 |
-
可用使用runlevel查看系统当前的运行级别。
-
可用使用init命令设置系统的运行级别。
init 运行级别
三、Linux系统安全应用
1. 账号安全设置
1.1 系统账号清理
-
修改不需要登录的用户的Shell。
usermod -s /sbin/nologin 用户
-
锁定长期不使用的用户账号。
# usermod usermod -L 用户 # 锁定用户 usermod -U 用户 # 解锁用户 # passwd passwd -l 用户 # 锁定用户 passwd -u 用户 # 解锁用户
-
删除长期不用的用户账号。
userdel 用户 # 删除用户 userdel -r 用户 # 删除用户的同时删除用户家目录
1.2 锁定重要文件
-
锁定与用户相关,比如psswd、shadow等重要文件。
chattr +i 文件 # 锁定文件 chattr -i 文件 # 解锁文件
2. 密码安全设置
2.1 密码有效期设置
-
适用于新建用户:修改/etc/login.defs文件,设置新建用户的密码有效期。
PASS_MAX_DAYS # 密码的最长有效时间
-
适用于已建用户:使用change命令设置用户密码的有效期限。
change -M 有效天数 用户
3. 历史命令限制
3.1 设置历史命令条数
-
编辑/etc/profile文件,在里面设置历史命令的保存条数。
HISTSIZE=保存条数
保存文件后,执行下面命令,刷新系统环境。
source /etc/profile
4. 终端自动注销
4.1 设置终端最大空闲时间
-
编辑/etc/profile文件,在里面设置终端的最大空闲时间。当终端空闲时间超过设置的时间,终端就会断开连接。
TMOUT=空闲时间 # 单位为秒
-
保存文件后,执行下面命令,刷新系统环境。
source /etc/profile
四、用户提权设置
1. sudo命令– 授权普通用户执行管理员命令
sudo命令来自英文词组super user do的缩写,功能是授权普通用户执行管理员命令。
sudo 命令
在Ubuntu系统中,默认sudo可用让普通用户使用所有超级用户可以使用的命令。而在CentOS系统中,还需要通过设置授权普通用户执行某些指定的命令。