权限这一块,相信大家都比较熟悉基础知识,就是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. 文件扩展属性
这类属性通常用于给可执行文件设置特殊的权限行为。主要有两个:
a) setuid (Set User ID)
- 符号表示:
s或S - 位置: 在文件所有者的执行权限
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 filename(4代表setuid,xxx是基本权限,如4755)
- 符号法:
- 查看:
b) setgid (Set Group ID)
- 符号表示:
s或S - 位置: 在文件所属组的执行权限
x位上。 - 作用: 有两种情况:
- 对文件: 与
setuid类似,执行该文件的用户会临时拥有文件所属组的权限。 - 对目录: 非常重要且常用。当一个目录被设置
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 (粘滞位)
- 符号表示:
t或T - 位置: 在文件其他人的执行权限
x位上。 - 作用: 仅对目录有效。当一个目录被设置了粘滞位后,目录下的文件或子目录只有其所有者、目录的所有者或 root 用户才能删除或重命名。
- 经典例子: 系统的
/tmp临时目录- 所有人都可以在
/tmp里读写、创建文件。 - 如果没有粘滞位,用户 A 可以删除用户 B 创建的文件。
- 设置了粘滞位后,用户 A 只能删除自己创建的文件,不能删除用户 B 的。
- 所有人都可以在
- 查看与设置:
- 查看:
ls -ld /tmp会看到drwxrwxr**wt**,那个t就是粘滞位。 - 设置:
- 符号法:
chmod o+t directory_name - 数字法:
chmod 1xxx directory_name(1代表粘滞位,如1777)
- 符号法:
- 查看:
数字法总结:
setuid= 4setgid= 2sticky= 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. 文件属性
这是最“底层”的隐藏权限,由 chattr 和 lsattr 命令管理。它们提供了一些内核级别的、非常强大的保护机制。
- 命令:
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 强大、灵活且安全的文件权限管理体系,让你能够根据实际需求进行极其精细的访问控制。
Comments NOTHING