Linux 权限的概念
Linux 下有两种用户:超级用户( root )、普通用户。
超级用户:可以在linux下做任何事,不受-rwx权限的影响
普通用户:linux使用者,受权限的影响
超级用户的命令提示符是"#",普通用户的命令提示符是"$"。
bash
命令:su [用户名]
功能:切换用户。
例如, 要从 root 用户切换到普通用户 user ,则使用 su user 。 要从普通用户 user 切换到 root 用户则使用 su root ( root 可以省略),此时系统会提示输入 root用户的口令。
1.linux文件属性
文件访问者分为:
-
文件和文件目录的 所有者(u-Usr)。
-
文件和文件目录的 所有者所在组的用户(g-group)。
-
其它用户**(o-Others)。**
字符表示权限方法 :
r 、w、x分别表示可读、可写、可执行
开头字符意义:
bash
d:目录
-:普通文件
c:字符设备文件
b:块设备文件
p:管道文件
c:链接文件
八进制表示权限的方法 :
2. 权限管理三剑客
2.1chmod
在 Linux 中,`chmod`(更改模式的缩写)是一条用于**更改文件或目录权限的命令。**权限决定了谁可以读取、写入或执行某个文件或目录,权限分为以下三组:
-
拥有者(用户):拥有文件的用户。
-
所属组:与文件相关联的用户组。
-
其他人:不属于上述两者的其他用户。
bash
用法格式为:
chmod [类别][操作][权限] 文件名
类别:
bash
- `u`:用户(文件所有者)
- `g`:组
- `o`:其他人
- `a`:所有人(用户、组和其他人)
操作:
bash
- `+`:添加权限
- `-`:移除权限
- `=`:设置为指定权限
权限可以通过字符模式或八进制数值模式来设置:
字符模式
符号模式使用字母表示权限类别和操作。例如:
-
`r` 代表读取权限
-
`w` 代表写入权限
-
`x` 代表执行权限
八进制数字模式
数字模式使用八进制数字表示权限,每个权限类别的值如下:
-
`4`:读取权限
-
`2`:写入权限
-
`1`:执行权限
三个数字分别对应所有者、组和其他人的权限。
例如:
bash
chmod 755 file.txt
表示:
-
所有者 有读、写、执行权限(7 = 4 + 2 + 1)
-
组和其他人 有读和执行权限(5 = 4 + 1)
(1)将可读权限删除后,无法读取内容
(2)可以多项操作
(3)使用八进制修改权限
(4)对所有用户进行操作
使用a或者不用类别
注意:
超级用户(root):可以在linux下做任何事,不受-rwx权限的影响
普通用户:linux使用者,受权限的影响
如果你是超级用户,则不受-rwx权限的影响。
补充:
1.只有文件的拥有者和超级用户可以修改自己的权限
2.可执行程序 = 文件是可执行文件 + 可执行权限(x)
3.user、group、others和我自己进行身份对比时只对比一次
这里"wang"依次和拥有者、所属组进行对比,与拥有者身份匹配成功,拥有者没有读写权限
更改文件所属组需要root权限或者使用sudo提取权限
2.2 chgrp
chgrp - 更改文件或目录的所属组
-
语法:chgrp [选项] 新组 文件名
-
chgrp 仅更改文件或目录的所属组。
例如:
- 常用选项:
2.3 chown
chown - 更改文件或目录的所有者和组
-
语法:chown [选项] [新所有者][:新组] 文件名
-
chown 用于更改文件或目录的所有者或所属组。
(1)更改文件或目录的所有者
(2)更改文件或目录的所有者和所属组
(3)常用选项
3. 关于权限的三个问题
3.1目录权限(控制用户对目录的访问行为)
(1)x:进入一个目录需要的权限
有权限可以进入
无权限不能进入
(2)r:查看目录需要的权限
有权限可以查看
无权限不能查看
(3)w:在目录中新建文件,删除、修改文件名等修改文件的操作
有权限可以操作
无权限不能操作
3.2 缺省权限(文件和目录的默认权限)
在Linux中,缺省权限(Default Permissions)是指系统为新建的文件和目录分配的初始权限 。这个默认权限是通过 umask 值来控制的,`umask` 会"屏蔽"掉某些权限,从而设置文件和目录的初始权限。
(1)初起始限
新文件的起始权限一般为 666(可读写,但无执行权限)。
新目录的起始权限一般为 777(可读写执行)。
(2)umask的权限掩码
- 当 umask 为 022 时,新建文件的权限为 644,新建目录的权限为 755。
我们这里只看后三位,转成二进制的
cpp
000 000 010
- 可以通过 umask 命令查看或设置缺省权限的屏蔽位,例如 `umask 777`。 这让我们可以通过修改权限掩码达到修改Linux文件缺省的问题。
(3)最终权限(缺省权限)
cpp
最终权限 = 起始权限 & (~umask)
cpp
~ 000 000 010
111 111 101
&
起始权限 110 110 110 (666)
最终权限 110 110 100 -> 664
要永久更改umask,可以在 `~/.bashrc` 或 `/etc/profile` 中添加 `umask` 配置。这使得创建的文件和目录能自动获得合适的权限,更加安全和便捷。
3.3 粘滞位
在Linux中,"粘滞位"(Sticky Bit)是一种文件权限设置,用于目录或文件上,控制用户对文件或目录内容的删除权限 。通常设置粘滞位主要用于目录,使目录下的文件或子目录只能被文件的所有者、目录的所有者或者超级用户删除或重命名,其他用户即使有写权限,也无法删除或修改这些文件。
(1)常见的使用场景包括:
- 共享目录:例如`/tmp`目录,允许所有用户进行读写操作,但防止非所有者删除其他用户的文件。
(2)设置方法
可以使用`chmod`命令设置粘滞位:
cpp
添加粘滞位
chmod +t 目录名
移除粘滞位
chmod -t 目录名
(3)权限表示
在执行`ls -l`查看文件权限时,粘滞位会以"`t`"显示在目录的执行权限位置上。例如:
这里的`-rw-rw-r-T`中的T 表示粘滞位已经设置。
当一个目录被设置为 " 粘滞位 "( 用 chmod +t), 则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删
4.总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。