#Linux进阶Day04 用户 sudo 提权、IP 地址配置、SELinux 安全管理

声明:本文仅作学习交流使用,引用需标明出处。

如有谬误,敬请指正


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 地址基础概念

  1. 作用:网络中唯一标识一台主机,是主机间通信的基础
  2. 格式 :32 位二进制数,按 8 位分段,转换为十进制后用 . 分隔,即 点分十进制(如 192.168.1.1)
  3. 取值范围:每个分段 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 网段判定规则

  1. 网段命名:网络位不变,主机位全为 0(如 192.168.1.1 属于 192.168.1.0 网段)
  2. 同网段判定:网络位完全相同,主机位不同(以默认 C 类掩码 /24 为例,192.168.1.1 和 192.168.1.2 为同网段)
  3. 不同网段:网络位存在差异(以默认 C 类掩码 /24 为例,192.168.1.50 和 192.168.2.80 为不同网段)

📌 注意:网段判定必须基于子网掩码,无掩码时无法准确判断。

2.4 子网掩码(划分网络 / 主机位的核心)

  1. 作用 :明确 IP 地址的 网络位和主机位 ,二进制 1 表示网络位,0 表示主机位
  2. 十进制转换 :将二进制的 8 位连续 1 转换为 255,便于记忆和配置
  3. 默认子网掩码(与 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
  1. 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 核心概述

  1. 定义 :由美国国家安全局(NSA)开发的 Linux 内核安全模块,基于 强制访问控制(MAC),2003 年并入 Linux 2.6 主线内核
  2. 作用:强化 Linux 系统安全,限制进程 / 用户的操作权限,弥补传统 Linux 自主访问控制(DAC)的不足
  3. 三种运行状态
状态 说明
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 才能正常运行,修改配置文件 + 重启是标准做法。


四、整体学习总结(核心掌握点)

  1. sudo 提权 :掌握授权配置格式、visudo 用法、免密码 / 别名 / 组授权 / 命令取反的配置技巧,能独立为用户 / 组配置精准的提权规则;

  2. IP 地址 :理解 A / B / C 类 IP 的网络 / 主机位划分、子网掩码的作用,熟练使用 nmcli 进行 永久 IP 配置(Linux 运维高频操作),区分临时 / 永久配置的差异;

  3. SELinux :掌握三种状态的含义,能通过 getenforce / setenforce 查看 / 临时切换状态,能修改配置文件 永久禁用 SELinux(实际运维中部分场景需关闭);

  4. 通用技巧:掌握 Linux 用户 / 组创建、密码设置、网卡状态排查的基础命令,理解配置文件修改 + 重启生效的 Linux 通用规则。


相关推荐
bu_shuo2 小时前
IP相关知识
网络·网络协议·tcp/ip
深蓝轨迹2 小时前
TCP/IP 网络模型面试核心考点总结02(基础篇)
网络·tcp/ip·面试
风酥糖3 小时前
在Termux中部署一个简单的服务导航页
linux·服务器·安卓
不一样的故事1263 小时前
软件测试在未来10年
大数据·网络·人工智能·安全
风曦Kisaki3 小时前
# Linux进阶Day03逻辑卷管理与RAID磁盘阵列
linux·运维·5g
与数据交流的路上3 小时前
linux-系统日志的归档
linux·运维·javascript
释怀不想释怀3 小时前
硬盘分区:fdisk
linux·运维·服务器
Astro_ChaoXu3 小时前
GAMSE使用日志与教程(高分辨率光谱数据缩减)
linux·数据库·python
anscos3 小时前
静态分析:解锁 ADAS 安全标准的密钥
安全