权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中的每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以对特定文件进行什么样操作。
Linux 文件目录权限
文件权限位说明
Linux 文件和目录的基础权限位由9个字符来控制,每三个字符位一组:
基础权限知识说明表:
“用户权限位+用户组权限位+其他用户权限位+…+属主+属组”
前三位是用户权限位 | 中三位是用户组权限位 | 后三位是其他用户权限位 |
---|---|---|
rw- | r– | r– |
user(用户)(属主) | group(用户组)(属组) | others(其他用户) |
代表字符:u | 代表字符:g | 代表字符:o |
read/r/4/可读权限 | write/w/2/可写权限 | Execute:/x/1/可执行权限 |
普通文件对应权限说明
-
可读 r :表示具有读取、预览文件内容的权限
-
可写 w:表示具有新增、修改、删除文件内容的权限
文件本身的可写权限,与文件是否能被删除和改名无关
-
可执行 x:表示具有执行文件的权限
普通用户而言,还需具备可读权限才能执行文件
目录对应权限说明
-
可读 r:具有预览目录下面文件及子目录的权限
-
可写 w:具有增加、删除或修改目录内文件的权限
如果没有可执行的权限配合,即使有w权限,也无法删除和创建文件
-
可执行 x:具有进入目录的权限
实践
修改文件及目录权限
chmod 命令用法:chmod [选项] [模式] [文件或目录]
- -R:递归处理指定目录以及子目录下所有的文件
数字方式修改权限
chmod [选项] 755 文件名
权限 | 二进制 | 八进制 | 权限 | 二进制 | 八进制 |
---|---|---|---|---|---|
— | 000 | 0 | r– | 100 | 4 |
–x | 001 | 1 | r-x | 101 | 5 |
-w- | 010 | 2 | rw- | 110 | 6 |
-wx | 011 | 3 | rwx | 111 | 7 |
字符修改权限
chmod [用户类型] [+|-|=] 字符 文件
用户类型 | 操作字符 | 字符 |
---|---|---|
u | + - = | r w x - |
g | + - = | r w x - |
o | + - = | r w x - |
a | + - = | r w x - |
举例说明:
[root@vm10 home]# ll
总用量 0
drwxr-x--x 2 root root 71 9月 4 21:10 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chmod u-x,g+r,o+rw ceshi
[root@vm10 home]# ll
总用量 0
drw-r-xrwx 2 root root 71 9月 4 21:10 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]#
默认权限掩码
umask :通过八进制的数值来定义用户创建文件或目录的默认权限
查看当前权限掩码设置
[root@vm10 home]# umask
0022
[root@vm10 home]#
如何计算默认权限
-
对于文件
创建文件默认最大权限为666,由最大权限减去 umask(各个位数字不能大于6),得到每一位数都是偶数,就是最终权限结果,如果得到的结果有奇数,这个奇数必须加1变成偶数
举例:
## 666-022=644 [root@vm10 home]# umask 0022 [root@vm10 home]# touch ceshi.txt [root@vm10 home]# ll ceshi.txt -rw-r--r-- 1 root root 0 9月 4 21:40 ceshi.txt [root@vm10 home]# ## 改变一下 umask的值为 025 ## 666-025=641 奇数位加1 最终权限结果:642 [root@vm10 home]# umask 0025 [root@vm10 home]# touch 1.txt [root@vm10 home]# ll 1.txt -rw-r---w- 1 root root 0 9月 4 21:41 1.txt [root@vm10 home]#
-
对于目录
创建目录默认最大权限为777,这个计算方法没有奇偶之分
举例:
## 777-025=752 [root@vm10 home]# umask 0025 [root@vm10 home]# mkdir ceshi [root@vm10 home]# ll 总用量 0 drwxr-x-w- 2 root root 6 9月 4 21:44 ceshi drwx------ 2 test test 83 9月 4 21:09 test [root@vm10 home]#
特殊权限位说明
suid
- 作用:让普通用户可以在执行某个位置了 suid 位的命令或程序时,拥有与 root 管理员一样的身份和权限(默认情况),比如说 passwd 命令具有 suid 权限:当普通用户通过
passwd
修改自己密码时候,就可以取得 root 权限,从而修改 shadow 文件,达到修改密码的目的
[root@vm10 home]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
[root@vm10 home]#
- 通过小写 s 字符标识,位置:用户权限位的 x 权限对应的位置,如果 x 权限上有权限,则显示小写的 s,如果没有 x 权限,则显示大写的 s
[root@vm10 home]# ll
总用量 0
drw-r-x-w- 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chmod u+s ceshi
[root@vm10 home]# ll
总用量 0
drwSr-x-w- 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chmod u+x ceshi
[root@vm10 home]# ll
总用量 0
drwsr-x-w- 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]#
sgid
- 用来获得命令所属用户组的身份和权限,类似于 suid:
locate
命令就是一个案例
[root@vm10 /]# which locate
/usr/bin/locate
[root@vm10 /]# ll /usr/bin/locate
-rwx--s--x 1 root slocate 40520 4月 11 2018 /usr/bin/locate
[root@vm10 /]#
- 通过小写的 s 字符标识,位置:用户组权限位的 x 权限对应的位置,如果 x 权限上有权限,则显示小写的 s,如果没有 x 权限,则显示大写的 s
[root@vm10 home]# ll
总用量 0
drwxr-x-w- 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chmod g+s ceshi
[root@vm10 home]# ll
总用量 0
drwxr-s-w- 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chmod g-x ceshi
[root@vm10 home]# ll
总用量 0
drwxr-S-w- 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]#
sticky(粘滞位)
- 开放所有权限,设置粘滞位,除非目录的属主和 root 用户有权限删除它,其他用户都不能删除:比如 /tmp
[root@vm10 /]# ll | grep tmp
drwxrwxrwt. 14 root root 4096 9月 4 22:19 tmp
[root@vm10 /]#
- 通过小写的 t 标识,位置:其他用户位对应的 x 权限对应的位置,如果 x 权限上有权限,则显示小写的 t,如果没有 x 权限,则显示大写的 t
[root@vm10 home]# ll
总用量 0
drwxr---w- 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chmod o+t ceshi
[root@vm10 home]# ll
总用量 0
drwxr---wT 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chmod o+x ceshi
[root@vm10 home]# ll
总用量 0
drwxr---wt 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]#
改变文件或目录的用户和用户组
chown:改变文件或目录的用户和用户组
chown [选项][用户:用户组] 文件或目录
- -R:递归更改
## 仅改变用户
[root@vm10 home]# ll
总用量 0
drwxr---wt 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chown test ceshi
[root@vm10 home]# ll
总用量 0
drwxr---wt 2 test root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]#
## 仅改变用户组
[root@vm10 home]# ll
总用量 0
drwxr---wt 2 test root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chown :test ceshi
[root@vm10 home]# ll
总用量 0
drwxr---wt 2 test test 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]#
## 同时授权用户和用户组
[root@vm10 home]# ll
总用量 0
drwxr---wt 2 test test 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]# chown root:root ceshi
[root@vm10 home]# ll
总用量 0
drwxr---wt 2 root root 6 9月 4 21:44 ceshi
drwx------ 2 test test 83 9月 4 21:09 test
[root@vm10 home]#
改变文件的扩展属性
chattr:改变更底层的属性
chattr [选项] [模式] 文件或者目录
- -R:递归
- -V:显示命令的执行过程
- 模式:
- +:增加参数
- -:移除参数
- =:更新为指定参数
- A:告诉系统不能修改这个文件的最后访问时间
- a:只能向文件中添加数据,不能删除
- i:不能删除、改名、写入和新增内容,相当于锁定了
## 对文件只追加内容,不能删除
[root@vm10 ceshi]# chattr +a ceshi
[root@vm10 ceshi]# rm ceshi
rm:是否删除普通空文件 "ceshi"?y
rm: 无法删除"ceshi": 不允许的操作
[root@vm10 ceshi]# echo 111 > ceshi
-bash: ceshi: 不允许的操作
[root@vm10 ceshi]# echo 111 >> ceshi
[root@vm10 ceshi]#
## 对文件加锁,只能读取
[root@vm10 ceshi]# chattr +i ceshi
[root@vm10 ceshi]# rm ceshi
rm:是否删除普通文件 "ceshi"?y
rm: 无法删除"ceshi": 不允许的操作
[root@vm10 ceshi]# echo 111 >> ceshi
-bash: ceshi: 权限不够
[root@vm10 ceshi]# cat ceshi
111
lsattr:查看文件的扩展属性
lsattr [选项] 文件或者目录
- -R:递归查询
- -a:显示所有文件的扩展属性
- -d:显示目录的扩展属性
[root@vm10 home]# lsattr -d ceshi/
---------------- ceshi/
[root@vm10 home]# lsattr -R ceshi/
----ia---------- ceshi/ceshi
Linux 文件属性
- inode 号
- 文件类型
- 属主权限
- 属组权限
- 其他人权限
- 跟 selinux 有关
- 硬链接数目
- 属主
- 属组
- 文件/目录本身的大小
- 最后修改时间
- 文件/目录名称
Linux 文件种类
文件种类
-
普通文件(-):纯文本、二进制文件、数据格式文件
-
目录文件(d)
-
字符设备(c)
-
块设备文件(b)
-
数据接口文件(s)
-
符号链接文件(l)
-
数据传送文件(p)