Linux权限的理解 | 粘滞位 |权限掩码 |文件类型


文件的访问者

文件的访问者,可以分为三类

  • 拥有者(owner):拥有该文件的访问者
  • 所属组(group):该文件所属的组
  • 其他人(other):除了拥有者、所属组外的其他访问者

当我们查看更多文件更多属性的时候
在这里插入图片描述
会显示拥有者和所属组,而除了这两个以外的就被称为其他人。

为什么会分出拥有者、所属组和其他人呢?

假设你自己独立设计出了一款软件,将用户类别划分为拥有者、所属组和其他人,更方便对访问软件的人做出约束:
只有你自己能操作
允许你和你所在的组操作
允许你和你所在的组以及其他人也能操作。
……

上面所属组的位置只有一个用户,这样也算组吗?当然是可以的呀,一个人作一个组这是被允许的。

文件的类型和权限表达

在这里插入图片描述
先来看一下文件的类型

标识档案的类型
普通文件
d文件夹(目录)
l软链接
b块设备文件
p管道文件
c字符设备文件
s套接口文件
//例如

//test.c是一个普通文件,拥有者为root用户,所属组为root用户
-rw-r--r-- 1 root root   79 Jan 22 15:00 test.c

//test_commands是一个文件夹,拥有者为YDY,所属组为YDY用户
drwxrwxr-x 4 YDY YDY 4096 Apr  9 20:12 test_commands

如果我们只知道Linux系统上的某文件的文件名,如何查看它是什么类型的文件呢?

使用命令:file
功能:查看文件的类型
格式:file 选项 文件名

//例如
[root@VM-0-2-centos test_user]# ls
user_dirt1
[root@VM-0-2-centos test_user]# file user_dirt1
user_dirt1: sticky directory
[root@VM-0-2-centos test_user]# 

用户的一般权限有可读权限、可写权限、可执行权限,三三为一组。

标识代表的权限(对文件)代表的权限(对目录)
r拥有读取文件内容的权限具有浏览该目录信息的权限
w拥有修改文件内容的权限拥有删除移动目录内文件的权限
x拥有执行文件的权限具有进入目录的权限
没有某一权限没有某一权限

例如:

权限符号说明
r— —只读
— w —仅可写
— — x仅可执行
…………
例如
//test.c的拥有者对该文件有r、w权限,没有x权限
//test.c所属组对该文件有r权限、没有w、x权限
//其他人对该文件有r权限、没有w权限、没有x权限
-rw-r--r-- 1 root root   79 Jan 22 15:00 test.c

权限只有《有、无》两种结果,所以可使用2进制,1代表有某一权限,0代表没有,Linux对于权限的表达方法可以用十进制的数字

权限符号说明二进制十进制
r— —只读1004
— w —仅可写0102
— — x仅可执行0011
……………………

在这里插入图片描述

要注意三个三个为一组。现在可能对这种表达的方式不能理解,修改权限的时候就可以理解了。

文件权限的修改

可以对文件的权限进行修改。

命令:chmod
功能:实际上是change mode 的缩写,功能是可以修改权限
格式:chmod 选项 更改权限 文件名。
说明:选项可写可不写,若有需要,可自行查阅man-pages

使用chmod有两种方式。

【方式一】

chmod 用户表示符+/-权限标识符 文件名

用户表示符有:

  • u:代表拥有者
  • g:代表所属组
  • o: 其他用户
  • a:所有用户

加权限使用+,减权限使用-

//例如
[YDY@VM-0-2-centos ~]$ ls -l -d ls_test
-rw-rw-r-- 1 YDY YDY 0 Apr  7 16:35 ls_test
[YDY@VM-0-2-centos ~]$ chmod u+x ls_test //给拥有者增加x权限
[YDY@VM-0-2-centos ~]$ ls -l -d ls_test
-rwxrw-r-- 1 YDY YDY 0 Apr  7 16:35 ls_test
[YDY@VM-0-2-centos ~]$ chmod g-w ls_test //给所属组减去w权限
[YDY@VM-0-2-centos ~]$ ls -l -d ls_test
-rwxr--r-- 1 YDY YDY 0 Apr  7 16:35 ls_test
[YDY@VM-0-2-centos ~]$ chmod o+wx ls_test //给其他人加上w和x权限
[YDY@VM-0-2-centos ~]$ ls -l -a ls_test
-rwxr--rwx 1 YDY YDY 0 Apr  7 16:35 ls_test
[YDY@VM-0-2-centos ~]$ 

【方式二】

chmod 数字权限表示符 文件名

不需要使用用户表示符,直接使用数字权限表示符来修改
例如:
在这里插入图片描述

文件拥有者、所属组的修改

文件拥有者修改

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

//例如
[root@VM-0-2-centos ~]# ll
total 16
-rw-r--r-- 1 root root   79 Jan 22 15:00 test.c //文件的拥有者为root用户
[root@VM-0-2-centos ~]# chown YDY test.c //将文件的拥有者改为YDY的普通用户
[root@VM-0-2-centos ~]# ll
total 16
-rw-r--r-- 1 YDY  root   79 Jan 22 15:00 test.c //文件拥有者变为YDY的普通用户

实际上,只有root用户可以这样直接更改拥有者,因为root用户的权限最高。
这就好比,我把东西给你,你选择可以要,也可以选择不要,而root用户就相当于是老大,你不要也得要。

所以使用普通用户的来直接更改文件的拥有者是不行的

//例如
-rwxrwxrwx 1 YDY YDY 0 Apr 10 15:26 test_chmod //本来拥有者为YDY用户
[YDY@VM-0-2-centos test_commands2]$ chown root test_chmod
chown: changing ownership of ‘test_chmod’: Operation not permitted //提示,操作不被允许

那么普通用户如何更改文件的拥有者?
答案是:暂时赋予最高权限,相当于暂时给了你这个普通用户,root的能力。可使用sudo命令,前提是这个普通用户已经被root用户信任。

还可以使用chown同时修改拥有者和所属组
格式为:chown 拥有者用户:所属组用户 文件名

[root@VM-0-2-centos ~]# ll
total 16
-rw-r--r-- 1 root root   79 Jan 22 15:00 test.c
[root@VM-0-2-centos ~]# chown YDY:YDY test.c //同时修改拥有者和所属组
[root@VM-0-2-centos ~]# ll
total 16
-rw-r--r-- 1 YDY  YDY    79 Jan 22 15:00 test.c//修改成功

文件所属组修改

命令:chgrp
格式:chgrp 用户名 文件名
功能:修改文件的所属组

//例如
[root@VM-0-2-centos YDY]# ll
total 16
-rw-r--r-- 1 root root    0 Apr 10 16:01 test_chgrp //本来所属组为root用户
[root@VM-0-2-centos YDY]# chgrp YDY test_chgrp //将文件的所属组修改为YDY普通用户
[root@VM-0-2-centos YDY]# ll
total 16
-rw-r--r-- 1 root YDY    0 Apr 10 16:01 test_chgrp //修改成功

和修改文件的拥有者差不多,直接修改所属组也只有root用户可以,否则要暂时使得普通用户获得最高权限。

关于权限掩码

不知道你有没有发现,当你创建文件的时候,所有文件的权限都是一样的。

//我的linux系统上
[YDY@VM-0-2-centos test_commands2]$ touch test_file1 test_file2 test_file3
[YDY@VM-0-2-centos test_commands2]$ ll
total 0
-rw-rw-r-- 1 YDY YDY 0 Apr 10 16:15 test_file1
-rw-rw-r-- 1 YDY YDY 0 Apr 10 16:15 test_file2
-rw-rw-r-- 1 YDY YDY 0 Apr 10 16:15 test_file3 

为什么权限我的linux系统上的文件的权限默认都是rw-rw-r--?
而当我新建目录文件的时候,默认权限都是rwxrwxr-x.

[YDY@VM-0-2-centos test_commands2]$ mkdir test_dirt1 test_dirt2 test_dirt3
[YDY@VM-0-2-centos test_commands2]$ ll
total 12
drwxrwxr-x 2 YDY YDY 4096 Apr 10 16:21 test_dirt1
drwxrwxr-x 2 YDY YDY 4096 Apr 10 16:21 test_dirt2
drwxrwxr-x 2 YDY YDY 4096 Apr 10 16:21 test_dirt3
-rw-rw-r-- 1 YDY YDY    0 Apr 10 16:15 test_file1
-rw-rw-r-- 1 YDY YDY    0 Apr 10 16:15 test_file2
-rw-rw-r-- 1 YDY YDY    0 Apr 10 16:15 test_file3

事实上:
在这里插入图片描述
也就是:

  • 普通文件的默认起始权限是:rw-rw-rw-
  • 目录文件的默认起始权限:rwxrwxrwx

但是我的Linux系统上,却不一样?
这要涉及到权限掩码,可以使用umask命令查看你的系统的权限掩码
在这里插入图片描述
记住一个公式:
在这里插入图片描述
这个公式的意思是,把mask按位取反,然后和相应的默认起始权限按位与,最后得到相应的默认权限。
以我的linux系统为例。

我的linux的权限掩码为0002,取后三个,也就是002,002对应二进制000 000 010.取反后和666默认起始权限,也就是110 110 110按位与,最后得到664,也就是rw-rw-r.
在这里插入图片描述

关于目录的权限

目录的权限限制了什么呢?

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

那么按照逻辑来说,只要我这个用户拥有了可写的权限,是不是就可以不受限制地在该目录下新建和删除文件了呢?

[test_user@VM-0-2-centos ~]$ ll
total 4
drwxrwxrwx 2 test_user test_user 4096 Apr 10 19:43 user_dirt1 //目录
[test_user@VM-0-2-centos test_user]# cd user_dirt1 //切换到该目录
[test_user@VM-0-2-centos user_dirt1]$ ll
total 0
-rw-rw-r-- 1 YDY YDY 0 Apr 10 19:28 user_file1 //目录下的文件拥有者和所属组为YDY
[test_user@VM-0-2-centos user_dirt1]$ rm -rf user_file1 //尝试删除
[test_user@VM-0-2-centos user_dirt1]$ ll 
total 0 //居然删除成功了!

为什么我YDY是拥有者和所属组,却可以被你test_user用户给删了呢?这样真的不太地道。
在这里插入图片描述
为了解决这个不地道的事情, Linux引入了粘滞位的概念
【粘滞位】

使用粘滞位可以满足other在特定的目录下创建文件并且写入,但是只有文件的拥有者才能删除该目录下的文件。

如何设置为目录设置粘滞位?
答:为目录的other添加t权限 ,就设置了粘滞位,可使用命令chmod o+t 目录名
在这里插入图片描述
此时该目录下的文件就不允许其他人随便删除了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小酥诶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值