linux文件权限详解
-
文件类型
- -:普通文件
- d:目录文件
- l:软连接(类似windows中的快捷方式)
- b:块设备文件
- p:管道文件
- c:字符设备文件(如猫等串口设备)
- s:套接口文件/数据接口文件(例如启动一个MySQL服务时会产生一个mysql.sock文件)
-
基本权限
rwx:可读(4)、可写(2)、可执行(1)
user, group, others(分别使用字母u、g、o表示,a表示所有)都具有基本权限
-
更改文件的基本权限
使用chmod命令,方式如下:
chmod u+x test.txt //为user添加x权限
chmod u=rwx,g=rx,o=r test.txt //设置文件权限为rwxr-xr--
chmod 755 test.txt //设置文件权限为rwxr-xr-x
chmod a+x test.txt //为文件添加可执行权限(所有人可执行)
-
默认权限
umask:权限掩码,用来指定当用户在建立文件或者目录时的默认权限。可修改
umask 0002:第一位代表特殊权限,后三位表示基本权限,但是对于文件来说,创建文件时会自动把文件的执行权限消除,即文件创建的默认权限是rw-rw-r--,而目录创建的默认权限是rwxrwxr-x
-
ACL权限
区别于ugo之外的权限,可以对某一用户单独设置一个基本权限,使它具有不属于user、group、others三者的权限
getfacl 文件名:查看文件的acl权限
setfacl -m u:lanhuhen:rx 文件名:为用户lanhuhen设置acl权限为可读可执行
setfacl -m g:group1:rx 文件名:为组group1设置acl权限为可读可执行
设置好acl权限之后,通过ls -l查看该文件时,在权限列中会多一个+号,证明该文件设置了acl权限
最大有效权限:
mask用来指定最大有效权限,默认值时rwx,我们设置acl权限时都要与mask进行与计算,然后得到文件真正的acl权限。我们一般不修改mask的值
setfacl -m m:rx project : 设置msk权限为r-x,可通过getfacl project命令查看mask的值
默认acl权限:如果给父目录设置了默认的acl权限,则父目录中所有新建的自文件都会继承父目录的acl权限,默认acl只对目录生效
setfacl -m d:u:用户名:权限 目录名 : 为目录设置默认的acl权限
我们既可以通过设置默认的acl权限来指定子文件的acl权限,也可以通过-R递归属性来指定,即setfacl -m u:lanhuhen:rx -R project命令设置project目录及子文件acl权限
删除指定acl权限:setfacl -x u:lanhuhen project :指定删除project目录下lanhuhen用户的acl权限
删除所有acl权限:setfacl -b project :删除project目录下所有acl权限
acl常用属性:-m, -x, -b, -d, -R, -k(删除默认的acl权限)
-
特殊权限
SetUID简称SUID,只适用于可执行文件,作用是:当用户执行此文件时,会以文件所有者的身份去执行该文件,一旦执行结束,身份会变回自身,如/etc/shadow文件-rwsr-xr-x
SetGID简称SGID,同SUID,如文件/usr/bin/mlocate文件-rwxr-sr-x
Sticky BIT简称SBIT,SBIT仅对目录有效,如果目录设置了SBIT权限,则用户在此目录下创建的文件或者目录就只有自己和root才有权利修改或者删除该文件
如果使用者没有文件的执行权限,则对应的特殊权限也不会有
-
隐藏权限
chattr [+-=] [属性] 文件/目录:设置文件的隐藏权限
常用属性:
- i:如果对文件设置i属性,不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,只能修改目录下文件中的数据,但不允许建立和删除文件
- a:如果对文件设置a属性,只能在文件中增加数据,但是不能删除和修改数据;如果对目录设置a属性,只允许在目录中建立和修改文件,但是不允许删除文件
- u:设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够回复,常用来防止意外删除文件或者目录
- s:和u属性相反,删除文件或目录时,会被彻底删除,不可恢复(直接从硬盘上删除,然后用0填充所占用的区域)
lsattr [options] 文件或目录
常用选项:
- a:后面不带文件或者目录名,表示显示所有文件和目录
- d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性
- R:和d属性相反,会连同子目录的隐藏信息数据也一并显示出来
-
系统权限管理(sudo and su)
- sudo命令是用来以非管理员的身份执行管理员相关命令的命令,前提是该用户必须拥有执行sudo命令的权限
- su命令用来切换用户
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)