深入篇【Linux】学习必备:理解文件权限
- Ⅰ.Linux权限的概念
- Ⅱ.Linux权限管理
- ①.文件访问者的分类(访问者的身份)
- ②.文件类型和访问权限(文件本身的事物属性)
- 1.文件类型:
- 2.基本权限:
- ③.文件权限值的表示方法
- 1.字符表示方法
- 2.八进制数值表示法
- ④.文件访问权限设置方法
- 1.chmod
- 2.chown
- 3.chgrp
- Ⅲ.Linux权限两大问题:
- ①.起始权限问题
- 1.umask
- ②.目录权限问题
- 1.粘滞位
Ⅰ.Linux权限的概念
Linux下有两种用户:超级用户(root),普通用户。
普通用户:在Linux下做有限的事情。
超级用户:在Linux下可以做任何事情,不受限制。
区别:超级用户的命令提示符是#,普通用户的命令提示符是$
那在Linux下如何进行用户的切换呢?
这时就需要命令su。
命令:su [用户名]
功能:切换用户。
例如:当root用户想切换到普通用户user时,输入命令su -user,即可从root用户切换到user用户,当普通用户user想切换回root用户时,只需输入su命令即可(root可以省略)。但要输入root用户的密码。
1.root身份下
su -用户名,直接切换成用户。
或者还有一种方法,exit/Ctrl D直接退回普通用户。
2.普通用户下
su -用户名,需要输入相关密码。
如果我们想短暂的对一条指令进行提权的话,可以用sudo command 指令。
但一开始我们用adduser新建的用户,并没有颁发执行sudo,系统是不信任你的,除非未来将普通用户,添加到系统的信任白名单中,提权才有效。
Ⅱ.Linux权限管理
什么是权限呢?
1.权限认证的是身份(权限是和‘人’有关)
2.权限也和事物的属性有关。如文件属性:可读/读写/可执行。
①.文件访问者的分类(访问者的身份)
在文件下,角色权限身份一共有三种:拥有者(uesr) ,所属组(group) ,其他人(other)。
文件和文件目录的所有者:u-User。
文件和文件目录的所有者所在组的用户:g-Group。
其他用户:o-Other。
而具体的用户有两种,root用户和普通用户,root用户和普通用户的身份都可以是这三种的其中一种。
②.文件类型和访问权限(文件本身的事物属性)
一个文件本身有什么属性呢?它又是如何表示出来的呢?
我们将所有文件信息展开,那上面的这些信息分别代表着什么意思呢?
注意:Linux下文件名后缀没有什么直接意义。
第一位表示的是文件类型,文件都有哪些类型呢?
1.文件类型:
d :表示文件夹,即目录文件。
-: 表示普通文件,如文本文件,可执行程序等。
1:表示软连接,类似于windows的快捷方式。
p:表示管道文件
c:字符设备文件
b:块设备文件(如硬盘,光驱)。
s: 套接口文件。
文件类型有了,那文件都有哪些权限呢?
2.基本权限:
a.读权限( r):read权限对于文件来说,具有读取文件内容的权限;对于目录来说,具有浏览该目录信息的权限。
b.写权限(w):write权限对于文件来说,具有修改文件内容的权限;对于目录来说,具有在该目录下创建和删除文件的权限。
c.执行权限(x):execute对于文件来说,具有执行文件的权限;对于目录来说,具有进入目录的权限。
③.文件权限值的表示方法
1.字符表示方法
在Linux下,r/-表示可读/不可读,w/-表示可写/不可写,x/-表示可执行/不可执行。
每个位置只有是或否,每个文件都具有三种基本权限,而不同的用户也就有不同的文件权限。
2.八进制数值表示法
而这种权限的表示方法还可以用八进制数值表示。
可读®权限代表数值是4.
可写(w)权限代表数值是2
可执行(x)权限代表数值是1.
④.文件访问权限设置方法
1.chmod
功能:设置文件访问权限
格式:chmod [用户表示符] 权限 文件名
常用选项:
- -R递归修改目录文件的权限
只有文件的拥有者或root权限可以修改文件的权限。
chmod修改文件各用户权限的方式:
①用户表示符:
u:拥有者
g:所属组
o:其他人
②±=权限字符
+:表示给权限范围增加权限
-:表示向权限范围取消权限
=:表示向权限范围赋予权限
比如:
1.chomd u+rwx test.c
表示给test.c这个文件的拥有者(u)增加可读可写可执行权限。
2.chomd g-rw test.c
表示给test.c这个文件的所属组(g)取消可读可写权限。
3.chomd o+x
表示给test.c这个文件的其他人用户(o)增加可执行权限。
我们该可以用八进制位权限表示来修改文件的访问权限。
chomd 654 test.c
表示test.c这个文件的访问权限被设置成
u的权限是6即可读可写。
g的权限是可读可执行。
o的权限是只可读。
2.chown
功能:修改文件的所有者。
格式:chown [参数] 用户名 文件
比如:
1.chown user1 test.c
将test.c文件的拥有者改成user1.
2.chown -R user1 filetets
将fileetets目录下的所有文件的拥有者都改成user1.
3.chgrp
功能:修改文件的所属组。
格式:chgrp [参数] 用户名 文件
常用选项:
- -R 递归修改文件或目录的所属组。
比如:
1.chgrp user2 test.c
将test.c文件的所属组改成user2
2.
chgrp -R user2 filetest
将filetest文件里的所有子文件的所属组都改成user2.
Ⅲ.Linux权限两大问题:
①.起始权限问题
1.为什么我们创建文件的默认权限是我们所看到的?
2.为什么普通文件的权限是664?
3.为什么目录文件的权限是775?
【预备知识】:
1.Linux下系统默认给普通文件的起始权限是666.
2.Linux下系统默认给普通文件的起始权限是777.
1.umask
umask称为权限掩码
功能:查看或修改文件掩码。
凡是在umask中出现的权限,不会在最终的文件权限中出现!
新建文件夹的默认权限是0666,新建目录默认权限是0777,但实际上你创建的文件和目录显示的权限并不是这样。原因正是因为创建文件或目录时,要受到权限掩码umask的影响。
超级用户下默认掩码是0022,普通用户下默认为0002.
那结合上面真实创建的文件和目录的起始权限分别是0664 和0775,与默认掩码0002直接存在着什么样的关系呢?
可能你会认为文件或目录最终的权限就是系统默认权限减去默认掩码即可。
但事实上并不是,文件/目录最终的权限的是这样算的:文件/目录起始权限&(~权限掩码)。
先让权限掩码按位取反,然后再和文件起始权限按位或。
所以最终权限不受单纯的起始权限-权限掩码,而是起始权限&(~umask)。
修改权限掩码实例:
umask 662
umask 774
我们回到一开始的问题上去,为什么普通文件权限是664呢?是因为权限掩码的存在,那为什么权限掩码要是002呢?
普通文件不需要x权限也可以执行。
而目录必须需要x权限,这样才可以进入目录中。
②.目录权限问题
目录文件中的读和写和可执行代表的意义:
1.读权限:是否允许我们查看指定目录下的文件内容。如果目录没有读权限,则无法用ls等命令查看目录中的文件内容。
2.写权限:是否允许我们在当前目录进行创建,更改,删除。如果我目录没有写权限,则无法在目录中创建文件,也无法在目录中删除文件。
3.可执行权限:是否允许用户进入对于的目录。如果用户没有可执行权限,则无法cd进入目录中。
1.粘滞位
首先我们先看一个问题:小陶想建立一个共享文件,但一不小心建立在了家目录下,但是一个好心人告诉他共享文件是不能建立在家目录下的!!!为什么共享文件无法建立在家目录下?即我们所建立的共享文件不能创建在任何一个家目录下。这是为什么呢?
1.这是因为家目录的权限是700,只有用户本身有权限,用户在家目录下创建的文件,别人都看不到,别说看了,别人连家门口都进不去,因为所属组和其他人都没有x权限,都无法进入用户的家目录下。
共享文件不要建立在家目录下,建立在根目录下就可以了。
然后小陶就将共享文件建立在了根目录下,然后过了几天,小陶发现他的共享文件竟然被人删除了!!!
小陶就很郁闷,他很纠结,他纠结什么呢?
因为只要其他用户有在该目录下有写权限,那么该目录下的文件就可以被他删除。那小陶如果想自己的共享文件不被删除,就得将其他用户的w权限取消,但这就违背了起初的意愿了,因为取消了别人的w权限,别人也无法在这个目录下创建文件了,那这还共享啥呢。所以小陶纠结呀。
但经过深入的学习后,小陶发现Linux中为了解决这个不科学的问题吗,引入了粘滞位。
chmod +t /test/ 加上粘滞位
rm /test/abc.c 准备删除test目录下的abc.c文件
rm:是否删除有保护的普通文件? "/test/abc.c"?y
rm:无法删除"/test/abc.c":不允许的操作
当一个目录设置为粘滞位(chomd +t),则该目录下的文件只能
1.超级用户删除。
2.该目录的拥有者删除。
3.该文件的拥有者。
总结:
1.目录的可执行权限表示是否可以在目录下执行命令。
2.当目录没有可执行权限,则无法对目录执行任何命令,甚至cd进入目录都不可以。
就算有读权限也无法进入目录,读取目录里文件内容。
3.当目录中有执行权限,没有读权限,可以对目录执行命令,可以进入命目录里,但目录里的文件无法查看,因为没有读权限。
4.一个文件能不能被删除,不是取决于文件本身属性,而是取决于所处目录的权限。