Linux-文件权限管理
目录
文件权限的基本概念
权限示例
示例中通过ls –l命令可将文件权限的详细信息呈现出来,以root用户文件信息为引:
drwxr-xr-x. 2 root root 4096 Jun 1 14:00 shili
文件类型
示例中每一行第一位代表的是文件类型,在Linux中有七种文件类型:
权限位说明

其中第0位确定文件类型;第1-3位确定文件所有者权限;第4-6位确定所有者的同组用户;第7-9位确定其他用户对该文件权限。
权限位的数字表达:
访问权限
在文件信息中显示为:
-r 允许读取文件内容或目录下全部内容
-w 允许写文件或在目录下创建、删除文件
-x 允许执行文件或进入目录
- 无任何权限(显示方式在r、w、x的位置处显示为-)
以usertxt文件为例:drwxr-xr-x. 2 root root 4096 Jun 1 14:00 usertxt
读权限(Read)
针对于文件,具有读取文件实际内容的权限
针对于目录,具有读取目录结构列表的权限
写权限(Write)
针对于文件,具有编辑、增加或修改文件内容的权限
针对于目录,具有修改、删除或移动目录内文件的权限
执行权限(Execute)
针对于文件,具有执行文件的权限
针对于目录,具有进入目录的权限
文件权限的操作命令
chmod命令:修改文件权限
根据配置场景,可以同时修改文件的一组权限,也可以只修改文件的某个权限。Linux的文件调用权限分为三级:文件所有者、群组及其他,通过chmod命令可以控制文件被何人调用;文件调用权限针对于文件所有者,所属组以及其他人,使用chmod可以对文件的调用权限进行修改。
语法:chmod [OPTION]... MODE[,MODE]... FILE... 其中的命令选项说明如下: 操作对象: u:用户user,表示文件或目录所有者 g:用户组group,表示文件或目录所属组 o:其他用户other a:所有用户all 操作符: +:添加权限 -:减少权限 =:给定特定权限 赋予的权限: r:读权限 w:写权限 x:执行权限
chown命令:修改文件属主属组(只允许管理员)
根据配置场景,可以只修改属主,也可以只修改属组,亦可以同时修改属主属组。Linux做为多用户多任务系统,所有文件都有其所有者,通过chown可以将特定文件的所有者更改为指定用户或组;使用权限为管理员(root用户)。
语法:chown [OPTION]... [OWNER][:[GROUP]] FILE... 其中的命令选项说明如下: -c : 显示更改的部分的信息 -f : 忽略错误信息 -h :修复符号链接 -v : 显示详细的处理信息 -R : 处理指定目录以及其子目录下的所有文件 chown [-cfhvR] [--help] [--version] user[:group] file... -c : 显示更改的部分的信息 -f : 忽略错误信息 -h : 修复符号链接 -v : 显示详细的处理信息 -R : 处理指定目录以及其子目录下的所有文件 --help : 显示辅助说明 --version : 显示版本
例子:
chgrp命令:修改文件属组
chgrp可用来修改文件或目录的所属组。通过chgrp命令可以对文件或目录的所属群组进行更改;使用权限为管理员(root用户)。
语法:chgrp [OPTION]... GROUP FILE... 其中的命令选项说明如下: -v:显示指令执行过程 -c:效果类似“-v”参数,但是只回报更改的部分 -f:不显示错误信息 -h:只修改符号连接的文件,而不对其他任何相关文件进行变动 -R:递归处理,即将指定目录下的所有文件及子目录一并处理 根据配置场景更改文件所属群组。 -c或--changes 效果类似"-v"参数,但仅回报更改的部分。 -f或--quiet或--silent 不显示错误信息。 -h或--no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。 -R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。 -v或--verbose 显示指令执行过程。 --help 在线帮助。 --reference=<参考文件或目录> 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。 --version 显示版本信息。
更改文件所属组:
umask命令:遮罩码
umask可用来指定在建立文件或目录时进行权限掩码的预设。通过umask命令可以指定在建立文件时进行权限掩码的预设;使用权限:管理员和普通用户。
语法:umask: umask [-p] [-S] [mode] 其中的命令选项说明如下: -p:显示命令名称 -S:文字形式表示权限掩码
常见umask值及与之对应的文件或目录权限:
修改文件权限掩码:
文件的ACL
访问控制列表-ACL
- 常用权限的操作命令chmod、chown、chgrp及umask已经可以对文件权限进行修改,那么为什么还会出现访问控制列表ACL(Access Control List)?
在没有ACL技术之前,Linux系统对文件的权限控制仅可划分文件的属主、用户组、其他用户三类,随着技术的发展,传统的文件权限控制已经无法适应复杂场景下的权限控制需求,比如说一个部门(即一个用户组group)存在有多名员工(即用户user01、user02…),针对于部门内不同职责的员工,会为其赋予不同的权限,如为user01赋予可读写权限,为user02赋予只读权限,不为user03赋予任何权限,此时由于这些员工属于同一部门,就无法为这些不同的员工进行权限的细化。为此ACL(Access Control List)访问控制列表技术应运而生,使用ACL权限控制可以提供常见权限(如rwx、ugo)权限之外的权限设置,可以针对单一用户或组来设置特定的权限。
- 常见类型:
针对文件所有者(owner)分配权限
针对文件所属用户组分配权限
针对其他用户分配
etc..
使用 ACL 必须要由文件系统支持,目前绝大多数的文件系统都支持:Ext3\ext4 Xfs\zfs
ACL-相关命令
在linux里我们可以通过ACL来管理某个文件及其特定的用户和用户组权限,简单来说ACL只需掌握三个命令即可:setfacl,getfacl,chacl。
- setfacl:设置文件的ACL
chmod根据文件所有者、所属群组及其他用户三级权限进行权限分配,而setfacl则可以针对每一文件或目录进行更加精准的权限分配。
语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... 其中的命令选项说明如下: -m 修改指定文件的acl,不能和-x混合使用 -x 删除后续参数 -b 删除所有acl设定参数 -k 移除预设的acl参数 -R 递归设置acl参数 -d 预设目录的acl参数
- getfacl:获取文件的ACL。
getfacl可获取文件或目录的访问控制列表ACL。
语法:getfacl [-aceEsRLPtpndvh] file ... 其中的命令选项说明如下: -a:仅显示文件访问控制列表 -d:仅显示默认的访问控制列表 -c:不显示注释表头 -e:显示所有的有效权限 -E:显示无效权限 -s:跳过只有基条目(base entries)的文件 etc…
- chacl:更改文件或目录的ACL。
与chmod相似,但是更为强大精细,通过chmod可以控制文件被何人调用,但若是某一用户的文件只想给特定的用户看时,则需要chacl出场完成用户的需求。
chacl可用来设置文件或目录的控制权限:
语法:chacl [acl/R/D/B/l/r] pathname... / chacl -b acl dacl pathname... / chacl -d dacl pathname... 其中的命令选项说明如下: -b 同时修改文件权限和默认目录权限 -d 设置目录的默认权限 -R 只删除文件的权限 -D 只删除目录的权限 -B 删除所有权限 -I 列出所有文件和目录权限 -r 设置所有目录和子目录下的权限
例如,清除文件名为usertxt的文件上的ACL设置:
其它权限管理
Linux中默认账户为普通用户,但是在更改系统文件或者执行某些命令时,都需要以root用户的权限才能进行,此时就需要将默认的普通用户更改为root用户。
在切换用户身份时,常常用到的命令有三种:
su:此命令在切换用户时,仅切换root用户身份,但shell环境仍为普通用户;
su –:此命令在切换用户时,用户身份和shell环境都会切换为root用户;
sudo:此命令可以允许普通用户执行管理员账户才能执行的命令。
命令- su/su-
su可用来更改用户身份,但不会更改shell环境。
语法:su [options] [-] [<user> [<argument>...]] 其中的命令选项说明如下: -m,-p:执行su时不会改变环境变量 -s:指定要执行的shell(bash csh tcsh 等) -c:变更账号为USER的使用者并在执行完command后变为原使用者 -f:不需要读启动档,仅用于 csh 或 tcsh etc…
命令-sudo
sudo可允许普通用户执行root用户才能执行的任务。
语法:sudo –h | -K | -k | -V 其中的命令选项说明如下: -h:显示版本号以及指令的使用说明 -k:使使用者在下次执行sudo时询问密码 -V:显示版本编号 -l:显示使用者的权限 -L:显示sudos设置 etc… 更多参数说明: -V 显示版本编号 -h 会显示版本编号及指令的使用方式说明 -l 显示出自己(执行 sudo 的使用者)的权限 -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码 -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟) -b 将要执行的指令放在背景执行 -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称 -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码) -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root ) command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
文件权限管理命令:
chmod [{ugoa}{+-=}{rwx} [文件或目录] 改变文件或目录权限
chmod [mode=421] [文件或目录] 改变文件或目录权限
chmod -R 递归修改
权限的数字表示: r—4 w—2 x—1 eg: rwxrw-r-- 764
chown [用户] [文件或目录] 改变文件或目录的所有者,root使用
chgrp [用户组] [文件或目录] 改变文件或目录的所属组
umask [-S] 以rwx形式显示新建文件缺省权限(the user file-creation mask)
用户管理命令:
useradd 用户名 添加新用户
passwd 用户名 设置用户密码
who 查看当前登陆用户(tty本地终端 pts远程终端)
w 查看当前登陆用户(tty本地终端 pts远程终端)详细信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!