Linux随笔04
第4章 文件权限:
权限的意义在于允许某一个用户或某个用户组以规定的方式去访问某个文件。
4.1 基本权限UGO
U:owner,属主。
G:group,属组。
O:other,其他用户。
Linux系统通过U、G、O将用户分为三类,并对这三类用户分别设置三种基本基本权限,这种设置权限的方式叫做UGO方式。
r:read(读取),数字设定为4.
w:write(写入),数字设定为2.
x:execute(执行),数字设定为1.
owner的权限为“rw-”(读取与写入),数字可表示为4+2=6;group的权限为“r--”(读取),数字可表示为4;other的权限为“r--”(读取),数字可表示为4.
777:可读可写可执行,所有用户所有权限
000:三不可。
4.1.1 设置文件属性与权限
为了数据的安全,系统需要给予不同身份的用户、用户组对应的文件权限
chown:修改文件属主、属组。修改属主的同时也可以修改属组,只需要在属主与属组之间加入“,”或“:”即可。一般使用“:”以免因属主名称含有“.”造成系统误判。
chgrp:修改文件属组。(只改变文件属组)
若要将某目录下的所有子目录或文件同时修改属主或属组,只需要在chown与chgrp命令后添加-R即可
chmod:修改文件权限。
设置权限的两种方式:一种为符号,一种为数字
符号修改权限是使用u、o、g这三个符号代表属主、属组、其他用户这3种身份,a代表全部身份,r、w、x符号代表读、写、执行,通过赋值符增加、删除、覆盖文件权限。
chmod功能:
命令 | 对象 | 赋值符 | 权限类型 | 目标文件 |
chmod |
u g o a |
+ - = |
r w x |
file |
eg:创建文件file,给该文件的属主增加执行权限,当查看属主权限字符位出现“x”符号时说明增加执行权成功
给file文件的属组增加写入权限,当查看属组权限字符位出现“w”符号时说明增加写入权限成功
同时给所有对象增加读、写、执行权限,在chmod命令后加“a”符号,然后覆盖掉当前全部权限
同时给所有对象删除某一个权限
同时删除所有对象的全部权限
一次分别给不同对象增加或删除不同的权限
使用递归参数“-R”
Linux系统有9个基本权限,可以使用数字来代表各个权限,每种身份各字段3个权限数值累加,计算所得出的和就是该身份的权限值。
eg.user=rwx=4+2+1=7,group=rw-=4+2=6,other=---=0+0+0=0,此用户权限为“760”
创建文件file02,使用数字权限
chown和chmod的区别:
chown:Linux系统中原来改变某个文件属性的命令
chmod:Linux系统中用来改变某个文件的访问模式的命令
4.1.2 UGO权限设置案例
r、w、x权限对文件和目录的意义:
权限 | 对文件的影响 | 对目录的影响 |
r(读取) | 可读取文件内容 | 可列出目录的内容(文件名) |
w(写入) | 可修改文件内容 | 可创建或删除目录中的任一文件 |
x(执行) | 可将文件作为命令执行 | 可访问目录的内容(取决于目录中文件的权限) |
r、w、x对文件的影响:
r:文件拥有者可以读取文件内容。
w:文件拥有者可以修改文件内容,例如添加、删除或修改文件中的文本。
x:文件拥有者可以执行文件,如果文件是一个脚本或可执行文件,则可以运行该文件。
r、w、x对目录的影响:
r(读)权限表示用户可以查看目录下的文件列表,即ls命令
w(写)权限表示用户可以对目录进行修改,如删除、新建文件和目录
x(执行)权限表示用户可以进入该目录。
文件与目录的权限区别:
文件与目录的权限主要有读(r)、写(w)和执行(x)三种。 -
读权限(r):对于文件,拥有读权限可以查看文件的内容;对于目录,拥有读权限可以查看目录的内容,如列表文件和执行ls命令。
写权限(w):对于文件,拥有写权限可以修改或新增文件内容,但不含删除文件;对于目录,拥有写权限可以删除目录内的文件,但不含删除目录本身。
执行权限(x):对于文件,拥有执行权限可以执行文件,如运行程序;对于目录,拥有执行权限可以进入目录并执行其中的文件。
此外,还有特殊权限,如Set UID和Set GID,用于设置文件或目录的执行权限。SUID权限使得文件或目录的执行者变为文件所有者,SGID权限则使执行者变为文件所属组。
需要注意的是,文件的权限分为三组:文件所有者(u)、同组用户(g)和其他用户(o)。每组权限都有读、写、执行三种,用三位表示。例如,rw-rw-r--表示文件所有者有读写权限,同组用户有读写权限,其他用户有读权限。
注意事项:
文件:x权限小心给予
目录:w权限小心给与
存储在磁盘上的文件就像是一个链表,表头是文件的起始地址,整个文件并不一定是连续的,可能是多个节点连接而成的。要访问某个文件时,只要找到表头即可。删除文件时,其实只是把表头删除了,后面的数据并没有删除,直到下一次进行写磁盘操作需要占用节点所在位置时,才会把相应的数据覆盖掉
4.2 基本权限ACL
UGO权限只针对一个用户、一个组与其他用户,使用上有局限性,ACL主要提供传统的UGO的r、w、x权限之外的具体权限设置,可以对单一用户、单一文件或目录进行权限设置。
4.2.1 ACL基本用法
getfacl命令:查看ACL权限(显示的内容与使用ll命令查看到的内容相差无几)
setfacl命令:设置ACL权限,对每一个文件或目录进行更精确的权限设置。添加-m可以修改当前文件ACL权限。
使用getfacl命令查看,用户的权限已修改为“rw-”
新创建用户tom,与其增加“rwx”权限,使用getfacl命令查看
为组hr增加“rw”权限
当给用户增加“-”权限,如果使用ll查看会有读取限制,但使用getfacl命令查看,权限会变成“对文件没有任何权限”
添加“-x”可以删除用户对文件的所有权限
添加“-b”可以删除所有扩展ACL权限,回到UGO的基本权限
4.2.2 ACL高级特性
1.最大有效权限mask
mask:用来指定最大有效权限。系统给用户赋予的ACL权限需要和mask的权限逻辑"相与",“相与”之后的权限才是用户的真正权限
eg:将mask权限设置为“r”,用户权限与其“相与”之后,有效的权限为“r--”,用户真正的权限也就是“r--”
eg:将mask权限设置为“rw”,用户的权限是“rx”,那么“相与”后的最终权限为“r--”
mask并不能影响所有用户,比如owner与other权限没有因mask变化而变化
为了方便管理文件权限,通常将other的权限置为空
2. mask作用:能临时降低用户或组(除owner和other)的权限,而不是如“setfacl-b”命令删除所有权限
只要有任何ACL权限设置,mask会自动还原
3. default:j继承
default命令可以继承上一个目录的权限
添加“d”参数可对目录/home以及其下新建的文件有读、写、执行权限
4.3 高级权限
普通用户可以修改密码。用户运行的是/usr/bin/passwd文件,最终修改的是/etc/shadow文件,然而/etc/shadow文件只有root用户可以需改
当用户执行passwd命令时,使用“ps aux”命令查看当前进程发现,真正运行passwd的是root用户
4.3.1 SUID权限
SUID权限——用户。是Linux文件系统的一种特殊权限位。
SUID权限的作用:当一个二进制程序文件设置了SUID权限后,无论谁运行这个程序,它都会以程序文件的所有者的权限运行。即使一个普通用户运行了一个具有SUID权限的程序,这个程序也会获得程序所有者的权限来执行。
SUID权限的设置方法:使用chmod命令设置文件权限,例如:chmod u+s /usr/bin/cat。给文件添加一个s位,表示设置SUID权限。
SUID权限的安全性问题:如果一个SUID程序存在安全漏洞,可能会导致普通用户获得超级用户权限;只应给 critically necessary 的系统程序设置SUID,不建议给普通二进制文件设置。SUID权限可以让普通用户临时获得高级权限执行特定任务,但同时也带来一定的安全隐患,需要谨慎使用。
普通用户可通过SUID提权,使用chmod命令给usr增加SUID权限,切换到用户下
4.3.2 SGID权限
SGID权限——用户组。Linux文件系统的一种特殊权限位。
SGID权限的作用:当一个二进制程序文件设置了SGID权限后,无论谁运行这个程序,它都会以程序文件的所属组的权限运行。即使一个用户不在该程序文件所属组内,运行该程序也会获得该程序组的权限。
SUID权限的设置方法:使用chmod命令设置文件权限,例如:chmod g+s /home/hr
与SUID权限相比,SGID权限的危害性较低,因为只提供组权限,而不是超级用户权限。但是如果程序存在安全漏洞,也可能被利用获得不应有的组权限。所以在使用SGID时,同样需要审慎评估是否真需要,仅限于必要的系统服务程序。可以通过SGID实现更好的资源共享,但也需谨防潜在安全隐患。
在一个目录上添加SGID,该目录下新创建的文件会继承其属组
4.3.3 Sticky权限
Sticky权限——删除。是Linux文件系统权限的一种特殊位。
添加Sticky后,当用户对目录具有w、x权限,在该目录下建立的文件或目录,仅有自己与root才有权删除
Sticky权限的作用:只有目录的所有者或者该目录文件所有者才能删除或修改该目录下的文件。对于其他用户,即使具有写权限,也只能删除或修改自己创建的文件,而不能删除其他用户创建的文件。
设置Sticky位的方法:使用chmod命令给目录设置t位:chmod +t 目录名
例如:chmod +t /tmp,这会给/tmp目录设置Sticky位。添加“t”后用户只能删除自己的文件
/tmp目录为全局可写,其权限只能为1777,否则会导致程序不能正常运行
权限的字符位只有9位,增加的特殊权限会占用“x"权限的位置。为了区分目录或文件是否含有”x“权限,系统会以特殊权限的大小写方式给与提示。当符号为大写时表示不含有”x“权限,当符号为小写时表示含有”x“权限
相比SGID和SUID,Sticky位提供的不是执行权限,而是对目录文件操作的额外限制。它可以在需要多个用户共享目录资源的场景下提供更好的访问控制。但是需要注意,具有写权限的用户仍然可以修改其他用户的文件,只是不能删除。所以Sticky位无法完全防止资源被非法修改,但可以在一定程度上保护文件不被删除。
高级权限 | 数字符号 | 文件 | 目录 |
SUID | 4 | 以属主身份执行 | |
SGID | 2 | 以属组身份执行 | 继承属组 |
Sticky | 1 | 用户只能删除自己的文件 |
4.4 文件属性chattr
chattr命令:改变文件的隐藏属性
chattr命令仅对ext2/ext3/ext4文件系统完整有效,其他文件系统可能仅支持部分隐藏属性或者根本不支持隐藏属性
使用man工具查看chattr命令的使用方法
[root@localhost suli]# man chattr
chattr命令给文件增加"a"属性之后,便不能用Vim编辑器写入文本,需要使用echo命令以追加的方式写入。此属性一般用于日志文件,因为日志文件内容是在后面追加,前面的内容不能被覆盖,整个文件也不能被删除。当需要截取某段日志时,去掉该属性即可。
chattr命令给文件增加“i”属性之后,该文件不接受任何形式的修改,只能读取。
chattr主要用于保护系统文件不被意外修改,或者提高文件的读写效率。需要注意的是,文件属性设置后无法正常修改文件,必须使用chattr先删除属性才能修改文件。所以需要谨慎设置,避免锁死重要文件。
4.5 进程掩码umask
当用户创建新目录或文件时,系统会赋予目录或文件一个默认权限
umask作用:指定权限默认值。为系统设置一个合理的umask值,确保创建的文件或目录具有所希望的缺省权限,有利于保证数据安全
umask值表示要减掉的权限,也可以简单地理解为权限的“反码”,进程和新建文件、目录的默认权限都会受到umask的影响。
新建的目录如果全局可写,基本权限应该是777,但实际上基本权限是755,新创建的文件基本权限为644,因为umask要强制去掉group与other的写权限,而文件系统默认不赋予执行权限、
不同的进程都可以设置自己的umask。
umask的值是一个三位八进制数,每一位分别对应用户(u)、组(g)、其他用户(o)三种访问类型的读(4)、写(2)、执行(1)三种权限。
例如:umask 022,则新建文件默认权限为664(rw-rw-r--),目录为777(rwxrwxrwx)。umask 027,则新建文件默认权限为640(rw-r-----),目录为750(rwxr-x---)
umask值的计算规则是:文件/目录最大权限为666/777。对应umask值进行位与运算,去除对应的权限即为实际默认权限
查看当前用户的umask值:umask
临时修改umask值:umask <值>
永久修改umask值:修改/etc/profile或用户主目录下的.bashrc文件,添加umask <值>命令
umask主要用于控制新建文件或目录的默认权限,避免信息外泄。根据实际需要,可以设置较严格的umask值来保护数据安全。同时需要注意,对已存在的文件或目录,umask设置无效,不会改变它们的原有权限。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律