[Linux]深刻理解Linux权限
- 从0到1,深刻理解Linux权限
- Linux权限的概念
- Linux权限管理
- Linux文件访问者
- 文件类型和访问权限
- 文件类型
- 访问权限
- 文件访问权限设置
- 修改文件权限
- 修改文件拥有者
- 修改所属组
- umask掩码
- 目录权限
- 目录权限问题
- 粘滞位
- 权限总结:
从0到1,深刻理解Linux权限
Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户
超级用户:可以再linux系统下做任何事情,不受限制。
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是"$";
命令:su 或 su -
用来切换超级用户或者普通用户,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令
Linux权限管理
Linux文件访问者
通常来讲,我们将Linux文件的访问者分为三类:
- 文件和文件目录的拥有者:u – user
- 文件和文件目录的拥有者所在组的用户:g – group
- 其他用户:o – others
如果普通用户想要使用root的权限才能做的一些事情,就需要sudo命令,在此之前则需要将普通用户添加到信任白名单里,路径为/etc/sudoers
。
文件类型和访问权限
文件类型
常见文件类型有以下几种:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
见一见常见的文件类型:
访问权限
文件权限有三种,
- 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- "-"表示不具有该项权限
表示法通常有两种:
一种是字符直接表示:
另一种是八进制数值来表示:
文件访问权限设置
修改文件权限
chmod
:
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
-R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
既然权限的表示法有两种,修改权限的方法也就有两种:
- 通过字符表示法直接修改:
同时也可以看到,普通文件即使给了可执行权限,你去执行也是没有什么用处的。
- 通过八进制数值修改
总结:
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
修改文件拥有者
chown
:
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
可以看到,文件修改拥有者必须要root权限才行。
修改所属组
chgrp
:
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
umask掩码
现在文件的权限我们已经明白了,那么现在的问题是,我们创建一个文件,默认的权限是多少,为什么?
创建一个目录和一个普通文件,可以看到,目录文件的默认权限是775,而普通文件是664,为什么呢?
这就是因为umask掩码的存在,
umask默认值是0002,第一个0并不需要注意,只代表是八进制。需要注意的是后面的002,
这就是原因默认权限的由来,通常情况下,我们也不需要改,但是umask是可以改的,而且很简单:
可以看到,将umask值改完后,创建的文件默认权限确实是改变了。
目录权限
目录权限问题
上面已经理解了普通文件的权限,我们还需要将目录的权限单独拎出来理解清楚,两者还是有些区别的:
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
可读权限:如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
于是问题来了,如果一个人仅仅是有了目录的写权限,就能将文件随便删除,显然是不合理的,我们也可以验证一下:
可以看到,用户lzb创建的文件竟然被dsb删掉了,我只是想要给你写的权限,但是你不能随便删我的文件吧。为了解决这个不科学的问题,就又引入了粘滞位。
粘滞位
chmod+t
,就可以给目录加上粘滞位,此时其他人即使有写权限,但是删不掉我的文件。这时候才是科学的现象。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由:
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
权限总结:
对普通文件的就不必多说了,读写可执行,都很好理解,要重点注意的是对目录权限的问题:
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。