【Linux】文件与用户权限

本文详细介绍了Linux文件的权限表示方式,包括rwx符号模式和数字模式。讲解了如何使用chmod和chown修改文件权限,以及对文件操作的权限判断依据。还讨论了特殊权限如u+s、g+s、o+t的作用,并提到了改变进程权限的su和sg命令的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、权限表示方式

rwx

执行ls -l,可以看到文件或目录前都有类似drwxr-xr-x的符号
其中第一位,d表示目录,后面9位表示文件的权限设置,其中前3位是所属用户权限,中间3位是所属组权限,后3位是其它用户权限

文件权限可以用符号模式,表示为rwx,分别表示读、写、执行权限,没有某种权限用“-”表示,比如只有读和执行权限,则为r-x

文件权限也可以用数字模式,其中r=4,w=2,x=1,表示时将拥有的权限数值相加,比如rwx为4+2+1=7,r-x则为4+1=5,一个文件完整权限rwxr-xr--则可以表示为754

用户对文件的操作权限

权限标志后面有两个名字,比如drwxr-x--- 7 ccb1 ccb2中的ccb1和ccb2,ccb1表示文件所属用户,ccb2表示文件所属组
结合前面的文件权限标志,可以识别用户对文件是否有相应的操作权限
比如前面文件所属用户是ccb1,对应的权限标志是rwx,则ccb1用户对该文件有读、写、执行权限;
而文件所属组是ccb2,对应的权限标志是r-x,则表示如果一个用户在ccb2组里,则该用户对该文件有读和执行权限
(注:执行权限一般是对二进制文件来说的,脚本文件一般没有执行权限,只对读权限进行判断,比如一个py文件,要用python执行该文件时,需判断是否有读权限)

二、文件权限的修改

chmod

使用chmod指令可以修改文件权限

  1. 符号模式
    用符号表示要改的权限和行为:
    u:用户,g:组,o:其它,a:所有(即包含以上三种)
    +:赋予,-:移除,=:设置
    比如文件a.txt原权限为r-xr-xr-x,执行chmod u+w a.txt,则对用户权限加上了 写权限,变为rwxr-xr-x
  2. 数字模式
    直接设置完整权限,比如chmod 750 a.txt

chmod支持-R参数,表示递归设置目录下所有文件权限
chmod只有文件所属用户或root可执行

chown

使用chown可以改变文件所属用户
比如chown ccb1:ccb2 a.txt,则将a.txt所属用户设置为ccb1,所属组设置为ccb2
chown支持-R参数,表示递归设置目录下所有文件权限
chown只有root可执行

三、对文件操作的权限判断依据

读文件

需要对文件及其以上的所有成绩目录都有读权限
如:读取a/b/c,需要对a、b、c都有读权限

写文件

需要对文件有写权限,并对其以上的所有层级目录都有读权限
如:写入a/b/c,需要对c有写权限,并对a、b有读权限

增删文件

需要对其所在的目录有写权限,并对该目录以上的所有层级目录有读权限
如:在a/b目录下增删c,需要对b有写权限,并对a有读权限

执行文件

需要对其所在文件有执行权限,并对其以上的所有层级目录有读权限
如:执行a/b/c,需要对c有执行权限,并对a、b有读权限

路径包含软链接的情况

如果操作的文件路径包含软链接,除了对路径所有目录层级判断权限外,还需要判断软链接指向的真实路径的所有目录层级的权限
如:写入a/b/c,其中b是软链接,指向d/e,则需要对c有写权限,并对a、b有读权限,同时也要对d、e有读权限

四、特殊权限

u+s

执行chmod u+s 文件路径进行设置
用户权限的x位会变为s,如rwsr-xr--
正常通过可执行文件启动进程,进程的拥有者为执行指令的用户,使用chmod设置了文件用户权限的s标记,则使用该文件启动的进程的拥有者为文件拥有者
这个标记对二进制文件有效,对脚本是无效的

g+s

执行chmod g+s 目录路径进行设置
组权限的x会变为s,如rwxr-sr--
使用chmod对目录设置了组的s标记后,在目录下新创建的文件默认继承该目录的所属组

o+t

执行chmod o+t 文件路径进行设置
其它用户权限的x位会变成t,如rwxr-xr-t
使用chmod对文件设置其它用户的t标记后,只有root和文件所属用户可以删除此文件

数字模式

与rwx的数字模式类似
u+s为4,g+s为2,o+t为1,相加值表示要设置的权限,数值加载rwx的数值前
比如chmod 5770 文件路径,第一位的5表示设置u+so+t,后面的770则为rwx的数字表示,转为符号模式表示则为rwsrwx--t

(注:使用chown后,原先设置的特殊权限标志会消失)

五、改变进程权限(su和sg的用法)

su

root用户启动的shell进程,可以用su指令使用另一个用户权限启动子进程,其它用户执行su切换时则需要密码
格式:su - 用户名 -c 子进程启动指令
举例:su - ccb1 -c "python abc.py",如此启动的子进程abc.py则会是ccb1用户权限

sg

进程运行期间,进程所属用户进入了新的用户组,这个权限变化是无法在该进程生效的。若要使用心的组权限,一个方法是重启进程,但若不想重启进程,可以使用sg指令指定组名启动子进程,该子进程则会拥有该组权限
注:指定的组名必须是用户确实已进入的用户组,相当于是给子进程更新了用户的组权限,而不是新增组权限
格式:sg 组名 -c 子进程启动指令
举例:进程运行期间,ccb1用户加入了ccb2组,进程可执行sg ccb2 -c "python abc.py",则abc.py有了ccb2组权限,可以对ccb2组可操作的文件执行相应操作

不管是su还是sg,都不是真正改变原进程权限,而是让子进程的权限与父进程不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值