【Linux】权限解析(从chmod到umask和粘滞位)

张开发
2026/4/27 14:56:37 15 分钟阅读

分享文章

【Linux】权限解析(从chmod到umask和粘滞位)
目录前言一、权限是什么二、Linux中的用户区分三、文件属性1.文件类型2.访问的身份3.访问权限属性四、文件访问权限的修改方法1.修改权限属性chmod2.修改文件角色归属chownchgrp五、文件的默认权限和实际权限umask六、粘滞位前言今天我们来聊一个 Linux 里非常基础但又特别容易混淆的知识点权限。很多同学刚开始学 Linux 时看到一串类似这样的内容-rw-r--r-- 1 user user 1024 test.txt drwxr-xr-x 2 root root 4096 mydir第一反应可能是这是什么神秘代码其实它一点也不神秘。Linux 权限本质上解决的就是一句话谁能以什么方式操作这个文件或目录只要把“谁”和“怎么操作”这两个问题搞清楚权限这一块就会清晰很多。一、权限是什么在 Linux 系统中权限指的是操作系统用来控制用户访问文件或目录的一种机制。谁可以访问某个文件或目录以及可以用什么方式访问。例如一个用户是否可以查看文件内容、修改文件、执行程序或者进入某个目录都是由权限来控制的。Linux 中的权限主要受到两个因素影响第一文件或目录本身的属性。每个文件或目录都会记录自己的权限信息例如是否允许读取、写入或执行。第二用户的身份和角色。同一个文件对于不同用户来说权限可能不同。Linux 通常会根据用户身份将访问者分为三类文件所有者、所属用户组成员、其他用户。二、Linux中的用户区分在 Linux 中用户大体可以分为两类root 用户也叫超级用户权限非常高几乎可以操作系统中的任何文件和目录。普通用户只能在自己被允许的范围内操作文件、目录和命令。创建用户adduser [用户名]设置密码passwd [用户名]删除账号userdel -r [用户名]切换用户 su [用户名]切换到root用户susudo 命令 # 以更高权限执行某条命令超级用户的命令提示符是“#”普通用户的命令提示符是“$”。这里要注意sudo不是让普通用户真正变成 root而是临时借用 root 的权限执行某条命令。并且不是所有普通用户都能随便使用sudo通常需要被加入系统信任配置中。三、文件属性使用ll命令查看文件信息文件名前面的内容就是文件属性。例如这就是code的文件属性1.文件类型d文件夹-普通文件l软链接类似Windows的快捷方式b块设备文件例如硬盘、光驱等p管道文件c字符设备文件例如屏幕等串口设备s套接口文件2.访问的身份一个文件被创建出来以后Linux 不会只问“你是谁”还会看你相对于这个文件是什么身份。Linux 文件权限里常见三种身份uuser文件拥有者ggroup文件所属组oothers其他用户举个例子张三创建了一个code.c文件那么张三就是这个文件的拥有者。张三所在的开发小组就是所属组。其他不属于这个组的人就是 others。所以权限并不是孤立存在的而是和身份绑定在一起的。权限由用户身份和文件本身属性共同决定。3.访问权限属性Linux 最基本的权限有三种rread读权限wwrite写权限xexecute执行权限对普通文件来说r能不能查看文件内容w能不能修改文件内容x能不能把它当作程序执行对普通文件来说r/w/x分别表示读、写、执行但对目录来说含义会发生变化。目录的r表示能不能列出目录内容w表示能不能创建、删除、重命名目录中的文件x表示能不能进入目录、穿过目录、访问目录中的已知文件。因此目录的x权限非常关键。没有x权限即使你有r权限也只是能看到目录中有哪些名字却无法真正进入目录或访问里面的文件。四、文件访问权限的修改方法1.修改权限属性chmod如果我们想修改文件或目录的权限就会用到chmod指令下面是他的语法chmod 选项 权限 文件名常用选项 -R 地柜修改目录及子目录的权限u拥有者g所属组o其他人a所有人增加权限-删除权限重新设置权限使用演示chmod ux test.sh # 给拥有者增加执行权限chmod g-w test.txt # 去掉所属组的写权限chmod or test.txt # 给其他人增加读权限chmod a-x test.sh # 去掉所有人的执行权限上面是符号方式其实还有数字方式权限也可以用数字表示 r 4 w 2 x 1 所以 rwx 4 2 1 7 rw- 4 2 6 r-- 4 --- 0 例如 chmod 755 test.sh 含义是 拥有者7 rwx 所属组5 r-x 其他人5 r-x注意 只有文件的拥有者或具有root权限才能修改和设置文件的权限属性。2.修改文件角色归属权限解决的是“能做什么”而归属解决的是“这个文件属于谁”。chownchown指令用来修改文件拥有者chown 用户名 文件名示例sudo chown user test.txt 表示把 test.txt 的拥有者改成 user。chgrpchgrp指令用来修改文件所属组chgrp 用户名 文件名示例sudo chgrp group test.txt 表示把 test.txt 的所属组改成 group。 如果想同时修改拥有者和所属组可以这样 sudo chown user:group test.txt实际使用中修改拥有者通常需要 root 权限所以经常会配合sudo使用。五、文件的默认权限和实际权限在Linux下一个普通文件它的默认权限是rw- rw- rw- (666)而一个目录的默认权限是rwx rwx rwx (777)。但在我们实际创建一个文件后权限通常不是默认值注意这就存在一种叫做umask权限掩码的机制它控制的是新创建文件和目录时哪些权限将被去除umask可以用umask指令查看当前umask码超级用户默认掩码值为0022普通用户默认为0002上面要是看不懂可以看下面这个image 2 画的图我觉得解释的很好解释的就是上图。umask也能修改umask 002六、粘滞位前面说过目录的w权限表示可以在目录中创建、删除、重命名文件。但是这会带来一个问题如果一个共享目录权限是777那么所有用户都可以往里面创建文件同时也可以删除别人创建的文件。例如chmod 777 share此时share目录对所有人都有读、写、执行权限。用户 A 在里面创建的文件用户 B 也可能删除掉因为删除文件主要看的是文件所在目录有没有写权限而不是文件本身有没有写权限。为了解决这个问题就可以给目录设置粘滞位。chmod t share设置粘滞位后查看目录权限 ls -ld share drwxrwxrwt 最后的 t 就表示该目录设置了粘滞位。设置粘滞位后目录中的文件通常只能由下面几类用户删除文件拥有者目录拥有者root 用户权限 角色 文件的权限属性

更多文章