Linux文件权限详解
权限的基本概念
在Linux系统中,每个文件和目录都有三组权限:
所有者权限、组权限、其他用户权限
每组权限包含三种操作:
读(r)、写(w)、执行(x)
权限的表示方法
1. 符号表示法
-rwxr-xr--
分解:
- 第一个字符:文件类型(-普通文件,d目录)
- 第2-4字符:所有者权限(rwx)
- 第5-7字符:组权限(r-x)
- 第8-10字符:其他用户权限(r--)
2. 数字表示法(八进制)
- r(读) = 4
- w(写) = 2
- x(执行) = 1
示例:
- rwxr-xr-- = 754
- 所有者:4+2+1 = 7
- 组:4+0+1 = 5
- 其他:4+0+0 = 4
常用权限组合
文件权限:
644:所有者可读写,其他人只读(常见于网页文件)755:所有者可读写执行,其他人可读执行(常见于脚本)600:仅所有者可读写(敏感文件)
目录权限:
755:标准目录权限700:私有目录777:完全开放(危险!)
权限修改命令
1. chmod - 修改权限
# 符号表示法
chmod u+x file.txt # 给所有者添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o=r file.txt # 设置其他用户为只读
# 数字表示法
chmod 644 file.txt # 设置为rw-r--r--
chmod 755 script.sh # 设置为rwxr-xr-x
2. chown - 修改所有者
chown user file.txt # 修改文件所有者
chown user:group file.txt # 同时修改所有者和组
chown -R user directory/ # 递归修改目录下所有文件
3. chgrp - 修改组
chgrp group file.txt # 修改文件所属组
特殊权限
1. SetUID(4)
- 文件执行时以文件所有者身份运行
- 数字表示:在三位数前加4
- 示例:
chmod 4755 /usr/bin/passwd
2. SetGID(2)
- 文件执行时以文件所属组身份运行
- 目录中新建文件继承目录的组
- 数字表示:在三位数前加2
3. Sticky Bit(1)
- 仅目录有效,防止用户删除他人文件
- 常见于/tmp目录
- 数字表示:在三位数前加1
实际应用场景
1. 网页服务器
# 网页文件:所有者可读写,其他人只读
chmod 644 index.html style.css
# 目录:所有者可读写执行,其他人可读执行
chmod 755 public_html/
# CGI脚本:需要执行权限
chmod 755 cgi-bin/script.cgi
2. 脚本文件
# 给脚本添加执行权限
chmod +x backup.sh
chmod 755 deploy.sh
3. 配置文件(敏感信息)
# 仅所有者可读写
chmod 600 .env config.json
chmod 700 ~/.ssh/
4. 共享目录
# 团队共享目录
chmod 775 shared/
chown :team shared/
权限查看命令
1. ls -l
ls -l file.txt
# 输出:-rw-r--r-- 1 user group 1024 Apr 16 10:00 file.txt
2. stat
stat file.txt
# 显示详细权限信息(八进制和符号)
3. getfacl(查看ACL)
getfacl file.txt
# 显示访问控制列表(更细粒度的权限)
权限问题排查
常见错误:
- 权限不足:
Permission denied - 不是可执行文件:
bash: ./script: Permission denied - 目录不可读:无法列出目录内容
- 目录不可写:无法创建或删除文件
排查步骤:
# 1. 查看当前权限
ls -l file.txt
# 2. 查看当前用户和组
id
whoami
# 3. 检查文件所有者和组
ls -n file.txt # 显示数字ID
# 4. 尝试修改权限
sudo chmod 755 file.txt # 需要时使用sudo
最佳实践
- 最小权限原则:只授予必要的权限
- 定期审计:检查重要文件的权限设置
- 使用组管理:通过组控制访问权限
- 避免777:尽量不要使用完全开放权限
- 理解后再修改:不确定时先查看现有权限
总结
Linux文件权限是系统安全的基础。
正确理解和设置权限可以:
- 保护敏感数据
- 控制用户访问
- 防止误操作
- 维护系统安全
掌握权限管理,是成为合格Linux管理员的第一步。
