飞道的博客

【Linux权限管理】

395人阅读  评论(0)

The secret of getting ahead is getting started.

 

目录

1 Linux权限的概念

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

 3 文件类型和访问权限(事物属性)

chmod

chown:

chgrp:

4 文件掩码

umask

5 目录的权限

6 粘滞位

7 权限的总结


1 Linux权限的概念

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

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

如何从普通用户转到超级用户呢?

命令:

su root (root可以省略)

 从超级用户转为普通用户命令:

su username

 另外再复习一下Linux下新建用户的指令是:

useradd username

删除用户的命令是:

userdel -r username

为新用户设新密码的命令是:

passwd username

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

在Linux中,文件访问者分成3种:

  • 文件和文件目录的所有者:u---User
  • 文件和文件目录的所有者所在的组的用户:g---Group
  • 其它用户:o---Others

 3 文件类型和访问权限(事物属性)

我们创建一个文件text.c ,那这个文件创建好的默认权限是什么呢?

 通过上面我们不难看出建立一个普通文件的默认权限是 :rw- r-- r--

而建立一个目录的默认权限是:rwx r-x r-x

这里的 r w x分别代表什么意思呢?

  • i.读(r):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • ii.写(w):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • iii.执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • iv:“—”表示不具有该项权限

具体图解:

 这里我们再普及一下文件有哪些类型:

  • d:文件夹
  • -:普通文件
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件

 有了上面的了解后,假如我们想修改文件的权限那应该怎么办呢?例如我想将text.c

这个文件的拥有者拥有可执行权限应该怎样操作呢?

这个时候就需要 chmod 这个指令了。

chmod

功能: 设置文件的访问权限
格式: chmod [ 参数 ] 权限 文件名
常用选项:
  • R -> 递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才可以改变文件的权限
chmod 命令权限值的格式:
① 用户表示符 +/-= 权限字符
+: 向权限范围增加权限代号所表示的权限
-: 向权限范围取消权限代号所表示的权限
=: 向权限范围赋予权限代号所表示的权限
用户符号:  
u :拥有者
g :拥有者同组用
o :其它用户
a :所有用户
我们可以来试试:

 这样我就修改了该文件拥有者的权限了,至于减去相应的权限就用 - ,组合用的话可以加一个' ,'例如:

 减去相应权限也同理。

②三位 8 进制数字
这个是什么意思呢?
我列一个表格给大家:
权限符号(读写执行) 八进制 二进制
r-- 4 100
-w- 2 010
--x 1 001
rw- 6 110
r-x 5 101
-wx 3 011
rwx 7 111
--- 0 000

通过八进制数字修改也可以达到我们的需求:

 这个很简单,大家都能够理解。

另一个问题:假如我想更换该文件的拥有者和所属组应该咋办?

这个时候我们就可以使用chown 和 chgrp 指令了:

chown:

功能 :修改文件的拥有者
格式 chown [ 参数 ] 用户名 文件名

chgrp:

功能 :修改文件或目录的所属组
格式 chgrp [ 参数 ] 用户组名 文件名
常用选项 -R 递归修改文件或目录的所属组

我们可以来试试:


   
  1. [root@VM -8 -12-centos lesson6] # ll
  2. total 8
  3. drwxr-xr-x 2 root root 4096 Dec 2 21: 31 mydir
  4. -rwxrwxrwx 1 root root 0 Dec 2 21: 30 mytxt.txt
  5. -rwxr--rwx 1 root root 110 Dec 2 17: 05 text.c
  6. -rw-r--r-- 1 root root 0 Dec 2 21: 31 text.cpp
  7. [root@VM -8 -12-centos lesson6] # chown grm text.c
  8. [root@VM -8 -12-centos lesson6] # ll
  9. total 8
  10. drwxr-xr-x 2 root root 4096 Dec 2 21: 31 mydir
  11. -rwxrwxrwx 1 root root 0 Dec 2 21: 30 mytxt.txt
  12. -rwxr--rwx 1 grm root 110 Dec 2 17: 05 text.c
  13. -rw-r--r-- 1 root root 0 Dec 2 21: 31 text.cpp
  14. [root@VM -8 -12-centos lesson6]#

 不难发现该文件的所属组已经被修改成功。

修改所属组也是同样的方法,只是用的命令变为:chgrp


4 文件掩码

通过上面我们知道:

超级用户建立一个普通文件(不包括可执行文件)的默认权限是 :rw- r-- r--  (644)

而建立一个目录的默认权限是:rwx r-x r-x  (755)

那么为什么是这样子的呢?

系统新建文件夹起始权限 =0666 ,新建目录起始权限 =0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask 的影响。
而umask就是文件掩码。那最终权限(也就是系统的默认权限)与起始权限和文件掩码有啥关系呢?
最终权限=mask & ~umask (mask是文件起始权限)

umask

功能
查看或修改文件掩码
格式 umask 权限值
说明 :将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022 ,普通用户默认为 0002


  
  1. 在超级用户下建立
  2. 文件:
  3. 110 110 110666
  4. 111 101 101 &
  5. ------------
  6. 110 100 100644
  7. 目录:
  8. 111 111 111777
  9. 111 101 101 &
  10. ------------
  11. 111 101 101755

假如我们想修改系统默认的文件掩码呢?

可以使用命令:

umask XXX

我们不妨跳转到普通用户下来使用一下:


  
  1. [grm@VM -8 -12-centos ~]$ umask 012
  2. [grm@VM -8 -12-centos ~]$ touch tmp.txt
  3. [grm@VM -8 -12-centos ~]$ mkdir -p dir
  4. [grm@VM -8 -12-centos ~]$ ll
  5. total 4
  6. drwxrw-r-x 2 grm grm 4096 Dec 18 13: 24 dir
  7. -rw-rw-r-- 1 grm grm 0 Dec 2 22: 30 grmfile
  8. -rw-rw-r-- 1 grm grm 0 Dec 18 13: 23 tmp.txt

 通过计算我们也能很快速的得到上面的结果。


5 目录的权限

  • 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中。
  • 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
  • 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

其中比较容易出错的就是这个可执行权限了,进入一个目录首先需要的就是可执行权限,这点大家务必要牢记。


6 粘滞位

于是 , 问题来了 ~~
换句话来讲 , 就是只要用户具有目录的写权限 , 用户就可以删除目录中的文件 , 而不论这个用户是否有这个文件的写权限 .
这好像不太科学啊 , 我张三创建的一个文件 , 凭什么被你李四可以删掉 ? 我们用下面的过程印证一下:
我们用root用户创建一个共享目录(也就是其他用户都能够在里面建立文件的目录)将其权限都打开

然后其他用户以及root就可以往里面添加自己创建的文件了

 但是问题来了,如果有一天grm把bxz惹毛了,bxz一气之下就把grm所创建的文件给干掉了,操作系统会同意这样做的吗?

 我们发现好像还真的就删除了,这合理吗?还是一个bug?

所以我们就引出了粘滞位的概念:

当一个目录被设置为 " 粘滞位 "( chmod +t ), 则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

 我们为share目录增加一个粘滞位:


  
  1. [root@VM -8 -12-centos /] # chmod +t share
  2. [root@VM -8 -12-centos /] # ll
  3. total 84
  4. lrwxrwxrwx. 1 root root 7 Mar 7 2019 bin -> usr/bin
  5. dr-xr-xr-x. 5 root root 4096 Jul 28 11: 37 boot
  6. drwxr-xr-x 4 root root 4096 Nov 4 17: 34 cpp
  7. drwxr-xr-x 2 root root 4096 Nov 5 2019 data
  8. drwxr-xr-x 19 root root 3020 Sep 20 16: 33 dev
  9. drwxr-xr-x. 95 root root 12288 Dec 2 22: 04 etc
  10. drwxr-xr-x. 4 root root 4096 Dec 2 22: 02 home
  11. lrwxrwxrwx. 1 root root 7 Mar 7 2019 lib -> usr/lib
  12. lrwxrwxrwx. 1 root root 9 Mar 7 2019 lib64 -> usr/lib64
  13. drwxr-xr-x 3 root root 4096 Oct 3 20: 34 linux
  14. drwx------. 2 root root 16384 Mar 7 2019 lost+found
  15. drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
  16. drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
  17. drwxr-xr-x. 4 root root 4096 Sep 20 15: 18 opt
  18. dr-xr-xr-x 117 root root 0 Sep 20 16: 33 proc
  19. dr-xr-x---. 8 root root 4096 Nov 23 21: 26 root
  20. drwxr-xr-x 25 root root 880 Nov 15 20: 05 run
  21. lrwxrwxrwx. 1 root root 8 Mar 7 2019 sbin -> usr/sbin
  22. drwxrwxrwt 2 root root 4096 Dec 18 13: 58 share
  23. drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
  24. dr-xr-xr-x 13 root root 0 Sep 26 20: 53 sys
  25. drwxrwxrwt. 8 root root 4096 Dec 18 12: 56 tmp
  26. drwxr-xr-x. 14 root root 4096 Jan 8 2021 usr
  27. drwxr-xr-x. 20 root root 4096 Jan 8 2021 var

 我们发现other的最后一位权限由x变成了t

接下来我们再删除来试试:


  
  1. [bxz@VM -8 -12-centos share]$ ll
  2. total 8
  3. -rw-rw-r-- 1 bxz bxz 0 Dec 18 13: 53 bxz1
  4. -rw-rw-r-- 1 bxz bxz 0 Dec 18 13: 53 bxz2
  5. -rw-rw-r-- 1 grm grm 30 Dec 18 13: 52 grm1
  6. -rw-rw-r-- 1 bxz bxz 91 Dec 18 13: 54 nxz1
  7. -rw-r--r-- 1 root root 0 Dec 18 13: 51 root1
  8. -rw-r--r-- 1 root root 0 Dec 18 13: 51 root2
  9. [bxz@VM -8 -12-centos share]$ rm -rf grm1
  10. rm: cannot remove ‘grm1’: Operation not permitted

 很明显该操作现在已经不被允许了。


7 权限的总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

转载:https://blog.csdn.net/m0_68872612/article/details/128150459
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场