linux初级_权限管理

TJCcc 发布于 2025-11-04 25 次阅读


权限这一块,相信大家都比较熟悉基础知识,就是rwx三者分别代表什么含义,怎么修改文件或目录的权限(chmod),那么接下来讲讲大家容易忽略的,你看到一个文件是rwx权限,那么他就真的可读可写可执行吗?答案是不一定!

一、rwx对文件的作用

1、仅r对文件来说只有只读权限

如果想写入的话可以强制执行:wq!

2、仅w对文件来说只有只写权限

很奇怪,我这个root超级管理员居然能查看权限是 -w- --- --- 的文件???

3、仅x对文件来说啥都不能干

很奇怪,我这个root超级管理员居然能查看权限是 --x --- --- 的文件???

但是不能写,但是可以执行

4、总结

要想查看文件,那么该文件必须要有r权限

要想读写文件,那么该文件必须要有rw权限

要想执行文件,那么该文件必须要有rx权限

二、rwx对目录的作用

1、仅r对目录来说啥都不能干

无法对目录下的文件做任何操作

2、仅w对目录来说啥都不能干

无法对目录下的文件做任何操作

3、仅x对目录来说只能进到目录下

没有其他权限

4、总结

想要正常对该目录下的文件进行查看以及写入操作,则目录必须得有:r和x权限

想要正常对该目录下的文件进行创建(touch),移动(move),删除(rm)操作,则目录必须得有:r和x和w权限

三、系统默认权限

文件最高权限:666

目录最高权限:777

umask值默认为022

创建文件的默认权限:644 = 文件最高权限 - umask = 666 - 022

创建目录的默认权限:755 = 目录最高权限 - umask = 777 - 022

小TIPS:

如果你设置umask值成有奇数位,则创建文件时的默认权限=二者相减后,奇数位+1

例如,你把umask设置成032,那么你创建文件时默认权限为666-032=634,此时发现十位上是奇数,那么加一,变成644。

四、隐藏权限

我们通常熟悉的权限是 基本权限,即 r(读)、w(写)、x(执行)以及它们对应的用户身份 u(所有者)、g(所属组)、o(其他人)。

而“隐藏权限”指的是在基本权限之上,提供更精细、更强大的访问控制能力的扩展属性。它们主要有三类:

  1. 文件扩展属性
  2. 文件访问控制列表
  3. 文件属性

1. 文件扩展属性

这类属性通常用于给可执行文件设置特殊的权限行为。主要有两个:

a) setuid (Set User ID)

  • 符号表示: sS
  • 位置: 在文件所有者的执行权限 x 位上。
  • 作用: 当一个可执行文件被设置了 setuid 后,任何用户在执行这个文件时,都会临时拥有文件所有者的权限
  • 经典例子: /usr/bin/passwd
    • 这个命令用于修改用户密码,它需要写入 /etc/shadow 文件。
    • /etc/shadow 文件只有 root 用户才有写权限。
    • 普通用户执行 passwd 时,因为 passwd 程序被设置了 setuid 且所有者是 root,所以执行过程中就临时拥有了 root 权限,从而可以修改 /etc/shadow
  • 查看与设置:
    • 查看:ls -l /usr/bin/passwd 会看到 -rwsr-xr-x,那个 s 就是 setuid
    • 设置:
      • 符号法:chmod u+s filename
      • 数字法:chmod 4xxx filename4 代表 setuidxxx 是基本权限,如 4755

b) setgid (Set Group ID)

  • 符号表示: sS
  • 位置: 在文件所属组的执行权限 x 位上。
  • 作用: 有两种情况:
    1. 对文件: 与 setuid 类似,执行该文件的用户会临时拥有文件所属组的权限。
    2. 对目录: 非常重要且常用。当一个目录被设置 setgid 后,任何用户在该目录下新建的文件或子目录,其所属组都会自动继承该目录的所属组,而不是创建者的主要组。
  • 经典例子: 项目协作目录
    • 假设有一个目录 /project,所属组是 dev-team
    • 设置 setgid: chmod g+s /project
    • 当用户 alice(主要组是 alice)在 /project 里创建文件 new_file.txt 时,这个文件的所属组会自动变成 dev-team,而不是 alice。这极大方便了团队间的文件共享。
  • 查看与设置:
    • 查看:ls -l 看到目录权限如 drwxr-sr-x
    • 设置:
      • 符号法:chmod g+s directory_name
      • 数字法:chmod 2xxx directory_name (如 2755,2 代表 setgid, 755代表原来的权限)

c) sticky (粘滞位)

  • 符号表示: tT
  • 位置: 在文件其他人的执行权限 x 位上。
  • 作用: 仅对目录有效。当一个目录被设置了粘滞位后,目录下的文件或子目录只有其所有者、目录的所有者或 root 用户才能删除或重命名
  • 经典例子: 系统的 /tmp 临时目录
    • 所有人都可以在 /tmp 里读写、创建文件。
    • 如果没有粘滞位,用户 A 可以删除用户 B 创建的文件。
    • 设置了粘滞位后,用户 A 只能删除自己创建的文件,不能删除用户 B 的。
  • 查看与设置:
    • 查看:ls -ld /tmp 会看到 drwxrwxr**wt**,那个 t 就是粘滞位。
    • 设置:
      • 符号法:chmod o+t directory_name
      • 数字法:chmod 1xxx directory_name1 代表粘滞位,如 1777

数字法总结

  • setuid = 4
  • setgid = 2
  • sticky = 1
    你可以组合使用,例如 chmod 6770 file 表示同时设置 setuid(4) 和 setgid(2),即 4+2=6

2. 文件访问控制列表

ACL 是对基本权限 u/g/o 的超级扩展,它可以为任意用户或用户组设置独立的权限。

  • 作用: 突破了“一个文件只能有一个所有者、一个所属组和其他人”的限制。你可以通过 ACL 为多个用户或多个组设置不同的 rwx 权限。
  • 命令:
    • setfacl:设置 ACL 规则。
    • getfacl:查看 ACL 规则。
  • 例子: # 查看文件当前的 ACL(如果没有设置,则显示基本权限) getfacl myfile.txt # 给特定用户(如 jerry)添加读写权限 setfacl -m u:jerry:rw myfile.txt # 给特定组(如 contractors)添加读和执行权限 setfacl -m g:contractors:rx myfile.txt # 再次查看,会看到多出 "user:jerry:rw-" 和 "group:contractors:r-x" 这样的行 getfacl myfile.txt # 删除 jerry 的 ACL 规则 setfacl -x u:jerry myfile.txt # 递归删除目录及其下所有文件的 ACL 规则 setfacl -R -b my_directory/
  • 文件列表中的表示: 设置了 ACL 的文件,在使用 ls -l 查看时,权限位的最后会有一个 + 号,例如:-rw-rw-r--+

3. 文件属性

这是最“底层”的隐藏权限,由 chattrlsattr 命令管理。它们提供了一些内核级别的、非常强大的保护机制。

  • 命令:
    • chattr:改变文件属性。
    • lsattr:列出文件属性。
  • 常见属性:
    • a (Append Only): 文件只能以追加方式打开进行写入,不能删除或覆盖已有内容。非常适合日志文件。连 root 都要遵守!
      • chattr +a logfile.log
    • i (Immutable): 文件被锁定,不能被删除、改名、修改,也不能创建指向它的链接。这是最高级别的保护。连 root 都要遵守!
      • chattr +i critical_file.conf
    • A (No Atime Updates): 告诉系统不要更新文件的访问时间 atime,可以提升 I/O 性能。
  • 用法:
    • 查看文件隐藏权限:
      • lsattr 1.txt
    • 设置隐藏权限:
      • chattr +i 1.txt
      • chattr +a 1.txt
    • 取消隐藏权限:
      • chattr -i 1.txt
      • chattr -a 1.txt

总结

类别主要命令核心概念典型应用场景
扩展属性 (suid, sgid, sticky)chmod改变执行文件时的身份或目录的继承/删除规则passwd 命令、项目共享目录、/tmp 目录
ACL (访问控制列表)setfacl, getfacl为任意用户/组设置精细权限复杂的多用户、多组协作环境
文件属性chattr, lsattr内核级别的文件锁定和保护保护关键系统配置文件、防止日志被篡改

这些“隐藏权限”共同构成了 Linux 强大、灵活且安全的文件权限管理体系,让你能够根据实际需求进行极其精细的访问控制。