目录1.简介

Linux系统中,文件权限是保障系统安全与多用户协作的核心机制。它决定了谁能对文件/目录执行读、写、执行等操作,有效避免未授权访问和数据篡改。无论是个人用户管理自己的文件,还是系统管理员维护服务器,理解并正确配置文件权限都是必备技能。本文将从基础到中级,全面解析Linux文件权限的原理、操作与最佳实践。

2.Linux文件权限基础2.1用户类别:Owner,Group,Others

Linux将文件的访问者分为三类,权限设置针对这三类用户分别生效:

2.2权限类型:读(r)、写(w)、执行(x)

针对上述三类用户,Linux定义了三种基本权限,分别用字母r(读)、w(写)、x(执行)表示,对应八补码数字4、2、1(用于数字模式权限设置):

2.3文件与目录权限的区别

权限对文件和目录的作用存在差别,需非常注意:

权限文件(File)目录(Directory)

可读取文件内容

可列举目录内文件/子目录(ls)

可更改文件内容

可创建、删除、重命名目录内文件

可执行文件(如脚本、二补码程序)

可步入目录(cd)或访问子目录内容

关键区别:目录的w权限依赖x权限(无x则难以操作目录内文件);文件的x权限仅对可执行文件有意义(如.sh、.py脚本)。

3.查看文件权限:ls-l命令解析3.1ls-l输出格式解读

使用ls-l命令可查看文件/目录的权限信息,输出格式如下:

-rw-r--r-- 1 alice dev 1024 Jun 1 10:00 demo.txt

各数组涵义(从左到右):

chmod chown acl命令教程_Linux文件权限管理_linux文件 权限

权限字符串(10个字符):第1位为文件类型,后9位分3组(所有者、组、其他用户),每组3位对应rwx。硬链接数:一般为1(文件)或目录中子目录数(+1)。所有者:alice(文件归属用户)。所属组:dev(文件归属组)。文件大小:1024字节(目录显示块大小linux文件 权限,需加-h人性化显示)。更改时间:Jun110:00。文件名:demo.txt。3.2示例:评析文件权限

# 目录,所有者 rwx,组 r-x,其他 r-x
drwxr-xr-x 2 bob staff 4096 Jun 1 11:00 docs/
 
# 普通文件,所有者 rw-,组 r--,其他 ---
-rw-r----- 1 alice dev 2048 Jun 1 12:00 secret.log
 
# 可执行脚本,所有者 rwx,组 r-x,其他 ---
-rwxr-x--- 1 root sys 512 Jun 1 13:00 backup.sh

4.更改文件权限:chmod命令

chmod(changemode)用于更改文件/目录的权限,支持符号模式(直观)和数字模式(高效)两种形式。

4.1符号模式(SymbolicMode)

句型:chmod

用户类别

操作符

文件

示例:

# 给所有者添加执行权限
chmod u+x script.sh
 
# 移除组的写权限
chmod g-w data.txt
 
# 给所有用户设置读权限(覆盖原有)
chmod a=r public.html
 
# 给组添加读写,其他添加读权限
chmod g+rw,o+r docs/

4.2数字模式(NumericMode)

将权限转换为八补码数字(每组rwx对应3位二补码,求和得0-7),格式为chmod

三位数字

文件,三位数字分别对应所有者、组、其他。

权限数字对应表:

示例:

# 所有者 rw- (6),组 r-- (4),其他 r-- (4) → 644
chmod 644 index.html
 
# 所有者 rwx (7),组 r-x (5),其他 --- (0) → 750
chmod 750 app/
 
# 所有用户 rwx (777) → 危险!谨慎使用
chmod 777 temp/

4.3常见chmod操作示例

场景符号模式数字模式说明

普通文件(默认)

chmod chown acl命令教程_linux文件 权限_Linux文件权限管理

chmodu=rw,go=r

644

所有者读写,其他只读

可执行脚本

chmodu+x

755

所有者可执行,其他读+执行

敏感文件(仅自己访问)

chmodgo-rwx

600

仅所有者读写

共享目录(组可写)

chmodg+w

775

所有者/组读写执行,其他读执行

5.更改所有者与所属组:chown与chgrp

文件的所有者和所属组决定了权限的作用对象,通过chown和chgrp命令更改。

5.1chown:更改文件所有者

句型:chown所有者

:所属组

文件

chmod chown acl命令教程_Linux文件权限管理_linux文件 权限

(:分隔所有者和所属组,可同时更改三者)

注意:

示例:

# 将 file.txt 所有者改为 alice
sudo chown alice file.txt
 
# 将 dir/ 所有者改为 bob,所属组改为 dev(递归)
sudo chown -R bob:dev dir/

5.2chgrp:更改文件所属组

句型:chgrp组名文件

(功能与chown:组名相同,更直观)

示例:

# 将 data.log 所属组改为 staff
chgrp staff data.log
 
# 递归修改 docs/ 所属组为 design
chgrp -R design docs/

5.3注意事项与示例

# 团队共享目录配置示例:所有者 root,组 dev,组可写
sudo chown root:dev /opt/project
sudo chmod 775 /opt/project  # 所有者/组 rwx,其他 r-x

6.特殊权限:SUID,SGID与StickyBit

除基础权限外,Linux还支持特殊权限,用于实现中级功能(如临时挂马、目录承继等)。它们通过在权限字符串前添加额外位表示,对应八补码数字4(SUID)、2(SGID)、1(StickyBit)。

6.1SetUID(SUID)6.2SetGID(SGID)显示:组权限位的x变为s(无x则显示S)。6.3StickyBit6.4特殊权限的设置与查看

设置句型:在数字模式前添加特殊权限位(4=SUID,2=SGID,1=Sticky),格式chmod

三位基础权限

文件。

示例:

# 设置 SUID(4)+ 基础权限 755 → 4755
sudo chmod 4755 /usr/bin/passwd  # 普通用户执行时获得 root 权限
 
# 设置 SGID(2)+ 基础权限 775 → 2775(目录新文件继承组)
chmod 2775 /opt/share  # 新文件所属组为 /opt/share 的组
 
# 设置 Sticky Bit(1)+ 基础权限 777 → 1777(仅所有者可删自己文件)
sudo chmod 1777 /tmp  # 系统默认配置

查看示例:

-rwsr-xr-x 1 root root 63K May 1 2023 /usr/bin/passwd  # SUID(s 代替 x)
drwxrwsr-x 2 root dev 4096 Jun 1 10:00 /opt/share/     # SGID(s 代替 x)
drwxrwxrwt 7 root root 4096 Jun 1 08:00 /tmp/          # Sticky Bit(t 代替 x)

7.中级权限管理:ACL(访问控制列表)

基础权限(UGO)仅支持三类用户,难以满足复杂场景(如给特定用户/组单独授权)。ACL(AccessControlLists)扩充了权限管理linux文件 权限,准许为任意用户/组设置权限。

7.1ACL的作用与优势7.2查看ACL:getfacl

句型:getfacl文件/目录

示例:

getfacl demo.txt
# 输出:
# # file: demo.txt
# # owner: alice
# # group: dev
# user::rw-              # 基础所有者权限
# user:charlie:r--       # 额外用户 charlie 只读
# group::r--             # 基础组权限
# group:design:rw-       # 额外组 design 读写
# mask::rw-              # 权限掩码(限制最大权限)
# other::---             # 其他用户权限

7.3设置ACL:setfacl

句型:setfacl规则文件

核心规则:-mu:用户:权限(用户)、-mg:组:权限(组)。

常用选项:

示例:

# 给用户 charlie 授予 demo.txt 只读权限
setfacl -m u:charlie:r-- demo.txt
 
# 给组 design 授予 docs/ 读写执行权限(递归)
setfacl -R -m g:design:rwx docs/
 
# 删除用户 bob 的 ACL 规则
setfacl -x u:bob demo.txt
 
# 清除所有 ACL 规则
setfacl -b data/

7.4默认ACL与承继

对目录设置默认ACL(d:前缀),新创建的文件/子目录会手动承继ACL规则。

示例:

# 为 /opt/project 设置默认 ACL:组 dev 读写执行,用户 charlie 只读
setfacl -d -m g:dev:rwx /opt/project
setfacl -d -m u:charlie:r-- /opt/project
 
# 新创建的文件会继承默认 ACL
touch /opt/project/newfile.txt
getfacl /opt/project/newfile.txt  # 可看到继承的 dev 和 charlie 权限

8.常见实践:默认权限与umask

新创建文件/目录的默认权限由umask(权限网段)决定,它从系统默认权限中“减去”对应位。

8.1umask是哪些?8.2估算默认权限

默认权限=系统默认权限-umask(按位除法,非数值除法)。

示例:

Linux文件权限管理_chmod chown acl命令教程_linux文件 权限

umask0002→文件664(rw-rw-r--),目录775(rwxrwxr-x)。8.3临时与永久更改umask

# 在 ~/.bashrc 中添加
umask 0027  # 文件 640,目录 750

9.最佳实践与安全建议9.1遵守最小权限原则

仅授予用户/进程完成任务所需的最小权限,比如:

9.2敏感文件的权限设置9.3共享目录的权限策略9.4防止使用危险权限(如777)

chmod777授予所有用户读写执行权限red hat linux 下载,可能造成:

9.5定期审计与权限检测

使用以下命令排查异常权限:

# 查找全局可写文件
find / -perm -0002 -type f 2>/dev/null
 
# 查找设置了 SUID 的文件(潜在提权风险)
find / -perm -4000 -type f 2>/dev/null
 
# 检查敏感目录权限(如 /tmp)
ls -ld /tmp  # 应设置 Sticky Bit(1777)

10.故障排除:常见权限问题解决10.1″Permissiondenied”错误

可能缘由:

排查步骤:

用ls-l文件确认权限是否正确。用id确认当前用户所属组是否匹配文件的组权限。若权限正确,检测父目录是否有x权限(如访问/a/b/c.txt,需/a、/a/b均有x)。10.2目录访问权限问题

示例:用户bob对/data/docs有rwx权限,但未能ls目录内容。

缘由:父目录/data无x权限→chmodo+x/data即可。

10.3排查步骤与工具检测基础权限:ls-l、ls-ld目录。检测ACL:getfacl文件(可能存在隐藏的ACL限制)。检测特殊权限:ls-l查看是否有s/t位异常。模拟用户测试:su-用户-c”命令”(如su-bob-c”catfile.txt”)。11.总结

Linux文件权限是系统安全的基石,从基础的UGO权限到中级的ACL和特殊权限,灵活的配置既能保障数据安全,也能支持多用户协作。核心原则是“最小权限”,即仅授予完成任务所需的最低权限。通过本文的学习linux环境变量,你应能:

合理配置文件权限,是每位Linux用户和管理员的必备技能。

12.参考资料

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复