C02S11-Linux系统的安全与控制

一、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单元类型说明
0target关机
1rescue.target单用户模式
2multi-user.target字符串界面多用户模式
3multi-user.target字符串界面多用户模式
4multi-user.target字符串界面多用户模式
5graphical.target图形化界面多用户模式
6reboot.target重启
  • 可用使用runlevel查看系统当前的运行级别。

  • 可用使用init命令设置系统的运行级别。

    init 运行级别
    

三、Linux系统安全应用

1. 账号安全设置

1.1 系统账号清理

  1. 修改不需要登录的用户的Shell。

    usermod -s /sbin/nologin 用户
    
  2. 锁定长期不使用的用户账号。

    # usermod
    usermod -L 用户 # 锁定用户
    usermod -U 用户 # 解锁用户
    
    # passwd
    passwd -l 用户 # 锁定用户
    passwd -u 用户 # 解锁用户
    
  3. 删除长期不用的用户账号。

    userdel 用户 # 删除用户
    userdel -r 用户 # 删除用户的同时删除用户家目录
    

1.2 锁定重要文件

  1. 锁定与用户相关,比如psswd、shadow等重要文件。

    chattr +i 文件 # 锁定文件
    chattr -i 文件 # 解锁文件
    

2. 密码安全设置

2.1 密码有效期设置

  1. 适用于新建用户:修改/etc/login.defs文件,设置新建用户的密码有效期。

    PASS_MAX_DAYS # 密码的最长有效时间
    
  2. 适用于已建用户:使用change命令设置用户密码的有效期限。

    change -M 有效天数 用户
    

3. 历史命令限制

3.1 设置历史命令条数

  1. 编辑/etc/profile文件,在里面设置历史命令的保存条数。

    HISTSIZE=保存条数
    

    保存文件后,执行下面命令,刷新系统环境。

    source /etc/profile
    

4. 终端自动注销

4.1 设置终端最大空闲时间

  1. 编辑/etc/profile文件,在里面设置终端的最大空闲时间。当终端空闲时间超过设置的时间,终端就会断开连接。

    TMOUT=空闲时间 # 单位为秒
    
  2. 保存文件后,执行下面命令,刷新系统环境。

    source /etc/profile
    

四、用户提权设置

1. sudo命令– 授权普通用户执行管理员命令

sudo命令来自英文词组super user do的缩写,功能是授权普通用户执行管理员命令。

sudo 命令

在Ubuntu系统中,默认sudo可用让普通用户使用所有超级用户可以使用的命令。而在CentOS系统中,还需要通过设置授权普通用户执行某些指定的命令。

在执行 `make` 命令时遇到错误提示 `arm-v01c02-linux-musleabi-gcc: Command not found`,通常意味着系统无法找到指定的交叉编译器。以下是几种可能的原因及对应的解决方法: ### 1. 检查交叉编译工具链是否已正确安装 确认交叉编译工具链 `arm-v01c02-linux-musleabi-` 是否已经安装在系统中。可以通过以下命令检查是否存在该编译器: ```bash which arm-v01c02-linux-musleabi-gcc ``` 如果没有输出路径,则表示该工具链未安装或未正确配置。需要下载并安装该工具链,例如从官方或第三方提供的预编译包中获取。 ### 2. 配置环境变量 PATH 确保交叉编译工具链的可执行文件路径已添加到系统的 `PATH` 环境变量中。可以编辑 `~/.bashrc` 或 `/etc/profile` 文件,添加如下内容: ```bash export PATH=/path/to/arm-v01c02-linux-musleabi/bin:$PATH ``` 然后执行以下命令使配置生效: ```bash source ~/.bashrc ``` 替换 `/path/to/arm-v01c02-linux-musleabi` 为实际的工具链安装路径。 ### 3. 检查 Makefile 中的编译器名称 确保 `Makefile` 中使用的编译器名称系统中安装的工具链名称一致。例如,如果工具链的前缀是 `arm-v01c02-linux-musleabi-`,则 `Makefile` 中的 `CC` 变量应设置为: ```makefile CC = arm-v01c02-linux-musleabi-gcc ``` 如果名称不匹配,修改为正确的编译器名称。 ### 4. 创建符号链接(Symbolic Link) 如果工具链已经安装,但名称 `Makefile` 中使用的不一致,可以创建符号链接。例如,如果实际的编译器名称为 `arm-none-linux-gnueabi-gcc`,可以执行以下命令创建符号链接: ```bash sudo ln -s /usr/bin/arm-none-linux-gnueabi-gcc /usr/bin/arm-v01c02-linux-musleabi-gcc ``` 这样,系统就能识别 `arm-v01c02-linux-musleabi-gcc` 命令并将其映射到实际存在的编译器。 ### 5. 权限问题 如果使用了 `sudo` 执行 `make` 命令,但提示找不到编译器,可能是由于 `sudo` 的环境变量普通用户的环境变量不同。可以通过以下方式解决: - 使用 `sudo su` 切换到 root 用户,然后手动设置 `PATH`。 - 修改 `sudoers` 文件,确保 `PATH` 包含交叉编译工具链的路径。 ### 6. 检查工具链依赖项 某些交叉编译工具链依赖于特定的库文件(如 `libstdc++`、`glibc` 等)。如果缺少这些依赖项,可能导致编译器无法运行。可以通过以下命令安装缺失的依赖: ```bash sudo apt-get install libstdc++6 ``` ### 7. 验证工具链的完整性 如果工具链已经安装,但仍然无法找到编译器,可能是工具链文件损坏或未完整安装。尝试重新安装工具链,确保所有文件完整。 ### 8. 使用容器或虚拟机 如果在主机环境中配置工具链遇到困难,可以考虑使用容器(如 Docker)或虚拟机(如 VirtualBox)来运行一个已经配置好工具链的开发环境。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值