一、Linux 权限的基础概念
在 Linux 系统中,所有文件和目录都遵循一套权限规则。这些规则控制谁可以读(Read)、写(Write)或执行(Execute)文件。这听起来简单,但其实背后有一整套体系。
1. 权限的三种身份
Linux 把用户分为三类,每类用户对文件/目录的权限可以单独设定:
- 所有者(Owner):文件的创建者,一般默认是文件的所有者。
- 所属组(Group):一群用户组成的组,文件可以属于某个组。
- 其他用户(Others):所有不属于上述两类的用户。
2. 权限的三种操作
文件和目录都有以下三种权限:
读权限(r):
- 文件:可以查看文件内容。
- 目录:可以列出目录中的文件。
写权限(w):
- 文件:可以修改文件内容。
- 目录:可以添加、删除、重命名目录内的文件。
执行权限(x):
- 文件:可以运行文件(如脚本)。
- 目录:可以进入目录。
3. 权限的表示方法
权限用 rwx 这三个字母表示。例如,一个文件的权限是 -rw-r--r--,它可以分解为:
- 第一个字符:- 表示普通文件,d 表示目录,l 表示符号链接等。
- 后面的 9 个字符:分成三组,每组三个,分别表示 所有者、所属组 和 其他用户 的权限。
权限也可以用八进制表示:
- r = 4
- w = 2
- x = 1
- 没有权限 = 0
例如,rw- 就是 4 + 2 = 6,所以 -rw-r--r-- 可以写成 644。
二、常见的目录权限操作
1. 查看权限:ls -l
最基本的操作就是看看权限长什么样。运行以下命令:
ls -l
输出示例:
-rw-r--r-- 1 user group 1024 Nov 16 example.txt
这里你能看到权限信息、文件所有者、所属组、文件大小和修改时间。
2. 修改权限:chmod
chmod 是修改文件权限的主力工具,有两种使用方法:符号法和数字法。
符号法
chmod u+x example.sh # 给文件所有者增加执行权限
chmod g-w example.sh # 移除所属组的写权限
chmod o+r example.sh # 允许其他用户读取文件
数字法
chmod 755 example.sh # 设置文件权限为 -rwxr-xr-x
chmod 644 example.txt # 设置文件权限为 -rw-r--r--
注意:数字法适合批量操作,但符号法更直观!
3. 修改所有者和组:chown 和 chgrp
修改所有者
chown new_owner example.txt
修改所属组
chgrp new_group example.txt
同时修改所有者和组
chown new_owner:new_group example.txt
如果你想递归修改整个目录及其子目录的所有者/组,加上 -R 参数:
chown -R new_owner:new_group /path/to/directory
4. 默认权限:umask
每次新建文件或目录时,系统会根据默认的 umask 设置权限。可以查看当前的 umask:
umask
- 输出可能是 0022,它会限制其他用户的写权限。
- 可以修改 umask 来影响新建文件的权限:
- umask 0007 # 让其他用户完全没有权限
三、有趣的权限用例
1. 限制目录访问:chmod 700
如果你有一个私密文件夹,不想让其他人窥探你的小秘密,可以这样做:
chmod 700 my_secret_folde
这将确保只有你(所有者)可以访问。
2. 共享文件夹:chmod 770
想和团队共享一个目录?可以让所有组成员都有权限:
chmod 770 team_folder
还可以用 chgrp 修改组为你的团队组。
3. 阻止意外修改:chmod a-w
你有个文件,不希望任何人误操作删改?禁用写权限:
chmod a-w important_document.txt
4. 临时开放执行权限:chmod +x
如果下载了一个脚本,需要临时运行它,可以快速赋予执行权限:
chmod +x script.sh
./script.sh
四、终极问题:谁动了我的权限?
想要知道谁对你的文件动了手脚?可以用 auditd 进行监控:
1.安装 auditd:
sudo apt install auditd
2.添加监控规则:
sudo auditctl -w /path/to/your/file -p rwxa -k file_monitor
3.查看日志:
sudo ausearch -k file_monitor
五、总结
Linux 目录权限虽然规则明确,但灵活多变,用好了可以事半功倍,用不好会踩各种坑。无论是保护自己的文件,还是高效地协作,掌握权限管理是不可或缺的一步。