Linux学习之Linux系统权限
权限是访问一种资源的时候决定我们能还是不能的问题。命令作用groups [用户名]查看用户的所有所属组id [用户名]显示用户 UID、GID 及组列表usermod -aG 组名 用户名将用户添加到附加组gpasswd -d 用户 组名从组中移除用户newgrp 组名临时切换用户的主组(需有权限)• ⽬录的可执⾏权限是表⽰你可否在⽬录下执⾏命令。• 如果⽬录没有 -x 权限,则⽆法对⽬录执⾏任何
在上一篇的内容中我们学习到了Linux系统命令相关的知识及其相关的扩展内容,本期我们将学习Linux基础的另一个重要部分:Linux系统权限管理
作者的个人gitee:楼田莉子 (riko-lou-tian) - Gitee.com
目录
权限概念及必要性
什么是权限
权限是访问一种资源的时候决定我们能还是不能的问题。
为什么要有权限
那么为什么Linux要有权限呢?因为Linux系统是一个多用户系统,同时会有多个人来登录访问。如果没有权限之分,那么随意一个用户就可以对别人的数据进行增删查改,这是极其危险的行为。
因此,权限的本质就是为了更好的用户管理
权限=人+文件属性
权限是针对特定群体的——与人有关。因为Linux系统下一切皆文件,因此其目标主题必然天然带有一定的属性才能访问
文件的属性有三类:r(可读)、w(可写)、x(可执行)
Linux下有两种类型的用户:普通用户、root用户。
root用户:可以在Linux系统上做任何事情不受限制。
普通用户:在Linux系统下做有限的事情。
在Linux系统中。root用户的提示符是“#”,普通用户的提示符是“$”
su指令
语法:
su[用户名]
功能:切换用户。
比如su user就会从root用户转换为user用户。要从普通⽤⼾user切换到root⽤⼾则使⽤ su root(root可以省略),此时系统会提⽰输⼊root⽤⼾的⼝令。
但是当我们作为普通账号要进行安装软件的时候,酒席要将软件拷贝到指定目录下,但是OS会阻止我们拷贝,那是否只能让管理员来进行安装呢?不是的。有一个命令sudo可以解决。
sudo命令是普通账户进行短暂提权的命令。
普通用户默认是无法使用sudo的(自己安装的虚拟机除外)。
什么是白名单呢?与黑名单相对,无条件同意。普通账户默认不是白名单
root账户可以决定哪个普通用户是白名单内成员
Linux的权限管理
文件访问者
Linux系统下的角色:
⽂件和⽂件⽬录的所有者:u---User(中国平⺠ 法律问题)
⽂件和⽂件⽬录的所有者所在的组的⽤⼾:g---Group(不多说)
其它⽤⼾:o---Others (外国⼈)
具体如下:
那么Linux系统下为什么会有系统组呢?
因为在 Linux 系统中,用户的所属组(User Groups) 是权限管理的核心机制之一,它通过组(Group) 将用户分类,实现批量分配文件/目录的访问权限
所属组的核心作用
1、权限共享:同组用户自动继承该组对文件/目录的权限(读/写/执行),无需单独配置每个用户。
2、资源隔离:不同组的用户无法访问彼此的资源(除非显式授权)
3、简化管理:修改组的权限 = 批量修改组内所有用户的权限
用户与组的关系
1、主组
-
每个用户必须属于且仅有一个主组(创建用户时自动生成同名组)。
-
用户新建文件时,文件的默认所属组 = 用户的主组。
-
查看命令:
id
或groups
$ id alice uid=1001(alice) gid=1001(alice) groups=1001(alice),1005(developers) # gid=1001(alice) → 主组是 "alice"
2、附加组
-
用户可加入零个或多个附加组,获得额外的权限。
-
示例:用户
alice
加入developers
组后,可访问该组授权的项目目录。 -
管理命令:
usermod -aG developers alice # 将 alice 添加到 developers 组(不改变主组) groups alice # 查看 alice 的所有所属组
组信息存储位置
文件 | 作用 | 示例内容 |
---|---|---|
/etc/passwd |
记录用户的 UID 和主组 GID | alice:x:1001:1001::/home/alice:/bin/bash |
/etc/group |
定义组及其成员列表 | developers:x:1005:alice,bob (组名:密码占位符:GID:成员列表) |
解析 /etc/group
:
-
developers
:组名 -
x
:加密密码占位符(实际密码在/etc/gshadow
) -
1005
:组 ID (GID) -
alice,bob
:组成员列表(用逗号分隔)
关键命令总结:
命令 | 作用 |
---|---|
groups [用户名] |
查看用户的所有所属组 |
id [用户名] |
显示用户 UID、GID 及组列表 |
usermod -aG 组名 用户名 |
将用户添加到附加组 |
gpasswd -d 用户 组名 |
从组中移除用户 |
newgrp 组名 |
临时切换用户的主组(需有权限) |
文件属性及其权限
⽂件类型:
◦ d:⽂件夹
◦ -:普通⽂件
◦ l:软链接(类似Windows的快捷⽅式)
◦ b:块设备⽂件(例如硬盘、光驱等)
◦ p:管道⽂件
◦ c:字符设备⽂件(例如屏幕等串⼝设备)
◦ s:套接⼝⽂件
基本权限:
◦ 读(r/4):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息的权限
◦ 写(w/2):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除移动⽬录内
⽂件的权限
◦ 执⾏(x/1):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权
限
◦ “—”表⽰不具有该项权限
Linux中的举例说明
那么如何表达一个文件的权限?
文件访问权限相关的设置
1、chmod
语法:
chmod [参数] 权限 ⽂件名
功能:设置⽂件的访问权限
常⽤选项:
R -> 递归修改⽬录⽂件的权限
说明:只有⽂件的拥有者和root才可以改变⽂件的权限
chmod命令权限值的格式:
⽤⼾表⽰符+/-=权限字符
+:向权限范围增加权限代号所表⽰的权限
-:向权限范围取消权限代号所表⽰的权限
=:向权限范围赋予权限代号所表⽰的权限
⽤⼾符号:
u:拥有者
g:拥有者同组⽤
o:其它⽤⼾
a:所有⽤⼾
举例说明:
2、chown
语法:
chown [参数] ⽤⼾名 ⽂件名
功能:修改⽂件的拥有者
3、chgrp
语法:
chgrp [参数] ⽤⼾组名 ⽂件名
功能:修改⽂件或⽬录的所属组
常⽤选项:-R 递归修改⽂件或⽬录的所属组
4、unmask
语法:
格式:umask 权限值
功能:
查看或修改⽂件掩码
新建⽂件夹默认权限=0666
新建⽬录默认权限=0777
但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的
时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的⽂件权限是: mask &
~umask
说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为0022,普通⽤⼾默认为0002
file指令
语法:
file [选项] ⽂件或⽬录...
功能:辨识⽂件类型
常⽤选项:
• -c:详细显⽰指令执⾏过程,便于排错或分析程序执⾏的情形。
• -z:尝试去解读压缩⽂件的内容。
使用sudo分配权限
(1)修改/etc/sudoers ⽂件分配⽂件
# chmod 740 /etc/sudoers
# vi /etc/sudoer
(2)使⽤ sudo 调⽤授权的命令
$ sudo –u ⽤⼾名 命令
目录的权限
目录有三种权限:
可执⾏权限: 如果⽬录没有可执⾏权限, 则⽆法cd到⽬录中.
可读权限: 如果⽬录没有可读权限, 则⽆法⽤ls等命令查看⽬录中的⽂件内容.
可写权限: 如果⽬录没有可写权限, 则⽆法在⽬录中创建⽂件, 也⽆法在⽬录中删除⽂件.
于是, 问题来了~~ 换句话来讲, 就是只要⽤⼾具有⽬录的写权限, ⽤⼾就可以删除⽬录中的⽂件, ⽽不论这个⽤⼾是否有这个⽂件的写权限.
这好像不太科学啊, 我张三创建的⼀个⽂件, 凭什么被你李四可以删掉?
我们用下面这段进行验证
为了解决这个不科学的问题, Linux引⼊了粘滞位的概念
关于权限的总结
• ⽬录的可执⾏权限是表⽰你可否在⽬录下执⾏命令。
• 如果⽬录没有 -x 权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法 cd 进⼊⽬, 即使⽬录仍然有 -r 读
权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件)
• ⽽如果⽬录具有 -x 权限,但没有 -r 权限,则⽤⼾可以执⾏命令,可以 cd 进⼊⽬录。但由于没有
⽬录的读权限
• 所以在⽬录下,即使可以执⾏ ls 命令,但仍然没有权限读出⽬录下的⽂档。
粘滞位(选择性学习)

当⼀个⽬录被设置为"粘滞位"(⽤chmod +t),则该⽬录下的⽂件只能由
1. 超级管理员删除
2. 该⽬录的所有者删除
3. 该⽂件的所有者删除
留下三个问题:
三个问题
1、进入一个目录需要什么权限?
2、为什么我们新建一个文件默认权限是我们看到的那个样子?
3、没有rmx我们能删除这个文件吗?
这些部分我后面会补充。
本期内容就到这里,喜欢请点个赞谢谢
封面图自取:
更多推荐
所有评论(0)