Linux提权管理与文件权限实战笔记(CentOS7)

摘要:本文讲解Linux susudo提权操作,区分登录shell与非登录shell,详解sudoers配置、免密授权、日志审计;同时梳理文件目录rwx权限、chmod数字/符号授权方式,附带常用命令权限对照表。

一、提权管理 su

su用于切换用户身份,区分登录shell非登录shell,环境变量加载行为不一样。

su 切换用户

# su 用户名:非登录shell,继承当前终端环境变量,不加载目标用户配置
su root

# su -l 用户名(等价 su - 用户名):登录shell,完整加载目标用户的环境配置
su -l root

# 不加用户名,默认切换root
su
# 登录shell示例,-bash
[zjx@localhost dir1 17:07:43]$ su -l root
密码:
[root@localhost ~ 17:07:53]# echo $0
-bash

# 非登录shell示例,bash
[zjx@localhost dir1 16:19:37]$ su root
密码:
[root@localhost dir1 17:06:58]# echo $0
bash

⚠️踩坑:su root非登录shell,部分环境变量不会加载,容易出现命令找不到问题;生产切换root优先使用 su - root

su -c 临时执行一条命令

切换到指定用户,仅执行单条命令,执行完成立刻退回原用户,不会进入对方交互shell。
命令必须使用引号包裹。

# 格式:su 用户名 -c '命令'
[zz@localhost ~ 17:21:49]$ su -c 'echo abc >> /etc/passwd'
密码:
[zz@localhost ~ 17:30:32]$

su‑c 与 sudo 对比

命令需要密码特点
su - root -c "cmd"目标用户密码(root密码)临时执行一条命令,需要知道root密码
sudo cmd当前普通用户自己的密码无需知道root密码,依靠/etc/sudoers做授权配置

二、sudo提权

sudo:普通用户临时以其他用户(通常root)身份执行命令,执行完立刻回到普通用户环境。

  1. 输入自己账号的密码,不是root密码
  2. 所有sudo操作会记录审计日志:/var/log/secure
# 基础语法
sudo [-u 用户名] 命令

# 示例:以root执行命令
sudo head /etc/shadow

# 示例:以zjx用户身份执行命令
sudo -u zjx ls /home/zjx

sudo配置

方式1:visudo 修改主配置文件(不推荐直接改)

visudo会做语法校验,不要直接vi编辑/etc/sudoers,写错会导致sudo直接崩溃。

visudo

配置片段

#用户配置
root    ALL=(ALL)       ALL
#用户名    主机=(可切换身份)    允许执行命令

#组配置,%代表组,把用户加入wheel组即可获得sudo权限
%wheel  ALL=(ALL)       ALL

方式2:/etc/sudoers.d 下放自定义配置(推荐)

/etc/sudoers.d/新建独立配置文件,不要修改主配置,便于维护。

#查看自定义配置文件
ls /etc/sudoers.d

#配置示例 zjx文件
cat /etc/sudoers.d/zjx
zjx ALL=(ALL)   NOPASSWD:/bin/cat
# NOPASSWD:执行sudo cat不需要输入密码,仅授权cat命令

⚠️踩坑:下放的配置文件语法错误会造成sudo全部失效,写完建议用visudo -c校验语法。

sudo日志审计

所有sudo操作日志保存在/var/log/secure

#过滤sudo相关日志
grep sudo /var/log/secure

日志示例:

Sep  9 10:31:18 localhost sudo:     zjx : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/zjx ; USER=root ; COMMAND=/bin/head /etc/shadow
Sep  9 10:33:36 localhost sudo:     zjx : TTY=pts/0 ; PWD=/home/zjx ; USER=root ; COMMAND=/bin/head /etc/shadow
Sep  9 10:33:36 localhost sudo: pam_unix(sudo:session): session opened for user root by zjx(uid=0)
Sep  9 10:33:36 localhost sudo: pam_unix(sudo:session): session closed for user root

三、文件权限管理

什么是文件权限

Linux 是一个多用户多任务操作系统,同一台机器上可能同时存在多个用户。文件权限(File Permission)就是操作系统用来控制"谁能读、谁能写、谁能执行"某个文件或目录的一套规则,是 Linux 安全模型的核心基础。

如果没有文件权限管理,任何用户都能随意读取、修改甚至删除他人的文件,系统将毫无安全性可言。因此,理解并掌握文件权限,是 Linux 运维和开发的基本功。

为什么需要文件权限

  1. 保护隐私:防止其他用户读取你的私人文件(如密钥、配置文件)。
  2. 防止误操作:避免普通用户误删或篡改系统关键文件。
  3. 权限最小化:只给用户完成任务所需的最小权限,降低安全风险。
  4. 审计追踪:配合属主、属组信息,可以追踪文件归属与操作来源。

权限的核心三要素

Linux 文件权限围绕三个维度展开:

维度说明
属主(u)文件的所有者,通常是创建者
属组(g)文件所属的用户组,组内成员共享权限
其他用户(o)既不是属主、也不属于属组的其他所有人

每个文件都同时记录这三类用户各自的 rwx 权限,共同决定谁能对该文件做什么操作。

权限位介绍

第一位:文件类型
- 普通文件
d 目录
l 软链接

第2‑4位 u(属主用户权限)
第5‑7位 g(属组权限)
第8‑10位 o(其他用户权限)

权限优先级:属主用户权限 > 属组权限 > 其他用户权限

rwx含义

符号含义文件作用目录作用
r读取文件内容列出目录内文件名
w修改、覆盖文件内容在目录创建、删除文件
x执行可以运行程序脚本可以进入(cd)该目录

权限两种表示方式

  1. 数字八进制表示
  • r = 4
  • w = 2
  • x = 1
  1. 符号表示
  • u 属主用户
  • g 属组
  • o 其他用户

chmod 修改权限

#数字法
chmod 755 zjx.txt

#符号法
chmod u+r zjx.txt       # 属主增加读权限
chmod g-w test.txt      # 去掉属组写权限
chmod o=r test.txt      # 设置其他用户只有读权限

✅面试高频注意点

  • 文件:设置w权限建议搭配r;设置x权限建议搭配r
  • 目录:设置r权限必须搭配x;设置w权限必须搭配rx

Linux常用命令权限汇总表

命令源目录权限源文件权限目标目录权限简要说明
cdx进入目录,仅需要目录x权限
lsr列出目录文件名
ls -lrx查看文件详细属性
mkdirwx(父目录)父目录下创建目录
rmdirwx(父目录)删除空目录
cat / head / morexr读取文件内容
mvwx(父目录)NONEwx移动文件,文件本身不需要权限
cprrwx复制文件
touchwx(父目录)w创建/刷新时间戳
rmwx(父目录)NONE删除文件,只看父目录权限
chmodx属主/root修改文件权限
chownxroot修改属主属组
vi编辑已有文件xw修改文件内容

避坑总结

  1. su root是非登录shell,环境不全;切换root优先 su - root
  2. su -c需要目标用户密码,sudo只需要自己的密码
  3. 修改sudo配置优先放到/etc/sudoers.d/目录,不要直接改主文件,修改后做语法校验。
  4. sudo审计日志位置:/var/log/secure,排查sudo权限报错优先看该日志。
  5. 目录权限:r必须配合x,w必须配合rx;删除文件看父目录权限,不看文件本身权限。

学习笔记小结【面试速记】

  1. su不带:非登录shell,继承当前环境;带‑ / -l:登录shell,加载目标用户完整环境。
  2. su -c临时执行命令需要目标账号密码;sudo依靠sudoers授权,输入自身密码。
  3. visudo编辑sudo配置;自定义配置放在/etc/sudoers.d/下;%wheel代表wheel用户组。
  4. 文件权限优先级:u>g>o;r=4,w=2,x=1。
  5. 删除文件的权限看父目录w权限,和被删文件本身权限无关。
    `
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐