一.基本权限介绍
1.基本权限类型
- r : 4 : 可读
- w : 2 : 可写
- x : 1 : 可执行
2.权限归属
- u : 属主
- g : 属组
- o : 其他人
3.设置权设置属主,属组
- 命令: chown
- 选项: -R 递归设置
同时设置属主和属组
[root@shawn song]# ll /home/song/a.txt
---------- 1 root root 12 10月 29 17:22 /home/song/a.txt
[root@shawn song]# chown song.song !$
chown song.song /home/song/a.txt
[root@shawn song]# ll !$
ll /home/song/a.txt
---------- 1 song song 12 10月 29 17:22 /home/song/a.txt
只设置属主
[root@shawn song]# chown root !$
chown root /home/song/a.txt
[root@shawn song]# ll !$
ll /home/song/a.txt
---------- 1 root song 12 10月 29 17:22 /home/song/a.txt
只设置属组
[root@shawn song]# chown .root !$
chown .root /home/song/a.txt
[root@shawn song]# ll !$
ll /home/song/a.txt
---------- 1 root root 12 10月 29 17:22 /home/song/a.txt
4.修改 u, g, o, 对应的权限
-
命令: chmod
-
选项: -a 所有, -R 递归
-
加减法
单独加减一个权限和多个一起加减都可以
[root@shawn song]# ll
总用量 4
---------- 1 root root 12 10月 29 17:22 a.txt
写在一起加一些权限(也可以单独拎一个"u+xw")
[root@shawn song]# chmod u+rw,g+rx,o+wx a.txt
[root@shawn song]# ll a.txt
-rw-r-x-wx 1 root root 12 10月 29 17:22 a.txt
写在一起减一些权限
[root@shawn song]# chmod u-w,g-wx,o-x a.txt
[root@shawn song]# ll a.txt
-r--r---w- 1 root root 12 10月 29 17:22 a.txt
- 赋值法
"a"代表所有权限一起设置
[root@shawn song]# ll
总用量 4
-r--r---w- 1 root root 12 10月 29 17:22 a.txt
[root@shawn song]# chmod a=rwx a.txt
[root@shawn song]# ll a.txt
-rwxrwxrwx 1 root root 12 10月 29 17:22 a.txt
逐个赋值
[root@shawn song]# chmod u=x,g=x a.txt
[root@shawn song]# ll a.txt
---x--xrwx 1 root root 12 10月 29 17:22 a.txt
或者多个一起赋值
[root@shawn song]# chmod uo=r,g=w a.txt
[root@shawn song]# ll a.txt
-r---w-r-- 1 root root 12 10月 29 17:22 a.txt
- 数字法
"u"=4, "g"=2, "0"=1
[root@shawn song]# ll a.txt
-r---w-r-- 1 root root 12 10月 29 17:22 a.txt
"777"开放所有权限
[root@shawn song]# chmod 777 a.txt
[root@shawn song]# ll a.txt
-rwxrwxrwx 1 root root 12 10月 29 17:22 a.txt
"000"不开放权限
[root@shawn song]# chmod 000 a.txt
[root@shawn song]# ll a.txt
---------- 1 root root 12 10月 29 17:22 a.txt
可以按需求设置
[root@shawn song]# chmod 421 a.txt
[root@shawn song]# ll a.txt
-r---w---x 1 root root 12 10月 29 17:22 a.txt
二.权限对文件与目录的意义
1.对文件的意义
- r : 读取文件的内容
- w : 修改文件内容
- x : 可以把文件当成一个命令 / 程序运行
2.对目录的意义
- r : 可以浏览该目录下的子目录名和子文件名字
- w : 创建, 删除, 移动文件
- x : 可以进入该目录, 只要我们要操作目录下的内容, 一定要对该目录有 x 权限
3.操作文件夹下的文件内容
- 查看一个文件内容至少需要具备的条件
- 沿途所有文件夹的 x 权限
- 对目标文件的 r 权限
- 修改一个文件内容至少需要具备的条件
- 沿途所有文件夹的 x 权限
- 对目标文件的 w 权限
- 执行一个自己制作的命令文件至少需要具备的条件
- 沿途所有文件夹的 x 权限
- 对目标文件的 r 以及 x 权限
对于解释型的执行文件需要"r"+"x",而二进制执行文件只需要"x"
4.操作文件夹下面的子文件与子文件夹( 不是操作文件内容)
- 在目录下创建, 删除, 移动文件至少需要具备的条件
- 沿途所有文件夹的 x 权限
- 对目标文件夹的 wx 权限
- 浏览一个目录下的子目录与子文件名至少需要具备的条件
- 沿途所有文件夹的 x 权限
- 对目标文件夹的 rx 权限
三.文件管理权限之特殊权限
1.SUID
- 作用
只能给可执行的文件加(命令)
设置有"s"权限的命令
普通用户使用时会临时变成该命令的属主
也就是获得该命令的属主权限
- 修改密码passwd
在 Linux 中,用户密码都在"/etc/shadow"中,我们可以看到它对于其他人是没有权限的
然而普通用户却可以使用"passwd"修改密码,我们来看看这个命令
⛅我们发现它在属主权限里多了个"s"权限,这就是所谓的"尚方宝剑"
⛅当普通用户使用带有这种权限的命令时
⛅普通用户会暂时获得这个命令属主的所有权限
⛅也就是成为了这个命令的主人(一般是root,root不受权限压制)
- 实验
让我们为 "cat" 命令加上 "s" 权限看看会发生什么
首先我们使用root创建一个文件,并设置内容
将 test.txt 对其他人的权限变成 0
我们切换普通用户 song 来 cat 下 test.txt, 发现无权限,
再看看 cat 命令是没有SUID权限的
来使用 root 帮 cat 添加一下 SUID 权限
我们再使用普通用户 song 来 cat 下 /test.txt , 发现尚方宝剑奏效了
2.SGID
- 当SGID作用于普通文件时
和SUID类似,在执行该文件时,用户将获得该文件所属组的权限
- 当SGID作用于目录时
当一个用户在一个具有 "s" 权限的初始目录下创建子目录以及子子目录时
这些所有的子目录与子子目录所在的属组都将是初始目录所在的属组
3.SBIT
- 作用
目前只对目录有效果
用来阻止非文件的所有者删除具有"SBIT"权限文件夹下的文件
比如"tmp"目录就是这种目录
权限信息中最后一位t表明该目录被设置了SBIT 权限
SBIT 对目录的作用是:当用户在该目录下创建新文件或目录时
仅有自己和root才有权力删除,主要作用于一个共享的文件夹
- 演示
我们可以自己创建一个这样的目录
使用三个不同的用户在此目录下分别创建三个文件
分别切换到不同用户来做删除操作
由此我们可以看出每个用户只能对自己所创建的文件进行删除
四.权限管理之 umask (了解)
1.作用
- 我们无论是用 root ,还是 UID > 199 的系统用户 / 普通用户创建的文件或者目录
- 它们的默认权限都是由 umask 来决定的
2.文件与目录权限的计算
- Linux文件默认的权限为 666, 目录权限为 777
- 但会收受到 umask 大小的影响
文件权限计算方法: 偶数位直接相减,奇数位相减后加1
文件起始权限 | umask值 | 运算 | 计算后的文件权限 |
---|---|---|---|
666 | 002 | 相减 | 644 |
666 | 033 | 相减后奇数为加1 | 644 |
666 | 325 | 相减后奇数为加1 | 442 |
目录权限计算方法: 直接相减
目录起始权限 | umask值 | 运算 | 目录计算后权限 |
---|---|---|---|
777 | 022 | 相减 | 755 |
777 | 033 | 相减 | 744 |
777 | 325 | 相减 | 452 |
UID > 199 的系统用户或者普通用户
默认 "umask": 0002
文件权限:664
目录权限:775
ROOT用户
默认 "umask": 0022
文件权限:644
目录权限:755
3.设置 umask 的方法
须知 umask 越小, 权限就越大
- 临时设置命令
# umask 000
- 永久设置命令
# vim /etc/profile
⛅或者
# vim /etc/bashrc
⛅内容是一致的