声明:本文仅作学习交流使用,引用需标明出处。
如有谬误,敬请指正
Day04 Linux 学习内容详细总结
本次内容核心围绕 Linux 用户 sudo 提权、IP 地址配置、SELinux 安全管理 三大核心知识点展开,包含基础概念、命令用法、实操案例和配置技巧,均为 Linux 系统管理的高频实用内容,以下按模块逐一详细总结:
一、用户提权(sudo)
1.1 核心概述
sudo 提权是 Linux 中让 普通用户临时以 root / 指定特权用户身份 执行高权限命令的操作,无需共享 root 密码,是系统权限管理的核心方式。核心特点为:管理员预先授权、用户验证自身口令、仅执行授权命令。
💡 核心理念:用自己的密码,借别人的权限,干自己干不了的事。
1.2 基本用法
sudo 提权的两种核心命令格式,可指定目标提权用户,未指定时默认提权为 root:
bash
# 方式1:直接执行特权命令(默认提权为 root)
sudo 特权命令
# 示例:sudo touch /root/test.txt
# 方式2:提权为指定用户执行命令
sudo [-u 目标用户] 特权命令
# 示例:sudo -u tom touch /tmp/test.txt
1.3 配置 sudo 授权(核心)
配置方式(二选一,推荐前者)
| 配置命令 | 优点 | 缺点 |
|---|---|---|
visudo |
自带 语法检测,避免配置错误导致 sudo 失效 | 编辑无颜色高亮 |
vim /etc/sudoers |
编辑有颜色高亮,操作更直观 | 无语法检测,错误配置会导致 sudo 无法使用 |
⚠️ 强烈推荐使用
visudo,它能有效防止因配置错误导致 sudo 功能失效。
sudo 核心机制
sudo 是"替身攻击"------你用自己的密码召唤替身(目标用户),替身帮你干活,但替身的环境、权限、留下的痕迹都跟原主无关。
例如:
- 若提权后创建文件,提权为谁,文件归属就是谁,而非执行 sudo 的原始用户
- 文件所有者 = 提权目标用户,与原始用户无关
授权记录标准格式
用户/组 主机列表=(允许提权的用户) 命令绝对路径[,第二个命令的绝对路径][,第n个命令的绝对路径]
格式说明:
- 组配置需在组名前加
%(如%game) - 优先级:用户单独配置 > 组配置(当用户和组配置冲突时,以用户配置为准)
- 多条规则匹配时,最后一条生效(可在文件底部添加例外规则覆盖前面的通用规则)
- 默认 root 配置:
root ALL=(ALL) ALL(任意主机、提权为任意用户、执行任意命令)
关键验证命令
bash
sudo -l # 查看当前用户的 sudo 提权授权信息,执行需输入自身用户密码
1.4 经典实操案例(覆盖所有核心配置场景)
案例1:单用户精准授权
bash
# 配置 tina:全权限授权
tina ALL=(ALL) ALL
# 配置 paul:限定授权(仅能提权为 lisi,仅执行 touch 命令)
paul ALL=(lisi) /usr/bin/touch
验证结果:
- paul 执行
sudo -u lisi touch /tmp/test.txt✅ 成功 - paul 执行
sudo mkdir /test❌ 报错(无权限) - paul 执行
sudo -u root touch /tmp/test.txt❌ 报错(不允许提权为 root)
案例2:组授权 + 命令取反
bash
# 组授权:game 组(bella、booker)成员可提权为 root 执行任意命令
%game ALL=(root) ALL
# 用户取反授权:可执行 /usr/bin 下所有命令,排除 touch 命令
zhangsan ALL=(root) /usr/bin/*, !/usr/bin/touch
核心技巧:
- 多个命令用
,分隔 - 取反用
! - 命令必须写绝对路径
- 取反命令优先级高于允许命令
案例3:免密码提权
bash
# 核心配置:在授权规则前加 NOPASSWD:
lisi ALL=(root) NOPASSWD:ALL
效果:
- lisi 执行 sudo 命令时,无需输入自身密码,直接执行高权限操作
- 注意:该配置只对匹配的命令生效,执行其他未授权的命令仍需密码或会被拒绝
案例4:sudo 别名配置(简化多用户 / 多命令配置)
- 别名作用:将多个用户 / 主机 / 命令分组,提高配置可重用性和可读性,别名必须全大写
- 注意:别名本质仍是组的概念,用于简化配置
三种别名格式:
| 别名类型 | 格式 |
|---|---|
| 用户别名 | User_Alias 别名=用户1,用户2,... |
| 主机别名 | Host_Alias 别名=主机1,主机2,... |
| 命令别名 | Cmnd_Alias 别名=命令1,命令2,... |
实操配置:
bash
User_Alias CLASS=eve,natasha,lala
CLASS ALL=(root) NOPASSWD:ALL
实现 3 个用户免密码全权限提权。
1.5 通用前置操作
创建用户 / 组、设置密码的基础命令,为 sudo 授权做准备:
bash
# 1. 创建用户 / 组
useradd 用户名
groupadd 组名
# 2. 用户加入组(创建时指定附加组)
useradd -G 组名 用户名 # -G 为附加组
# 3. 已有用户加入组
usermod -aG 组名 用户名 # -a 表示追加,避免覆盖原有附加组
# 4. 设置密码(--stdin 参数适用于 CentOS/RHEL 系列)
echo "密码" | passwd --stdin 用户名
补充:sudo 重定向陷阱:为什么文件所有者不是 root?
问题现象
bash
sudo -u root echo "hello" >> /public/test.txt
ls -l /public/test.txt
# -rw-r--r-- 1 james james ... 所有者是 james,不是 root!
已提权为root的james创建/public/test.txt文件的归属居然不是root,为什么?
原因分析
james 执行命令
↓
sudo 提权为 root
↓
root 执行 echo "jamesjames" ← 这部分是 root
↓
输出结果返回给 james 的 shell
↓
james 的 shell 执行 >> /public/james.txt ← 这部分是 james
↓
文件所有者 = james
| 步骤 | 执行者 | 操作 |
|---|---|---|
| 1 | james | 执行整个命令 |
| 2 | root(sudo) | 执行 echo |
| 3 | james(当前 shell) | 执行 >> 重定向 |
简单讲:重定向>不是命令,提权不包含重定向>符号
核心 :
sudo只能提权命令本身,重定向由当前用户的 shell 执行,所以文件所有者是当前用户,不是 root。
二、IP 地址配置
2.1 IP 地址基础概念
- 作用:网络中唯一标识一台主机,是主机间通信的基础
- 格式 :32 位二进制数,按 8 位分段,转换为十进制后用
.分隔,即 点分十进制(如 192.168.1.1) - 取值范围:每个分段 0-255,最大 IP 为 255.255.255.255(广播地址)
2.2 IP 地址分类与网络 / 主机位(核心)
IP 地址分 5 类,常用 A / B / C 类,核心区分网络位(标识网段)和主机位(标识网段内主机),默认规则如下:
| 类别 | 地址范围 | 网络位 + 主机位规则 | 核心特征 |
|---|---|---|---|
| A 类 | 1-127 | 网.主.主.主 | 第一段为网络位,后三段为主机位 |
| B 类 | 128-191 | 网.网.主.主 | 前两段为网络位,后两段为主机位 |
| C 类 | 192-223 | 网.网.网.主 | 前三段为网络位,最后一段为主机位 |
| D 类(组播) | 224-239 | - | 用于组播通信,非主机标识 |
| E 类(科研) | 240-255 | - | 科研专用,日常不使用 |
2.3 网段判定规则
- 网段命名:网络位不变,主机位全为 0(如 192.168.1.1 属于 192.168.1.0 网段)
- 同网段判定:网络位完全相同,主机位不同(以默认 C 类掩码 /24 为例,192.168.1.1 和 192.168.1.2 为同网段)
- 不同网段:网络位存在差异(以默认 C 类掩码 /24 为例,192.168.1.50 和 192.168.2.80 为不同网段)
📌 注意:网段判定必须基于子网掩码,无掩码时无法准确判断。
2.4 子网掩码(划分网络 / 主机位的核心)
- 作用 :明确 IP 地址的 网络位和主机位 ,二进制
1表示网络位,0表示主机位 - 十进制转换 :将二进制的 8 位连续
1转换为 255,便于记忆和配置 - 默认子网掩码(与 A / B / C 类一一对应):
| 类别 | 二进制子网掩码 | 十进制子网掩码 | CIDR 简写 |
|---|---|---|---|
| A 类 | 11111111.00000000.00000000.00000000 | 255.0.0.0 | /8 |
| B 类 | 11111111.11111111.00000000.00000000 | 255.255.0.0 | /16 |
| C 类 | 11111111.11111111.11111111.00000000 | 255.255.255.0 | /24 |
- Linux 中常用简写配置 :如
192.168.8.100/24,代表 IP 为 192.168.8.100,子网掩码为 255.255.255.0
2.5 IP 地址配置方式(临时 + 永久,重点为永久)
方式1:临时配置(ifconfig,重启失效)
bash
# 查看 IP 信息
ifconfig # 所有网卡
ifconfig 网卡名 # 指定网卡(如 ens160)
# 配置临时 IP
ifconfig ens160 192.168.8.100/24
⚠️ 注意 :若虚拟机无
ens开头网卡,可先执行nmcli n on开启网络管理,再操作。
方式2:永久配置(nmcli,核心推荐,重启不失效)
基于 Linux 默认网络管理服务 NetworkManager (开机自启,管理网卡 / IP / 路由 / DNS),核心用 nmcli 命令行配置,步骤如下:
bash
# 1. 检查 NetworkManager 状态
systemctl status NetworkManager
systemctl is-enabled NetworkManager
# 2. 查看网卡连接信息(关键:用连接名配置,非设备名)
nmcli connection show
# 输出示例:NAME=ens160, DEVICE=ens160
# 3. 永久配置 IP
nmcli connection modify 连接名 ipv4.method manual ipv4.addresses IP/子网掩码 connection.autoconnect yes
# 4. 激活网卡使配置生效
nmcli connection up 连接名
# 5. 验证
ifconfig 网卡名 # 查看 IP,重启后再次验证,IP 仍存在即为永久生效
参数说明:
ipv4.method manual:手动配置 IP(非 DHCP 自动获取)connection.autoconnect yes:开机自动连接
排错提示 :配置失败提示无网卡时,先执行 nmcli n on,再重新配置。
三、SELinux(Security-Enhanced Linux)
3.1 核心概述
- 定义 :由美国国家安全局(NSA)开发的 Linux 内核安全模块,基于 强制访问控制(MAC),2003 年并入 Linux 2.6 主线内核
- 作用:强化 Linux 系统安全,限制进程 / 用户的操作权限,弥补传统 Linux 自主访问控制(DAC)的不足
- 三种运行状态:
| 状态 | 说明 |
|---|---|
enforcing |
强制启用(默认),违反 SELinux 规则的操作会 被禁止 并记录日志 |
permissive |
宽松模式,违反规则的操作 不禁止,但会记录日志(用于调试) |
disabled |
禁用,SELinux 完全不工作,关闭安全防护 |
3.2 状态查看与切换
1. 查看 SELinux 状态
bash
getenforce # 直接输出当前状态:Enforcing / Permissive / Disabled
2. 临时切换状态(仅在 enforcing 和 permissive 间切换,重启失效)
bash
setenforce 0 # 切换为宽松模式(permissive)
setenforce 1 # 切换为强制模式(enforcing)
⚠️ 注意 :无法通过
setenforce直接切换为disabled,需修改配置文件。
3. 永久切换状态(修改配置文件,需重启生效)
bash
# 1. 编辑配置文件
vim /etc/selinux/config
# 2. 修改核心参数
SELINUX=disabled # 可选值:enforcing / permissive / disabled
# 3. 重启系统
reboot
# 4. 验证
getenforce # 确认状态为修改后的值
💡 实际运维说明:部分场景(如某些第三方应用、NFS 共享)需要关闭 SELinux 才能正常运行,修改配置文件 + 重启是标准做法。
四、整体学习总结(核心掌握点)
-
sudo 提权 :掌握授权配置格式、
visudo用法、免密码 / 别名 / 组授权 / 命令取反的配置技巧,能独立为用户 / 组配置精准的提权规则; -
IP 地址 :理解 A / B / C 类 IP 的网络 / 主机位划分、子网掩码的作用,熟练使用
nmcli进行 永久 IP 配置(Linux 运维高频操作),区分临时 / 永久配置的差异; -
SELinux :掌握三种状态的含义,能通过
getenforce / setenforce查看 / 临时切换状态,能修改配置文件 永久禁用 SELinux(实际运维中部分场景需关闭); -
通用技巧:掌握 Linux 用户 / 组创建、密码设置、网卡状态排查的基础命令,理解配置文件修改 + 重启生效的 Linux 通用规则。