如何理解和修改LInux的权限

🪐🪐🪐欢迎来到程序员餐厅💫💫💫
          主厨:邪王真眼
主厨的主页:Chef‘s blog  
所属专栏:青果大战linux
总有光环在陨落,总有新星在闪烁

 用户

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

用户创建

  • root
云服务器默认就会生成的,不需要我们自己实现
  • 普通用户
  1. 使用指令 adduser +用户名
  2. 接着使用passwd+用户名设置密码即可
  3. 删除普通用户使用userdel+用户名即可
这些都只有root才可以

su指令切换用户

指令格式:su [ 用户名 ]
功能 :切换用户。
  • 从普通用户到root
输入su,再输入root密码
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ su
Password: 

效果:你的当前路径不会改变,但身份会变成root

输入su-,再输入root密码
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ su -
Password: 

你的身份会变成root并且当前目录会变为root目录

  • 从普通用户a到另一个普通用户b
输入:su  b的用户名,再 输入b的密码
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ su bite2323395539
Password: 
  • 从root到普通用户a
输入:su a的用户名,无需输入密码(因为你是管理员)

 文件及目录的权限

访问者分类

  1. 文件和文件目录的所有者:u---User
  2. 文件和文件目录的所有者所在的组的用户:g---Group
  3. 其它用户:o---Others 
这个身份可以直接通过ll指令看
下面的代码中 第一个出现的qingguo的就是所有者是qingguo,第二个出现qingguo的表示所属组是qingguo
为什么没有显示其他用户?因为其他用户数量不确定,无法一一列举,因此我们认为 既不是所有者,也不是所属组的就是其他用户
值得一提的是所有者、所属组在这行信息中顺序是固定的,即:自左向右,第三项是所有者,第四项是所属组
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll ./
total 12
drwxrwxr-x 7 qingguo qingguo 4096 May 18 14:38 project1
drwxrwxr-x 2 qingguo qingguo 4096 May 14 23:22 project2
drwxrwxr-x 2 qingguo qingguo 4096 May 18 14:35 project3

文件类型

事实上,相同的权限在不同文件中的具体行为是不同的,那你可以理解为同样都是vip,酷狗可以让你听更多歌,而腾讯可以让你看电视剧、电影,因此我们要先学习如何区分文件类型。
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project1]$ ll
total 24
drwxrwxr-x 3 qingguo qingguo 4096 May 18 12:25 test1
-rw-rw-r-- 1 qingguo qingguo  234 May 18 14:38 test1.tgz

我们还是使用ll指令,可以发现他们的第一列字母是有区别的,有的是’-‘,有的是’d',具体类别如下

d:文件夹

-:普通文件

l:软链接(类似Windows的快捷方式) 、

b:块设备文件(例如硬盘、光驱等)

p:管道文件

c:字符设备文件(例如屏幕等串口设备)

s:套接口文件

基本权限

[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project1]$ ll
total 24
drwxrwxr-x 3 qingguo qingguo 4096 May 18 12:25 test1
-rw-rw-r-- 1 qingguo qingguo  234 May 18 14:38 test1.tgz

我们继续观察第一项第二个到第十个字母,一共九个,三三一组,

第一个文件就是“rwx”、“rwx”、“r-x”

所代表的权限如下:

r:读取权限

w:写入权限

x:可执行权限
-:没有对应位置的权限

可以得出结论:对于该文件,所有者拥有读写和可执行权限、所属组拥有读写和可执行权限、其他用户有度和可执行权限,但没有写入权限,

特殊情况:
1.对于root,无论如何他都拥有所有权限(毕竟是至高无上的Master)

2.一个用户的权限只从左向右匹配一次,当一个用户被匹配为了拥有者,那么他就只享有拥有者的权利,而不享有所属组的权利。假如a既是拥有者又是所属组,再给她匹配它的权限时,只会去看他身为所有者的权限,不会看他在所属组的权限。如下所示

[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ ll
total 16
--wxrwx--x 1 qingguo qingguo 8440 May 14 23:22 a.out
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ cat a.out
cat: a.out: Permission denied

文件和目录权限的区别

事实上,对于文件和目录,rwx的意义是不同的

r:(Read)对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
w:(Write)对文件而言,具有修改文件内容的权限;对目录来说具有创建、删除、移动、修改目录内文件的权限
x:(execute)对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
-”表示不具有该项权限

注意:

删除一个文件,与用户也没有这个文件的权限无关,只和这个用户有没有该目录的w权限有关


权限的修改

文件权限值的表示方法

  • 字符表示方法
r:读取权限

w:写入权限

x:可执行权限
-:没有对应位置的权限
  • 八进制数的表示方式

一个文件有三个属性位置,每个位置看作二进制位,三个二进制位可以看作八进制,于是

对于下面的文件权限值就是775

drwxrwxr-x 7 qingguo qingguo 4096 May 18 14:38 project1

chmod

功能: 设置文件的访问权限
格式: chmod [ 参数 ] 权限 文件名
说明 :只有文件的拥有者和 root 才可以改变文件的权限
我们通过‘+’、‘-’、‘=’三个符号表示要进行的操作,用用户符号指定操作对象
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号: 
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

实例:

这是当前Project2的信息

[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
drwxrwxrwx 2 qingguo qingguo 4096 May 14 23:22 project2
  • 1.删除拥有者执行的rwx权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod u-rwx project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
d---rwxrwx 2 qingguo qingguo 4096 May 14 23:22 project2
  • 删除所有人的rwx权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod a-rwx project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
d--------- 2 qingguo qingguo 4096 May 14 23:22 project2
  • 赋予所属组读写权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod g+rw project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
d---rw---- 2 qingguo qingguo 4096 May 14 23:22 project2

除此之外chmod还支持八进制修改

  • 例如:赋予所有用户rwx权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod 777 project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
drwxrwxrwx 2 qingguo qingguo 4096 May 14 23:22 project2

常用选项:

R   递归修改目录文件的权限
可以发现,我们把project2这个目录以及它里面的子目录和文件的权限值都改变了


chown

只有root权限可以使用该指令

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

chgrp

只有root权限可以使用该指令
功能 :修改文件或目录的所属组
格式 chgrp   用户组名 文件名
常用选项 -R 递归修改文件或目录的所属组
实例chgrp users /abc/f2

umask

功能: 查看或修改文件掩码

说先提出一个问题:文件和目录的默认权限值是什么?
我们通过ll来验证
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z a1]$ touch a.txt
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z a1]$ mkdir a
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z a1]$ ll
total 4
drwxrwxr-x 2 qingguo qingguo 4096 May 19 00:13 a
-rw-rw-r-- 1 qingguo qingguo    0 May 19 00:13 a.txt

可以看到目录是775,文件是664,你的linux的默认权限或许和我不一样,这就涉及到权限掩码了。

首先,文件与目录是有起始权限的:

普通文件的起始权限是0666,也就是rw-rw-rw-
目录文件的起始权限是0777,也就是rwxrwxrwx

我们不用管第一位的0
我们使用umask就可以查看当前的权限掩码
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z a1]$ umask
0002

假设默认权限是mask,则实际创建的出来的文件权限是:

mask & ~umask

也就是先对掩码二进制按位取反,在按位与mask

我们这里掩码是002,换成二进制就是000 000 010,按位取反就是111 111 101

文件默认权限是666,换成二进制:110 110 110,二者按位与就是110 110 100,即664

同理,对目录默认权限是111 111 111,按位与就是111 111 101,即775

修改掩码umask 权限值

[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ umask 0001
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ umask
0001

粘滞位

背景故事
  • 提出问题:

在实际操作中,我们会有这样的需求:几个人一起搞一个大项目,那这时文件的读写可执行三项权限就都要放开,那我们如何实现这一要求

  • 解决方案:

普通用户都会默认在home文件目录下创建自己的一些列文件,他们之间是无法相互访问的,要改变权限就要更改home目录的属性(但这样一来,所有普通用户都可以互相访问,可能有坏人搞事情),或者在根目录下 新建一个目录供大家使用,而该目录是开放了所有权限的

  • 但是, 问题来了~~
还记得我们之前说的吗,
换句话来讲 , 就是只要用户具有 目录的写权限 , 用户就可以删除目录中的文件, 而不论这个用户是否有 这个文件的写权限 .
这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉? 
为了解决这个不科学的问题 , Linux 引入了粘滞位的概念
权限t
作用:其用于替代权限x,
规则如下:
当一个目录被设置为 " 粘滞位 " 则该目录下的文件只能由
  1. 超级管理员删除 (至高神好吧~)
  2. 该文件的所有者删除
这样一来,该文件就无法被其他用户删除,但是其他用户依旧可以在该目录下创建文件

再谈目录权限:

  • 读权限

[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
d-wxrwxrwx 3 qingguo qingguo 4096 May 19 12:02 project2

可以发现,现在没有了读权限,也就是说我们无法查看目录下的内容

指令验证:

发现确实ll指令和tree指令都无法访问project2

d-wxrwxrwx 3 qingguo qingguo 4096 May 19 12:02 project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll project2
ls: cannot open directory project2: Permission denied
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ tree ./
./
├── project1 [error opening dir]
├── project2 [error opening dir]
  • 写指令

我们删除了project2的写权限,赋予它读取和执行权限

发现在project2里面、更改文件名、删除文件、添加文件、转移文件全部被驳回

[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod 577 project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ cd project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ touch a.txt
touch: cannot touch ‘a.txt’: Permission denied
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ mkdir a
mkdir: cannot create directory ‘a’: File exists
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ rm a.out
rm: cannot remove ‘a.out’: Permission denied
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ mv a.out a.x
mv: cannot move ‘a.out’ to ‘a.x’: Permission denied
  • 可执行权限

我们可以发现,在失去了可执行权限后,我们无法通过cd指令进如文件

除此之外,使用ll或tree查询文件内容也失败了,而且既然进不去文件,那肯定无法在里面执行增加、删除文件的操作了。因为他们二者的执行都要建立在可以进入文件的基础上!!!


今天学习了linux的权限知识以及相关指令,下去一定要好好练习哦。


🥰创作不易,你的支持对我最大的鼓励🥰
🪐~ 点赞收藏+关注 ~

e3ff0dedf2ee4b4c89ba24e961db3cf4.gif

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值