Linux权限

目录

一、权限的概念

二、权限管理

2.1 文件访问者的分类(人)

2.2 文件类型和访问权限(事物属性)​编辑

2.2.1 文件类型

extra file 指令

2.2.2 访问权限

extra chmod 指令

2.3 文件权限值的表示方法

2.4 修改文件的所有者和所属组        

2.4.1 修改文件的所有者

2.4.2 修改文件的所属组                

2.5 默认权限与权限掩码        

2.6 目录的权限

2.6.1 目录的权限的作用

2.6.2 粘滞位        



一、权限的概念

Linux下有两种用户:超级用户(root)、普通用户。

超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

命令:su [用户名]
功能:切换用户
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码
Linux权限_第1张图片说明:有人可能会觉得,既然我们已经知道了root账号的密码,为什么还要使用普通用户呢?由于root账号的权限很高,一些误操作可能造成很大的影响,为了减少失误造成的影响,我们一般使用普通用户,但是普通用户的权限有时候受阻不能进行一些操作,这时候就需要我们暂时性的切换到root账号进行操作了。        

如果我们只想使用root账号执行一条指令,可以使用sudo进行提权        

Linux权限_第2张图片        


二、权限管理

权限是依赖于文件的!   

一件事情能否允许被你做,取决于——人(角色)、事物属性    

2.1 文件访问者的分类(人)

文件和文件目录的所有者:u -- User


文件和文件目录的所有者所属组的用户:g -- Group

说明:一个组内可以只有一个人,并以组长的名字对组命名。我们的工作通常以小组的方式进行,所属组可以隔离不同小组的用户。


其它用户:o -- Others 

2.2 文件类型和访问权限(事物属性)
Linux权限_第3张图片

说明:

        为什么只列出了文件的 所有者和所属组呢,因为其它用户是无法穷举的^O^ 

        Windows依靠后缀.区分文件类型,但是Linux中文件类型与后缀无关。为什么我们创建文件名还要带上后缀呢,Linux上可能有些软件是依靠后缀区分文件类型的,而且带上后缀可以帮助程序员分辨文件类型呀^O^

2.2.1 文件类型

        Linux文件类型的分类——使用文件属性第一位的一个字符来区分文件类型

-    普通文件、源代码、可执行程序、库
d    目录文件(directory
c    字符设备文件(char)键盘、显示器
b    块设备文件(block
l    链接文件(link
p    管道文件(pipeline

字符设备文件     "c"   

Linux权限_第4张图片实际上,我们每打开一个终端,就相当于创建一个字符设备文件        

块设备文件        "b"

我们的云服务器上磁盘这样的设备,就属于块设备文件        

链接文件        "l"

Linux权限_第5张图片Linux上的链接文件,类似于Windows上的快捷方式        

管道文件        "p"

Linux权限_第6张图片不要把管道文件与 "|" 符号混为一谈        

extra file 指令

file指令 用于辨识文件类型

file test.txt
file dir
file /dev/tty
file /dev/vda
file /usr/lib64/libz.so.1

演示效果:        

Linux权限_第7张图片        

2.2.2 访问权限

使用ll指令(小写的LL,即ls -l)查看文件的属性

Linux权限_第8张图片

基本权限
1. 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
2. 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
3. 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
4. “-”表示不具有该项权限

extra chmod 指令

chmod指令 用于修改文件的权限

chmod u+r test.txt        # 给test.txt文件的拥有者加上可读权限
chmod u-w test.txt        # 给test.txt文件的拥有者减去可写权限
chmod u+x,g-r test.txt    # 给test.txt文件的拥有者加上可执行权限、所属组减去可读权限
chmod o+rwx test.txt      # 给test.txt文件的其它用户加上所有权限
chmod a-r test.txt        # 给test.txt文件的所有访问者减去可读权限

我们可以使用 cat test.txt 指令来检测当前访问者是否拥有该文件的读权限
我们可以使用 echo "hello" >> test.txt 指令来检测当前访问者是否拥有该文件的写权限

演示效果:

Linux权限_第9张图片注意:root可以修改任何文件的权限;一般用户且非该文件的所有者、所属组,不能修改该文件的权限;没有对应的权限无法进行相应的操作,输入的指令会被操作系统拦截        

2.3 文件权限值的表示方法

Linux权限_第10张图片
如此一来,我们就可以用字符 '0' 或 '1' 来表示该位置上是否有对应的权限,例如:

'---' : '000'    对应的八进制数据 0
'--x' : '001'    对应的八进制数据 1
'-w-' : '010'    对应的八进制数据 2
'-wx' : '011'    对应的八进制数据 3
'r--' : '100'    对应的八进制数据 4
'r-x' : '101'    对应的八进制数据 5
'rw-' : '110'    对应的八进制数据 6
'rwx' : '111'    对应的八进制数据 7

演示效果:

Linux权限_第11张图片

        

2.4 修改文件的所有者和所属组        

2.4.1 修改文件的所有者

        在日常生活中,我们把东西交给别人,是否需要得到别人的同意呢?同样的道理,我们把文件的所有者修改为别人的时候,理所应当也应该得到他的同意,但是怎样得到他的同意呢?处理起来貌似相当的麻烦,比起考虑怎样得到别人的同意,不如直接硬塞给他,由别人自己来处理文件。

Linux权限_第12张图片如果出现图中无法使用sudo指令的情况,可以进入root账号,打开配置文件/etc/sudoers, 找到 root ALL = (ALL) ALL,在下面添加一行 username ALL = (ALL) ALL       

2.4.2 修改文件的所属组                

Linux权限_第13张图片

2.5 默认权限与权限掩码        

Linux权限_第14张图片        我们新建几个文件/目录,发现这些文件/目录它们创建后的权限都是一样的,实际上我们创建的文件/目录的 默认权限 = 起始权限 去掉 对应位置上权限掩码起始权限都有的权限,使用 umask 指令查看当前的权限掩码(Linux下默认的权限掩码为0002,其中后三位八进制数字002就是我们权限掩码表示的权限),我们可以使用 umask + [四位数字] 修改当前的权限掩码,验证一下上述说法。如果把权限掩码修改为 0000,再次新建一个文件/目录,查看文件属性就能看到一个新建文件/目录的起始权限了(文件的起始权限为666,目录的起始权限为777)。     

我们再结合图文分析一下上图中文件/目录的默认权限是怎样得到的

文件的起始权限为666  (110-110-110)  [rw-rw-rw-]
权限掩码0002->002   (000-000-010)  [-------w-]
文件的默认权限为664  (110-110-100)  [rw-rw-r--]

目录的起始权限为777  (111-111-111)  [rwxrwxrwx]
权限掩码0002->002   (000-000-010)  [-------w-]
目录的默认权限为775  (111-111-101)  [rwxrwxr-x]

注意:不要误认为 默认权限 = 起始权限 - 权限掩码          

Linux权限_第15张图片实际上是权限掩码各位取反,然后按位与(&)上起始权限       

最终权限 = 起始权限 & (umask)

起始权限为666  (110-110-110)  [rw-rw-rw-]
权限掩码为003  (000-000-011)  [-------wx]
各位取反后775  (111-111-100)  [rwxrwxr--]                
默认权限为664  (110-110-100)  [rw-rw-r--]

起始权限为777  (111-111-111)  [rwxrwxrwx]
权限掩码为002  (000-000-010)  [-------w-]
各位取反后775  (111-111-101)  [rwxrwxr-x]                
默认权限为775  (111-111-101)  [rwxrwxr-x]

因为目录的起始权限为777(全1),所有目录文件的默认权限刚好就是"起始权限 - 权限掩码"

权限掩码的存在是为了满足用户多样化的需求,不同用户可能对一个新建的文件的权限有不同的需求,用户根据需要设置权限掩码可以简化操作(无需再重复通过指令来修改文件的权限)

2.6 目录的权限

2.6.1 目录的权限的作用

Linux权限_第16张图片

可执行权限:

        如果访问者没有该目录可执行权限,则无法cd到该目录中
可读权限:

        如果访问者没有该目录可读权限,则无法用ls等命令查看该目录中的文件内容以及文件属性(也就是说,一个文件的属性是否能被访问者查看,是由这个文件所在的目录的权限决定的)
可写权限:

        如果访问者没有该目录可写权限,则无法在该目录中创建/删除文件也就是说,一个文件是否能被访问者删除,是由这个文件所在的目录的权限决定的,与该文件本身无关)

        于是,问题来了。如果访问者拥有目录的写权限,他就可以删除目录中的文件(无论他是否拥有这个文件的写权限)。这样好像有些违背常理,张三创建的一个文件,凭什么可以被你李四直接删掉? 但是我们要考虑到为什么一个目录的起始权限是"777",如果我们不能进入这个目录,不能查看这个目录中的文件的属性,不能在这个目录中创建文件、删除文件,那我们还创建这个目录干什么呢?Linux系统下的默认权限掩码是"0002"就是为了去掉others的写权限防止上述问题的发生。除此之外,一般情况下,不同的账号是在各自的home目录下独立工作的,而且新建用户的home目录对other是没有写权限的,不会发生上述问题。

Linux权限_第17张图片

        但是,有时候可能需要多个账号在同一目录下(当然这个目录不能是在任何一个用户的home目录下,root就提供了相应的目录)协同工作,共享一些数据,仍然无法避免上述问题。为了解决这个不科学的问题,Linux又引入了粘滞位的概念

2.6.2 粘滞位        

"chmod +t"(注意空格的分布)​​​​​​​可以为一个目录添加粘滞位(修改的是other的权限),​​​​​​​
Linux权限_第18张图片    


你可能感兴趣的:(linux,学习)