一、Linux权限的核心概念
1. 权限的作用
Linux通过 读(r)、写(w)、执行(x) 三种基础权限,控制用户和进程对资源的访问,确保系统安全和数据隔离。
-
读(r):查看文件内容(如
cat
)、列出目录内容(如ls
)。 -
写(w):修改文件内容、在目录中创建/删除文件。
-
执行(x):运行脚本/程序(文件)、进入目录(目录必备)。
关键区别:目录的执行权限(x)是进入目录的前提,即使有读权限(r)但无执行权限,也无法查看目录内容!
二、权限的表示方式
1. 字母形式
通过 ls -l
查看文件权限:
-rwxr-xr-- 1 user group 1024 Jan 5 09:30 script.sh drwxr-x--- 2 root backup 4096 Jan 5 10:00 /backups
-
首字符:文件类型(
-
普通文件,d
目录,l
符号链接)。 -
权限九宫格:
-
属主(u):文件所有者的权限(前三位)。
-
属组(g):同组用户的权限(中间三位)。
-
其他用户(o):非所有者且非组成员的权限(后三位)。
-
2. 数字形式
权限转换为数字:
-
r=4
,w=2
,x=1
,无权限为0
。 -
组合示例:
-
rwx
= 4+2+1 = 7 -
rw-
= 4+2 = 6 -
r--
= 4 = 4
-
三、权限设置命令 chmod
1. 字母方式设置
chmod [用户类型][操作符][权限] 文件/目录
-
用户类型:
u
(属主)、g
(属组)、o
(其他)、a
(所有人)。 -
操作符:
+
(添加)、-
(删除)、=
(覆盖)。
示例:
chmod u+x script.sh # 属主添加执行权限 chmod go-w data/ # 属组和其他用户去除写权限 chmod a=rwx public_dir/ # 所有人赋予全部权限
2. 数字方式设置
chmod 764 file.txt
-
解释:
-
属主(7=rwx)、属组(6=rw)、其他用户(4=r)。
-
常用权限组合:
-
755:目录标准权限(属主rwx,其他用户rx)。
-
644:文件标准权限(属主rw,其他用户r)。
-
600:敏感文件(仅属主可读写)。
四、实战场景与案例
1. Web服务器目录安全
chmod 755 /var/www/html # 目录可读可进入,但禁止普通用户修改 chmod 644 /var/www/html/*.html # 静态文件只允许属主修改
2. 保护敏感文件
chmod 600 ~/.ssh/id_rsa # SSH私钥仅属主可读写 chmod 640 /etc/mysql/my.cnf # 数据库配置:属主可读写,属组可读
3. 团队协作目录
chmod 770 /team_projects # 属主和属组可读写执行,其他用户无权限
五、常见错误与解决方案
1. 灾难性权限:777
chmod 777 /var/www/html # 任何人都可修改,易被植入恶意脚本
修复:
chmod 755 /var/www/html # 恢复目录权限 find /var/www/html -type f -exec chmod 644 {} \; # 文件设为只读
2. 目录无法访问
chmod 644 /data/backup # 目录无执行权限,无法进入
表现:cd /data/backup
提示 Permission denied
。
修复:
chmod 755 /data/backup # 添加执行权限
3. 删除文件权限误区
权限规则:删除文件需对所在目录有写权限(w
),而非文件本身!
chmod +w /home/shared/ # 允许用户删除目录内文件
六、特殊权限与root用户
1. root用户的特权
-
无视权限限制:root用户可访问和修改任何文件(即使权限为
000
)。 -
安全建议:避免直接使用root操作,改用
sudo
提权。
2. 粘滞位(Sticky Bit)
作用:防止用户删除他人文件(常用于 /tmp
目录)。
chmod +t /tmp # 设置粘滞位 ls -ld /tmp # 显示权限末尾的 `t`(如 drwxrwxrwt)
七、练习题与答案
1. 设置目录权限
需求:目录 /root/shop
,属主拥有全部权限,属组可读和执行,其他用户无权限。
chmod 750 /root/shop
2. 保护隐私文件
需求:文件 /root/email.doc
仅属主可读写。
chmod 600 /root/email.doc
3. 修复错误权限
错误:网站目录权限为 777
,导致安全漏洞。
修复:
chmod 755 /var/www/html find /var/www/html -type f -exec chmod 644 {} \;
总结
合理设置权限是Linux系统安全的基石。掌握 chmod
命令的字母和数字用法,理解目录与文件权限的区别,避免常见错误(如 777
),能有效保护数据和服务安全。记住:最小权限原则是运维的核心准则!
附:权限速查表
场景 | 推荐权限 | 命令示例 |
---|---|---|
个人敏感文件 | 600 | chmod 600 ~/.ssh/id_rsa |
团队共享目录 | 770 | chmod 770 /team_projects |
Web服务器根目录 | 755 | chmod 755 /var/www/html |
日志文件 | 644 | chmod 644 /var/log/nginx/*.log |
临时目录(粘滞位) | 1777 | chmod 1777 /tmp |