一、前言
在技术圈摸爬滚打,你是否遇到过这些糟心事?项目代码突然被他人误删,服务器因权限漏洞惨遭攻击,团队协作时文件权限混乱不堪…… 这些问题的根源,往往就藏在看似简单的文件权限管理中。别让小细节拖垮你的工作效率和系统安全!
*****************************************系好安全带,准备发车********************************************
二、文件权限基础:权限位与特殊标志
2.1 基础权限位(9 位模型)
# 示例:查看文件详细权限
ls -l file.txt
# 输出示例:-rw-r--r-- 1 user group 0 Jun 1 10:00 file.txt
# 权限位解析:
# rw-(所有者) r--(所属组) r--(其他用户)
2.2 特殊权限标志
标志 | 作用场景 | 命令示例 |
---|---|---|
SUID | 普通用户临时获取文件所有者权限(如passwd 命令) | chmod u+s /usr/bin/passwd |
SGID | 目录内新文件继承目录所属组 | chmod g+s /var/www/upload |
Sticky Bit | 限制目录内文件只能被所有者删除(如/tmp ) | chmod +t /tmp |
三、chmod:灵活修改文件权限
3.1 符号表示法(按用户组操作)
# 给文件所有者添加执行权限
chmod u+x script.sh
# 移除所属组的写权限
chmod g-w data.txt
# 给所有用户添加读权限
chmod a+r *.log
# 精准设置:所有者读写,所属组只读,其他用户无权限
chmod u=rw,g=r,o= file.conf
3.2 数字表示法(权限值组合)
# rwxr-xr-- 对应 754
chmod 754 app.py
# 目录设置:所有者全权限,所属组读写,其他用户只读
chmod 764 /var/log/app
# 递归修改目录及其子文件权限(如项目根目录)
chmod -R 750 /project/
四、chown:修改文件所有者与所属组
4.1 单一操作:修改所有者
# 将文件所有者改为用户`dev`
sudo chown dev app.js
# 递归修改目录及其内容的所有者(需谨慎)
sudo chown -R dev /var/www/app
4.2 组合操作:同时修改所有者和所属组
# 格式:chown 所有者:所属组 文件
sudo chown dev:devteam config.ini
# 仅修改所属组(保留所有者不变)
sudo chown :devteam logs/
五、chgrp:专注所属组修改
# 将文件所属组改为`ops`
sudo chgrp ops data.csv
# 递归修改目录所属组(如团队共享目录)
sudo chgrp -R marketing /shared/marketing/
六、实战场景:搭建 Web 服务权限体系
场景需求:
创建 Web 项目目录,要求:
代码目录(html
)仅允许所有者读写执行,其他用户只读上传目录(uploads
)
允许 Web 服务器用户(www-data
)
写入日志目录(logs
)仅所有者可写
实现代码:
# 1. 创建目录结构
mkdir -p webroot/{html,logs,uploads}
# 2. 设置基础权限
chmod -R 755 webroot/html # rwxr-xr-x(代码目录)
chmod -R 775 webroot/uploads # rwxrwxr-x(允许同组写入)
chmod -R 750 webroot/logs # rwxr-----(仅所有者可写)
# 3. 修改所有者与所属组(假设Web用户为www-data)
sudo chown -R www-data:www-data webroot/
# 4. 设置SGID确保上传目录新文件继承所属组
chmod g+s webroot/uploads
七、常用命令速查表
操作类型 | 命令示例 | 说明 |
---|---|---|
查看权限 | ls -l file | 显示文件详细权限 |
增加执行权限 | chmod +x script.sh | 给所有用户添加执行权限 |
设为只读文件 | chmod a-w data.txt | 移除所有用户的写权限 |
修改所有者 | sudo chown user file | 将文件所有者改为user |
修改所属组 | sudo chgrp group dir | 将目录所属组改为group |
递归修改权限 | chmod -R 644 /data | 递归设置目录下所有文件为 644 |