【Linux】Linux 的 权限
一、 Linux 权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以在 linux 系统下做任何事情,不受限制
- 普通用户:在 linux 下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
通俗解释:
超级用户:一般账号名为 root,该用户也叫超级管理员,相当于一款游戏的开放管理者,什么事都能做(比如删除某个游戏账号,将某个游戏账号的某些数值更改)
普通用户:相当于游戏服中的每个普通玩家账号,每个用户都管理着自己的文件目录,互不干涉
【命令】 su :切换用户
命令:su [用户名]
功能:切换用户。
例如:当前我们系统中有两个用户(超级用户 root、普通用户 mine)
1、要从超级用户 root 切换到 普通用户 mine,则使用 su mine。
2、要从普通用户 mine 切换到 超级用户 root,则使用 su root(root可以省略),此时系统会提示输入 root 用户的账户密码。
(因为超级用户是”无敌的“,切换任何普通用户都不需要密码,而其他用户切换操作则需要)
二、Linux 权限管理
本节将从普通用户 mine 的目录底下文件讲解:我们通过命令”ls -l“ 将目录的文件列表及其文件属性打印出来,如下
mine 用户一共有一个目录 text_dir、一个文件 text.txt
下面文件目录前面的各部分文件属性都是什么意思?
根据这张图:初步认识各个部分是什么意思
下面我们将对一部分概念进行一一解释:文件大小和文件最新修改时间不用解释
(注:连接数这里暂不讨论)
关于 文件类型
文件类型为 d:代表为 目录文件,如 text_dir
文件类型为 -: 代表为 普通文件,如 text.txt
关于 文件访问者的分类
对于 文件或文件目录 来说:有三种访问者身份
- 拥有者:只有一个,即文件的创建者,拥有者
- 所属组:只有一个组
- other:代表其他访问用户(为什么上面没有记录:其他人可以有很多个,因此没必要记录在上面)
何为 所属组:即为文件权限白名单
举个例子:
我们一个开发小组组长创建一个文件目录,创建者为文件的拥有者:组长,具有最高权限
整个小组共同开发,本组中开发的数据都放到该文件目录中
此时就涉及到访问权限的问题:要想实现共同开发,就必须将权限赋给小组的成员,此时小组成员用户相当于 “other 其他人”,其他人想要访问该文件目录,就必须有相应的权限允许,
若想要让 other 访问一个文件,文件拥有者就需要将权限开放,但是这样就会将自己的文件完全暴露于世;
这种情况可以将该 other 用户添加进 所属组:所属组就类似白名单,你存在文件所属组中,就可以拥有操作某文件的权限,而无需将文件完全暴露在外
⭐拥有者、所属组、other 都是一种身份,而 root、mine、zhangsan 都是一个个具体用户,具体用户有了前面某种身份,才能拥有对应的权限,有了权限才能做想要的事
关于 文件的访问权限
这里的 9 个字符代表着 文件的访问者 对文件的操作权限,每 3 个字符为一组,分别代表 文件拥有者的权限、所属组的权限、other 其他人的 权限
例如上图第一行:
符号 " r、w、x、- " 什么意思?
- 读 r :Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- 写 w :Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- 执行 x :execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- 横杠 “-” : 表示不具有该项权限
每组字符表示方法:
文件访问权限的相关设置方法
文件的的访问权限是可以修改的,通过下面几条命令
认识 拥有者、所属组、other 的缩写代号:
拥有者:user,缩写 u
所属组:group,缩写 g
其他人:other,缩写 o
【命令】 chmod:修改用户对文件的访问权限
全称:Change mode 更改权限
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的 拥有者 和 root 才可以改变文件的权限,其他任何用户都不能修改
使用 chmod 命令修改权限的符号:
加号 +:向权限范围 增加 权限代号所表示的权限
减号 -:向权限范围 取消 权限代号所表示的权限
等号 =:向权限范围 赋予 权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
使用演示:
对 user 修改权限:u-x,去掉 执行权限 x
对 group 修改权限:g-rw,去掉 读写权限 rw
对 other 修改权限:o+w,增加 写权限 w
多条命令可以合并写,使用逗号隔开
使用 a 同时代表三种身份:a-r 表示三种身份用户都减去 读权限 r
简单来说:chmod 命令可以通过 加减 来对指定身份 增加或删除 某些权限
8 进制表示文件权限值
因为是否拥有权限是两种状态,可以使用 0 和 1 来表达,如一个身份拥有 rw- 的权限,则二进制表示为 110 即为 6,因此设置权限也可以直接使用八进制的形式
8 进制形式可以同时设置所有身份的权限:
输入命令 “chmod 777 text_dir”,将所有用户的权限都设置成 rwx
【命令】chown :修改拥有者(移交拥有权)
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
实例:
当你是超级用户 root 时:
chown root ./text.txt // 将文件 text.txt 的拥有者修改成 root
当你是普通用户 mine 时:
chown root text.txt // 将文件 text.txt 的拥有者修改成 root
这里报错了:因为 普通用户无法直接移交自己文件的拥有权
只有超级用户 root 才有权力调整文件的 拥有权
普通用户只能通过使用 sudo 命令, “借助超级用户的力量”来达成上述目的
【命令】chgrp:修改所属组
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
实例:
该命令的用法和相关限制 与上面的 命令 chown 差不多
1、使用格式相同:
chgrp root text.txt // 将文件 text.txt 的所属组修改成 root
2、普通用户不能直接修改,超级用户可以直接修改
chgrp root text.txt // 将文件 text.txt 的所属组修改成 root
普通用户使用 chgrp 命令修改时直接报错:该操作未被允许
【命令】umask:查看权限掩码
Linux 中新建一个文件或目录的默认权限是:
- 对于目录,默认权限为 777:表示 rwx rwx rwx
- 对于文件,默认权限为 666:表示 rwx- rw- rw-(文件默认无执行权限)
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 权限掩码 umask 的影响。
1、查看默认权限掩码:
umask
超级用户默认掩码值为 0022,普通用户默认为 0002。
2、修改默认权限掩码:
umask 数值
3、最终权限值计算与演示
假设默认权限是 mask,则实际创建的出来的文件权限是: 最终权限 = mask - umask
普通用户 mine 创建新文件:最终权限为 664(即 rw-rw-r-- = 666-2 = 665 )
超级用户 root 创建新文件:最终权限 655(即 rw-r–r-- = 666-22 = 655 )
关于 目录的权限
对于一个普通文件来说:读文件即读取该文件的内容、写文件即添加修改文件内容、执行文件即运行该文件
对于一个目录来说呢?
(1)可执行权限: 如果目录没有可执行权限, 则无法 cd 到目录中.(决定是否可以切换到该目录)
(2)可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容(决定是否可以查看文件列表)
(3)可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件(决定是否可以在该目录下创建/删除/重命名 文件与目录)
注意:文件和目录的权限要分清楚!
若没有该目录的 rw 读写权限,表示我们不能在目录中 ls 查看目录的文件列表 与 不能在该目录下创建/删除/重命名 文件与目录,但是可以进入该目录里面的子目录和子文件中进行符合权限的操作(目录权限限制的是 目录 这一层面,不限制目录的子文件目录)
如现在有一个 mydir 目录,该目录中有一个文件 test.txt
. / mydir / test.txt
我们无法对 mydir 进行读写操作,但是可以对目录中的 text.txt 文件进行操作
关于 创建共享文件及其产生的问题
1、根目录不在任何一个用户的家目录下,因此根目录存放的文件与目录所有用户是共享的
当两个用户想要共享一个文件,但是不想直接进入对方的账户来查看,也不想将文件拷贝进自己账户,此时可以将文件放到根目录下,直接实现共享
2、为什么根目录上的文件与目录可以被任意用户共享使用?
我们在根目录下创建了一个文件目录 shared_fail :你可以发现前面 other 的权限是 rwx
3、既然根目录下的文件和目录可以全用户共享使用,岂不是某个用户可以直接删除共享文件或目录?
确实是,上面讲解过,例如共享目录 shared_fail 对于 other 的权限是 rwx,允许 读 写 执行,也就允许删除目录底下的文件或目录
一个用户直接删除掉公共数据(共享文件目录),显然不合理
那如何预防这种情况?把 other 权限中的 w 写权限去掉吗?显然不现实(一棒子打死了)
此时就需要使用粘滞位
粘滞位
当我们要实现一个共享目录 shared_fail ,允许任意用户在该目录下创建文件目录,但是不允许用户删除其他用户创建的文件目录,只允许对自己的文件目录进行操作,这就是粘滞位的概念与使用
使用命令:“chmod -t 目录” 将一个目录设置成粘滞位
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除