linux文件权限深入了解(下)

1.删除文件的权限逻辑

结论:删除文件,看「文件所在父目录」的 w 权限,和文件本身的 w 权限无关

实战验证:

创建目录 + 文件

cpp 复制代码
mkdir test_dir
touch test_dir/file.txt

设置目录权限为 777(所有用户有 w 权限),文件权限 644(其他用户无 w)

cpp 复制代码
chmod 777 test_dir/
chmod 644 test_dir/file.txt

切换为普通用户,执行:

cpp 复制代码
# 能删除文件(父目录有 w)
rm test_dir/file.txt
# 不能编辑文件内容(文件本身无 w)
vim test_dir/file.txt

现象:能删文件,但不能改文件内容。

案例 1:文件只读,父目录权限正常 → 可以删除:
cpp 复制代码
# 创建目录与文件
mkdir dir1
touch dir1/a.txt

# 父目录:rwxr-xr-x(有w、有x);文件:仅只读,无写权限
chmod 755 dir1
chmod 444 dir1/a.txt

# 测试1:修改文件内容 → 失败(文件无w权限)
echo 123 > dir1/a.txt   # Permission denied

# 测试2:删除文件 → 成功(只看父目录w+x)
rm dir1/a.txt
案例 2:文件全开权限,父目录无 w → 无法删除:
cpp 复制代码
mkdir dir2
touch dir2/b.txt

chmod 555 dir2         # 目录 r-x,去掉w权限
chmod 777 dir2/b.txt    # 文件开放所有权限

rm dir2/b.txt           # 报错 Permission denied

案例 3:目录有 w、无 x → 无法删除(缺失准入权限):

cpp 复制代码
mkdir dir3
touch dir3/c.txt

chmod 666 dir3  # 目录 rw-:有w,无x

ls dir3         # 能看到文件名(目录有r权限)
cd dir3         # 无法进入(无x)
rm dir3/c.txt   # 无法删除(无x,不能访问目录条目)

2.默认权限:umask 权限掩码

新建文件 / 目录的默认权限由 umask 决定,系统默认 umask=022。 计算规则:

  1. 目录最大权限 777 - umask = 目录默认权限
  2. 文件最大权限 666(文件默认无执行位) - umask = 文件默认权限

默认 umask 022 计算:

  • 目录:777 - 022 = 755
  • 文件:666 - 022 = 644

和我们日常看到的默认权限完全一致。

查看 / 临时修改掩码:

cpp 复制代码
umask          # 查看当前掩码
umask 007      # 临时修改掩码为 007

3.白名单配置

一开始我们进入自己的服务器上时,一般都是以root(超级用户) 用户登录的。root用户有可以随意查看其他用户的文件的权限。但是其他用户想要root权限的话就需要进行sudo(免密执行命令)这个用户能够执行这个命令的前提是他在服务器的白名单上。

让特定用户无需密码执行 sudo 命令,通过 visudo 编辑安全的 sudo 配置:

cpp 复制代码
# 1. 安全编辑sudoers文件(必须用visudo,避免语法错误)
sudo visudo

# 2. 添加规则(根据需求选一种)
# 方式1:允许user1无密码执行所有命令
user1 ALL=(ALL) NOPASSWD: ALL

# 方式2:仅允许user2无密码执行特定命令(推荐)
user2 ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx, /usr/bin/lsblk

# 3. 保存退出(vi/vim按Esc,输入:wq回车)

4.权限 "一次确认":文件执行的匹配规则

Linux 内核按固定顺序匹配权限,找到第一个匹配项后立即停止检查,不再看后续权限位

1. 核心匹配顺序

内核检查权限时严格遵循以下优先级,匹配即停止

  1. root 用户特权:如果进程 EUID=0(root),直接拥有所有权限,跳过后续检查

  2. 属主匹配 :进程 EUID 与文件所有者 UID 一致 → 仅应用属主 (u) 权限,忽略组和其他权限

  3. 属组匹配 :进程 EGID 或附加组 GID 与文件所属组 GID 一致 → 仅应用属组 (g) 权限,忽略其他权限

  4. 其他匹配 :前两项都不匹配 → 应用其他用户 (o) 权限

cpp 复制代码
# 创建文件,属主alice,属组dev,权限640(u=rw-, g=r--, o=---)
sudo touch test.txt
sudo chown alice:dev test.txt
sudo chmod 640 test.txt

# 用alice用户操作(属主匹配,只看u权限)
su - alice
echo "test" > test.txt  # 成功(u有w权限)
exit

# 用dev组其他用户操作(属组匹配,只看g权限)
su - charlie  # charlie属于dev组
echo "test" > test.txt  # 失败(g无w权限)
cat test.txt    # 成功(g有r权限)
exit

权限匹配的 "不叠加" 原则:

cpp 复制代码
# 创建文件,权限u=r--, g=rwx, o=---
touch test2.txt
chmod 470 test2.txt

# 用文件所有者操作(只看u权限,即使g权限更开放)
cat test2.txt    # 成功(u有r)
echo "123" > test2.txt  # 失败(u无w)
./test2.txt      # 失败(u无x)

谢谢

相关推荐
码农学院32 分钟前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
爱写代码的森7 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
大耳朵-小飞象9 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技10 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
HLC++10 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室12 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影12 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙13 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码13 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
生活爱好者!13 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器