Linux文件权限管理
文件权限
把⼀个⽤户加⼊了⼀个组,该⽤户就拥有了该组的权限,当⼀个⽤户要操作某个⽂件时,系统会依次检索该⽤户是否是该⽂件的(属主)拥有者,其次是(数组)组成员,最后是其他⼈,如果扫描到是拥有者,则具备拥有者的权限,不必往后扫描,以此类推
权限类型
每一个权限拥有一个数字编号
r:可读(read)—> 4
w:可写(write)—> 2
x:可执⾏(execute)—> 1
-:没有对应权限
执行脚本 == 运行脚本
权限的归属
- 属主:u
- 属组:g
- 其他人:o
权限位
权限位主要分为三个部分,分别是属主、属组以及其他人
rwx : 属主—>可读可写可执行
r-x : 属组—>可读可执行
rw- : 其他人—>可读可写
使用ll命令查看文件详情,在每个文件详情最前方,有10个字符来表示文件类型和权限
[root@localhost ~]# ll
-rw-r--r-- 1 root root 0 12月 14 19:11 1
drwxr-xr-x 2 root root 6 12月 18 15:51 a
-rwxr-xr-x 1 root root 4609 11月 21 11:43 init.sh
在Linux 系统中权限是区分用户的,即属主(用户)、属组(组用户)、其他用户,第一位表示文件的类型,-代表文件,d代表目录,其他每个用户占三个字符,这里-rwxr-xr-x对应如下关系
- #文件
rwx #属主:可读可写可执行
r-x #属组:可读可执行
r-x #其他:可读可执行
含义解释
第一位:-代表文件,d代表目录
用户、组用户、其他用户都未rwx形式,其中r表示读、w表示写、x表示可执行,-表示没有权限,拿用户组举例,r只能出现在第一个位置、w只能出现在第二个位置、x只能出现在第三位。
如果我们将出现字符(可以是 r、w、x)表示为 1,出现-表示为 0,那么对应二进制如下,r - - = 100、- w - = 010、- - x = 001、再转换成 10 进制,那么读=4、写=2、可执行=1,将转换为以下关系
也就是说这里的数字简写了用户权限,我们也可以用数字反推权限,比如数据 6,我们转换为为二进制:110,转换为:rw-,具有可读、可写权限。
现在我们已经明白了:-rwxr-xr-x 权限含义了,这里用数字简写就是-755,这里还需要改写成 0755,这里的 0 可以简单理解成 10 进制
设置权限
chmod
格式:
chmod [参数] [权限表达式] [操作对象]
参数:
-R : 递归增加权限
[root@localhost ~]# ll /root/1.txt
-rw-r--r-- 1 root root 0 12月 18 16:42 /root/1.txt
# 1、加减法:+、- 在原来的权限基础上增减
#给属主增加执行权限,属组增加执行权限,其他增加写权限
[root@localhost ~]# chmod u+x,g+x,o+w /root/1.txt
[root@localhost ~]# ll /root/1.txt
-rwxr-xrw- 1 root root 0 12月 18 16:42 /root/1.txt
#取消属主写权限,权限属组读权限,取消其他读权限
[root@localhost ~]# chmod u-w,g-r,o-r /root/1.txt
[root@localhost ~]# ll /root/1.txt
-r-x--x-w- 1 root root 0 12月 18 16:42 /root/1.txt
# 2、赋值:= 不管原来是什么权限就直接覆盖了
[root@localhost ~]# chmod u=rwx,g=rw,o=rx /root/1.txt
[root@localhost ~]# ll /root/1.txt
-rwxrw-r-x 1 root root 0 12月 18 16:42 /root/1.txt
# 3、数字:不能单独设置一个,必须全部设置
#给属主设置读写执行权限,属组设置读执行权限,其他设置读写权限
[root@localhost ~]# chmod 756 /root/1.txt
[root@localhost ~]# ll /root/1.txt
-rwxr-xrw- 1 root root 0 12月 18 16:42 /root/1.txt
#全部设置读写执行权限
[root@localhost ~]# chmod 777 /root/1.txt
[root@localhost ~]# ll /root/1.txt
-rwxrwxrwx 1 root root 0 12月 18 16:42 /root/1.txt
# 4、-R:递归设置权限
[root@localhost ~]# mkdir -p /a/b/c
[root@localhost ~]# touch /a/b/c/d.txt
[root@localhost ~]# chomd -R 777 /a
[root@localhost ~]# ll /a/b
drwxrwxrwx 2 root root 19 12月 18 17:13 c
[root@localhost ~]# ll /a/b/c/d.txt
-rwxrwxrwx 1 root root 0 12月 18 17:13 /a/b/c/d.txt
# 置空权限:=-
[root@localhost ~]# chmod 000 /root/1.txt
或
[root@localhost ~]# chmod u=-,g=-,o=- /root/1.txt
[root@localhost ~]# ll /root/1.txt
---------- 1 root root 0 12月 18 16:42 /root/1.txt
权限的作用
1、权限对于用户的意义
1、普通用户是严格遵守权限的
2、root用户是高于权限
3、权限需要重新登才生效(su和su - 都可以)
2、权限对于文件的意义
1、r:读取文件内容
2、w:修改文件内容
3、x:可以把文件当成一个命令/程序运行
3、权限对于目录的意义
1、r:可以浏览该目录下子目录名和子文件名(路径的最小权限是必须拥有可执行权限)
2、w:创建、删除、移动(同上)
3、x:可以进入该目录(同上)
# 1、在目录下,只有可读权限,无法查看文件内容(因为你无法操作目录)
# 2、在目录下,只有可读可写权限,无法查看文件内容(理由同上)
# 3、要想查看文件夹下的文件,文件夹必须至少拥有可执行权限;同时文件必须拥有可读权限
权限之特殊权限
SUID
- 作用对象必须是二进制文件(cat 出来是乱码的文件)
- 该文件必须拥有可执行权限
chmod 4xxx [文件名]
or
chmod u+s [文件名]
[root@localhost ~]# ll `which passwd`
-rwsr-xr-x 1 root root 27856 4月 1 2020 /usr/bin/passwd
查看passwd命令的权限,我们可以看到一个不曾见到过的权限 s
而 S 权限是一个特殊权限
SUID 权限仅对⼆进制可执⾏⽂件有效
如果执⾏者对于该⼆进制可执⾏⽂件具有 s 的权限,执⾏者将具有该⽂件的所有者的权限
本权限仅在执⾏该⼆进制可执⾏⽂件的过程中有效
# 示例:
[root@localhost ~]# su - user # 切换到普通用户user10
[user@localhost ~]$ cat /etc/shadow # 查看用户密码文件
cat: /etc/shadow: 权限不够 # 显示权限不够,没办法访问
[user@localhost ~]$ ll /etc/shadow # 查看/etc/shadow 可以看出只有root用户才可以查看
----------. 1 root root 997 6月 20 18:02 /etc/shadow
[root@localhost ~]# ll `which cat` # 登录root用户,查看cat命令
-rwxr-xr-x. 1 root root 54160 10⽉ 31 2018 /usr/bin/cat
[root@localhost ~]# chmod 4755 `which cat` # 或者 chmod u+s `which cat` 修改权限
[root@localhost ~]# ll `which cat` # 现在cat命令的权限已经改成了s
-rwsr-xr-x. 1 root root 54160 10⽉ 31 2018 /usr/bin/cat
[root@localhost ~]# su - user # 再次切换到user10用户
[user@localhost ~]$ cat /etc/shadow # 可以看到用户密码文件的内容了
SBIT
SBIT 是 the restricted deletion flag or sticky bit 的简称,有时也称为 Sticky。
- 只对目录有效,用来阻止非文件的所有者删除文件,比较常见的就是/tmp 目录
chmod o+t [文件名]
or
chmod 1xxx [文件名]
[root@localhost ~]# ls -dl /tmp/ # -d 参数表示不查看目录下文件信息,就查看这个目录的信息
drwxrwxrwt. 13 root root 4096 8⽉ 11 17:09 /tmp/
权限信息中最后⼀位 t 表明该⽬录被设置了 SBIT 权限。
SBIT 对⽬录的作⽤是:
当⽤户在该⽬录下创建新⽂件或⽬录时,仅有⾃⼰和 root 才有权⼒删除,主要作⽤于⼀个共享的⽂件夹。
SGID
- 用户对某一目录具有写和执行权限,该用户就可以在该目录下建立文件,如果该目录被 SGID 修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组
chmod g+s [文件名]
or
chmod 2xxx [文件名]
ps:当 SGID 作⽤于普通⽂件时,和 SUID 类似,在执⾏该⽂件时,⽤户将获得该⽂件所属组的权限。
Umask
新建的文件、目录的默认权限是由 umask 决定的
uid > 199 并且属主与数组相等的⽤户下比如 test ,umask: 0002
- 文件权限:664
- 目录权限:775
除 1 之外的其他⽤户下,⽐如 root ⽤户,umask: 0022
- 文件权限:644
- 目录权限:755
在 Linux 中,常用的文件的权限是 666,目录的权限是 777
1、文件权限计算方法:
文件的权限是跟 umask 值相减,遇到奇数加一;遇到偶数则不变。
2、目录权限计算方法:
目录的权限只要跟 umask 值相减即可。
总结:umask设置的越小,权限就越大,慎用
# 默认权限
默认文件权限:644
默认的目录权限:755
[root@localhost ~]# touch a.txt #创建文件
[root@localhost ~]# ll a.txt
-rw-r--r-- 1 root root 0 12月 18 20:55 a.txt #默认权限644
[root@localhost ~]# mkdir b #创建目录
[root@localhost ~]# ll -d b
drwxr-xr-x 2 root root 6 12月 18 20:57 b #默认权限755
[root@localhost ~]# umask
0022
# 临时设置umask
[root@localhost ~]# umask 000 #设置umask权限
# 永久设置umask
#更改配置文件
[root@localhost tmp]# vim /etc/profile # 或者/etc/bashrc内容⼀样
......
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002 #表示uid⼤于等于199的默认umask值,表示普通⽤户
else
umask 022 #表示uid⼩于199的默认umask值,表示root
fi
需求:
要求把1个月之前修改过的日志文件删除。
案例:
案例1:将index文件添加属主 : 可读可写可执行、属组 :可读可写、其他人:没有任何权限
chmod 760 index
案例2:将baidu下的所有文件设置rwxr--r--
chmod -R 744 baidu/
案例3:将index这个文件的属组增加一个可执行权限。
chmod g+x index
chmod g+x,o-r index