Linux文件系统权限
- 一、普通权限
-
- [1.1 权限介绍](#1.1 权限介绍)
-
- [1.1.1 权限的数字表示法:](#1.1.1 权限的数字表示法:)
- [1.1.2 文件权限(文件权限中包括 r 权限)](#1.1.2 文件权限(文件权限中包括 r 权限))
- [1.1.3 目录权限(目录权限中包括 r 和 x 权限)](#1.1.3 目录权限(目录权限中包括 r 和 x 权限))
- [1.1.4 默认权限(umask)](#1.1.4 默认权限(umask))
- [1.2 修改权限](#1.2 修改权限)
-
- [1.2.1 [ugoa][+-=][rwx]方式修改权限](#1.2.1 [ugoa][+-=][rwx]方式修改权限)
- [1.2.2 数字方式修改权限](#1.2.2 数字方式修改权限)
- 二、特殊权限
-
- [2.1 SUID(仅适用于可执行文件-u)](#2.1 SUID(仅适用于可执行文件-u))
- [2.2 SGID(针对所属组-g)](#2.2 SGID(针对所属组-g))
- [2.3 SBIT(只针对目录有效-x)](#2.3 SBIT(只针对目录有效-x))
一、普通权限
1.1 权限介绍
通过命令 ll
查看 当前目录下所有文件/目录的详细信息
bash
[root@ansible1 ~]# ll
total 8
-rw-------. 1 root root 989 Feb 27 16:19 anaconda-ks.cfg
-rw-r--r--. 1 root root 30 Jul 5 10:57 inventory
1 2 3 4 5 6 7
1:这部分包括文件类型、所属者权限、所属组权限、其它人权限、控制列表权限
2:文件的 链接数
3:文件所属者,即文件的创建者
4:文件所属组
5:文件的大小, 单位为字节
6:文件的最后一次修改时间
7:文件名/目录名
第一部分的 -rw-r--r--
:
文件类型 | 文件所属者权限 | 文件所属组权限 | 其他用户 | 访问控制列表
bash
- rw- r-- r-- .
1 2 3 4 5
1 :表示文件的类型
- 普通文件
d 目录
l 链接文件
c 字符设备文件
b 块设备文件
p 管道文件
s 套接字文件
2:表示文件所属 者 权限,可以用 u(user) 表示
- 表示无权限
r 表示读
w 表示写
x 表示可执行
3:表示文件所属 组 权限,可以用 g(group) 表示
- 表示无权限
r 表示读
w 表示写
x 表示可执行
4:表示其它用户(既不是所属者,也不是所属组中的用户)的权限,可以用 o(other) 表示
- 表示无权限
r 表示读
w 表示写
x 表示可执行
5:表示访问控制列表
. 表示没有设置访问控制列表
+ 表示设置了访问控制列表
注意:root 账户不受文件权限的
读写
限制 , 执行 权限受限制
1.1.1 权限的数字表示法:
bash
权限 二进制 八进制
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
1.1.2 文件权限(文件权限中包括 r 权限)
r(read):表示 可以读取 文件的内容
w(write):表示 可以修改 文件的内容
x(eXcute):表示 可以执行 这个文件
bash
对于文件来说可能出现的权限有:
---:没有权限
r--:表示只读
r-x:表示可读可执行
rw-:表示可读写
rwx:所有权限都有
1.1.3 目录权限(目录权限中包括 r 和 x 权限)
r:表示可以列出目录下的内容,即可以查看目录下的文件名称
w:表示可以创建、删除目录中的任意文件(但是要注意:如果只有 w 权限,是不能删除文件的,它需要和 x 权限一起使用)
x:表示可以切换目录(w+x才能删除文件)
bash
对于目录来说可能出现的权限:
---:表示没有权限
r-x:表示可读可进入
rwx:表示所有权限
1.1.4 默认权限(umask)
默认权限(也称为umask)是用来 控制新创建文件和目录的权限
linux系统新建文件默认没有执行权限
(安全考虑),其最大权限为rw-rw-rw-(666);新建目录的最大权限为rwx-rwx-rwx(777),目录默认有执行权限(进入目录必需)
- 文件 的默认最大权限是666(即-rw-rw-rw-)
- 默认权限:666 - 022 = 644
- 目录 的默认最大权限是777(即drwxrwxrwx)
- 默认权限:777-022=755
1.2 修改权限
修改文件或目录的权限需要使用 chmod(change mode)命令来实现,它的语法格式为:
bash
chmod [选项] [ugoa][+-=][rwx] 文件或目录.....
或者
chmod [选项] nnn 文件或目录.......
选项:
-R:表示 递归修改 `指定目录下` 所有文件及其子目录的权限
`ugoa`:表示 权限设置 所针对的用户类型,可以是其中字母的一个或组合。
u 表示所属者
g 表示所属组
o 表示其他用户
a 表示(u+g+o)
`+-=`:表示设置权限的操作动作。
+ 表示添加某个权限
- 表示取消某个权限
= 表示赋值某个权限
`rwx`:用字符形式表示所设置的权限,可以是一个字母或组合。
r:读
w:写
x:执行
`nnn`:用三位八进制数字来表示权限
r=4
w=2
x=1
rwx
x表示 2 的 0 次方 = 1
w表示 2 的 1 次方 = 2
r表示 2 的 2 次方 = 4
1.2.1 [ugoa][±=][rwx]方式修改权限
bash
# 以 root 用户在 /opt 目录下新建一个file1文件和test目录
[root@bogon ~]# cd /opt
[root@bogon opt]# ll
total 0
[root@bogon opt]# touch file1
[root@bogon opt]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 9 19:37 file1
# 创建目录 test
[root@bogon opt]# mkdir -p test
[root@bogon opt]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 9 19:37 file1
drwxr-xr-x. 2 root root 6 Dec 9 19:37 test
# 在test目录下创建文件 file2
[root@bogon opt]# cd test
[root@bogon test]# touch file2
[root@bogon test]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 9 19:38 file2
[root@bogon test]#
# 切换到 redhat 用户
[root@bogon test]# su - redhat
[redhat@bogon ~]$ ll /opt
total 0
-rw-r--r--. 1 root root 0 Dec 9 19:37 file1
drwxr-xr-x. 2 root root 19 Dec 9 19:38 test
[redhat@bogon ~]$ cd /opt
[redhat@bogon opt]$ ls
file1 test
[redhat@bogon opt]$ echo 123 > file1
-bash: file1: Permission denied
[redhat@bogon opt]$ cat file1
[redhat@bogon opt]$
# 切换后,可以发现,redhat 这个用户对于 /opt/file1 文件只具有 可读 的权限,而其他权限不是具备的。
# 现在让 redhat 用户具有对 /opt/file1 文件具有可写的权限
# 以 root 用户来为 file1 文件的 其他用户 赋予 可读可写 权限
[root@bogon opt]# chmod o=rw- file1
[root@bogon opt]#
# 赋值成功后,切换到 redhat 用户
[redhat@bogon opt]$ ll
total 0
-rw-r--r--. 1 root root 0 Dec 9 19:37 file1
drwxr-xr-x. 2 root root 19 Dec 9 19:38 test
[redhat@bogon opt]$ ll
total 0
-rw-r--rw-. 1 root root 0 Dec 9 19:37 file1
drwxr-xr-x. 2 root root 19 Dec 9 19:38 test
[redhat@bogon opt]$ echo 123 > file1
[redhat@bogon opt]$ cat file1
# 从上面的结果可以发现,redhat 用户已经对 file1 文件具有了可读可写的权限了。
# 注意:在赋予权限时,= 号表示给它刚好这个权限,如果希望在原有的权限基础上添加某个权限,需要使用 + 号
[root@bogon opt]# chmod o+r file1
[redhat@bogon opt]$ ll
total 4
-rw-r--rw-. 1 root root 8 Dec 9 19:48 file1
drwxr-xr-x. 2 root root 19 Dec 9 19:38 test
# 如果希望给某个用户取消某个权限,则需要使用 - 号,例如,对 /opt/file1 文件的 其他用户 权限 可写 权限,则操作如下:
[root@bogon opt]# chmod o-w file1
[redhat@bogon opt]$ ll
total 4
-rw-r--r--. 1 root root 8 Dec 9 19:48 file1
drwxr-xr-x. 2 root root 19 Dec 9 19:38 test
1.2.2 数字方式修改权限
使用数字的方式来设置权限
bash
# 给 /opt/file1 文件的其他用户设置权限为可卖可写
[root@bogon opt]# chmod 644 file1
# 这是设置整个 file1 的权限,而我们的需求是对其他用户,所以这个不能满足题目要求。
# 而能满足题目要求如下所示:
[root@bogon opt]# chmod 646 file1
#--------------------------------
# r w - r - - r w -
# 4 2 0 4 0 0 4 2 0
# 6 4 6
# 646
#----------------------------
# 1. 使用 root 用户对 /opt/test 目录的其他用户的可执行权限取消
[root@bogon opt]# chmod o-x test
# 2. 使用 redhat 用户来切换这个目录
[redhat@bogon opt]$ ll
total 4
-rw-r--rw-. 1 root root 8 Dec 9 19:48 file1
drwxr-xr--. 2 root root 19 Dec 9 19:38 test
[redhat@bogon opt]$ cd test
-bash: cd: test: Permission denied
# 发现已经不能成功切换了,说明权限设置成功。
# 需求:给 /opt/test 目录及子目录和文件都添加 w 权限
[root@bogon opt]# chmod -R o+w test
[redhat@bogon opt]$ ll
total 4
-rw-r--rw-. 1 root root 8 Dec 9 19:48 file1
drwxr-xrwx. 2 root root 19 Dec 9 19:38 test
[redhat@bogon opt]$ cd test
[redhat@bogon test]$ ll
total 0
-rw-r--rw-. 1 root root 0 Dec 9 19:38 file2
二、特殊权限
在Linux中,用户对文件或目录的访问权限除了r,x,w这三种一般权限以外,还有 SUID (Set User Id)、SGID(Set Group Id)、Sticky Bit(粘滞位)三种特殊权限,用于对文件或目录进行更加灵活且 方便的访问控制
数字法:
- SUID:4000
- SGID:2000
- SBIT: 1000
2.1 SUID(仅适用于可执行文件-u)
SUID是针对所属者具有 s 权限,只要用户设有 SUID 的文件有可执行权限,那么当用户执行此文件时,会以文件所有者身份去执行这个文件,一旦文件执行结束,身份的切换也随之消失
s 是标记在 x 所在位置,表示执行这个命令时,可以具有这个文件创建者的权限
shell
chmod u+s 目录名
chmod 4xxx 目录名 //xxx表示目录的所有者、所属组、其他用户权限
2.2 SGID(针对所属组-g)
SGID是针对所属组具有 s 权限
shell
chmod g+s 目录名
chmod 2xxx 目录名
2.3 SBIT(只针对目录有效-x)
只针对目录有效,对文件无效
对目录的作用是:在具有 SBIT 权限的目录下,用户若在该目录下具有 w 及 x 权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与 root 才有权力删除
shell
chmod +t 目录
chmod o+t 目录
chmod a+t 目录
chmod 1000 目录名