Linux 文件权限说明(服务器技巧篇)

Linux普通文件和目录的权限意义

在linux中文件权限设置对于普通文件和目录文件来说产生的控制是不同的。

权限 r w x
文件 可读 可写,可以修改、新增和删除文件 可执行,文件可被系统执行的权限
文件夹 可读文件目录,通过ls命令将该目录下所有文件列表显示出来,此外其他信息无法获取 可修改文件目录,在该目录下创建、转移、重命名删除文件与目录 可访问,表示具有访问当前目录的权限

Linux文件的权限管理

Linux中文件权限的修改通过chmod命令,权限的设置方法包括两种:

  1. 数字类型改变文件权限
  2. 字符类型改变文件权限。
命令 所属权 赋权 对象
chmod u/g/o/a +/-/= 文件目录

数字类型改变文件权限

各权限的分数对照表如下:

r:4
w:2
x:1

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[thinktik@thinkcent test]$ ls
[thinktik@thinkcent test]$
[thinktik@thinkcent test]$
[thinktik@thinkcent test]$ touch 1.txt
[thinktik@thinkcent test]$ ls
1.txt
[thinktik@thinkcent test]$ ll
total 0
-rw-rw-r--. 1 thinktik thinktik 0 Nov 8 22:10 1.txt

[thinktik@thinkcent test]$ ll
total 0
-rw-rw-r--. 1 thinktik thinktik 0 Nov 8 22:10 1.txt

# 将文件由664改为764
[thinktik@thinkcent test]$ chmod 764 1.txt
[thinktik@thinkcent test]$ ll
total 0
-rwxrw-r--. 1 thinktik thinktik 0 Nov 8 22:10 1.txt

header 1 | header 2
---|---
row 1 col 1 | row 1 col 2
row 2 col 1 | row 2 col 2


[thinktik@thinkcent test]$ mkdir test
[thinktik@thinkcent test]$ ls
1.txt test
[thinktik@thinkcent test]$ ll
total 0
-rwxrw-r--. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:16 test
# 将文件夹由664改为764
[thinktik@thinkcent test]$ chmod 764 test
[thinktik@thinkcent test]$ ll
total 0
-rwxrw-r--. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
drwxrw-r--. 2 thinktik thinktik 6 Nov 8 22:16 test

字符类型改变文件权限

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[thinktik@thinkcent test]$ ll
total 0
-rwxrw-r--. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
drwxrw-r--. 2 thinktik thinktik 6 Nov 8 22:16 test
# 文件改为640
[thinktik@thinkcent test]$ chmod u=rw,g=r,o= 1.txt
[thinktik@thinkcent test]$ ll
total 0
-rw-r-----. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
drwxrw-r--. 2 thinktik thinktik 6 Nov 8 22:16 test
[thinktik@thinkcent test]$ chmod u=rw,g=r,o= test/
# 文件夹改为640
[thinktik@thinkcent test]$ ll
total 0
-rw-r-----. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
drw-r-----. 2 thinktik thinktik 6 Nov 8 22:16 test
# 文件夹加读权限
[thinktik@thinkcent test]$ chmod g+w test/
[thinktik@thinkcent test]$ ll
total 0
-rw-r-----. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
drw-rw----. 2 thinktik thinktik 6 Nov 8 22:16 test
[thinktik@thinkcent test]$ chmod g-w test/
# 文件夹减读权限
[thinktik@thinkcent test]$ ll
total 0
-rw-r-----. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
drw-r-----. 2 thinktik thinktik 6 Nov 8 22:16 test

文件权限对用户的影响

我们对文章开头的权限表进行简单的演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 再建立一个演示文件夹
[thinktik@thinkcent test]$ mkdir rtest
[thinktik@thinkcent test]$ ll
total 0
-rw-r-----. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:31 rtest
drw-r-----. 2 thinktik thinktik 6 Nov 8 22:16 test
[thinktik@thinkcent test]$ touch 2.txt
# 再建立一个演示文件
[thinktik@thinkcent test]$ ll
total 0
-rw-r-----. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
-rw-rw-r--. 1 thinktik thinktik 0 Nov 8 22:31 2.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:31 rtest
drw-r-----. 2 thinktik thinktik 6 Nov 8 22:16 test
#切换到root
[thinktik@thinkcent test]$ su
Password:
# 改文件的所属用户和组
[root@thinkcent test]# chown root:root 2.txt
[root@thinkcent test]# ll
total 0
-rw-r-----. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
-rw-rw-r--. 1 root root 0 Nov 8 22:31 2.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:31 rtest
drw-r-----. 2 thinktik thinktik 6 Nov 8 22:16 test
# 改文件夹的所属用户和组
[root@thinkcent test]# chown root:root test/
[root@thinkcent test]# ll
total 0
-rw-r-----. 1 thinktik thinktik 0 Nov 8 22:10 1.txt
-rw-rw-r--. 1 root root 0 Nov 8 22:31 2.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:31 rtest
drw-r-----. 2 root root 6 Nov 8 22:16 test

# thinktik属于2.txt的others,属于1.txt的own
[thinktik@thinkcent test]$ ll
total 4
-rw-r-----. 1 thinktik thinktik 29 Nov 8 22:38 1.txt
-rw-rw-r--. 1 root root 0 Nov 8 22:31 2.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:31 rtest
drw-r-----. 2 root root 6 Nov 8 22:16 test
[thinktik@thinkcent test]$ date >> 1.txt
[thinktik@thinkcent test]$ date >> 2.txt
-bash: 2.txt: Permission denied
[thinktik@thinkcent test]$ su
Password:
[root@thinkcent test]# date >> 2.txt
[root@thinkcent test]# exit
[thinktik@thinkcent test]$ cat 2.txt
Thu Nov 8 22:38:59 CST 2018
# thinktik属于test文件夹的others,属于rtest文件夹的own
[thinktik@thinkcent test]$ ll
total 8
-rw-r-----. 1 thinktik thinktik 58 Nov 8 22:38 1.txt
-rw-rw-r--. 1 root root 29 Nov 8 22:38 2.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:31 rtest
drw-r-----. 2 root root 6 Nov 8 22:16 test
[thinktik@thinkcent test]$ cd test/
-bash: cd: test/: Permission denied
[thinktik@thinkcent test]$ cd rtest/
[thinktik@thinkcent rtest]$ ll
total 0

Linux文件和目录的默认权限umask

umask主要用于指定用户在新建文件和目录时的”默认所有权限需要减去的权限”,umask=user+musk也就用户权限的掩码的意思,掩码是什么自己研究下。

文件和目录的默认权限

若用户新建文件,默认是没有可执行的权限“x”,也就是最多只有r、w两个权限,也就是最大666,默认权限掩码0002,默认权限的数字表示为777-002=664,字符表示为-rw-rw-r--.

1
2
3
4
5
6
[thinktik@thinkcent test]$ umask
0002
[thinktik@thinkcent test]$ touch 1.txt
[thinktik@thinkcent test]$ ll
total 0
-rw-rw-r--. 1 thinktik thinktik 0 Nov 8 22:46 1.txt

若用户新建目录,因为x权限提供了进入这个目录的最基本权限,所以目录默认所有权限均开放,数字表示为777,字符表示为drwxrwxrwx。掩码为0002,则实际上默认的权限为775也就是drwxrwxr-x.

1
2
3
4
5
[thinktik@thinkcent test]$ mkdir 2
[thinktik@thinkcent test]$ ll
total 0
-rw-rw-r--. 1 thinktik thinktik 0 Nov 8 22:46 1.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:52 2

查看默认权限umask

1
2
3
4
5
6
7
8
9
10
11
12
13
# 指定参数-S以符号类型查看默认权限
[thinktik@thinkcent test]$ umask -S
u=rwx,g=rwx,o=rx
# 直接输入umask查看数字形态的权限设置分数
[thinktik@thinkcent test]$ umask
0002
# 改umask为022
[thinktik@thinkcent test]$ umask 022
[thinktik@thinkcent test]$ umask
0022
[thinktik@thinkcent test]$ umask 002
[thinktik@thinkcent test]$ umask
0002

Linux文件的特殊权限SUID,SGID和SBIT

我们之前了解的文件权限只有r(读)、w(写)和x(执行)权限,但在有时候使用·ls -l·查看文件和目录文件属性会发现部分文件或目录的权限列信息有些奇怪.

例如/usr/bin下部分文件就是-rwsr-xr-x

这里s就是我们要讲的文件的特殊权限,文件的特殊权限与系统的进程有关感兴趣的可以自行去了解,我们这边只做简单了解和设置

  1. SUID特殊权限

当s这个符号出现再文件所有者权限x的位置例如-rwsr-xr-x时文件就具有SUID特殊权限

那么SUID特殊权限有什么用呢,简单来讲SUID有以下的作用和使用限制:

  • SUID对于目录无效,仅且仅对二进制程序有效
  • 执行者需要对该可执行文件具有x(可执行)权限
  • 本权限仅在执行程序的过程中有效
  • 程序执行过程中短暂的获得文件所有者的权限

简单来讲就是设置了SUID特殊权限的文件,用户只要拥有该文件的执行权限那么在执行过程中就能短暂获得文件所有者的所有权限,进行一些该用户本身无权限进行的操作。假如一个文件是-rwsr-xr-x被root拥有而且其他任何人有执行权限,这时任一个用户执行这个文件就可短暂的在运行期间获得root的权限。

  1. GID特殊权限

s符号出现在文件所属用户组权限中x的位置例如-rwx--s--x,这就被称为SGID特殊权限。SGID特殊权限对于文件和目录均有效。

对于文件来说SGID有以下功能和使用限制:

  • SGID只对二进制程序有效
  • 文件执行者需要具备该文件的x权限
  • 程序只在执行过程中短暂获得文件所属用户组的权限

对于目录来说SGID具有如下功能和使用限制:

  • 若用户对该目录具有r和x权限,用户可以进入该目录
  • 用户在此目录下具有w的权限,则用户所创建的新文件的用户组与此目录的用户组相同
  • 用户在此目录下的有效用户组将会变成此目录的用户组
  1. SBIT特殊权限

t符号出现在文件其他人权限中x的位置时例如drwxrwxrwt,这时文件具有SBIT特殊权限。SBIT目前只对目录有效,

它的主要作用和使用限制是:

  • 用户对目录具有wx的权限;
  • 该目录加上了SBIT特殊权限则当用户在该目录下创建文件或目录时,则除了root用户,只有该用户能删除、重命名和移动自己创建的文件和目录,而无法删除其他用户的文件

SUID/SGID/GBIT特殊权限设置

  1. 数字法设置

我们都知道数字法设置文件权限方式是三个数字的组合xyz,三个数字分别标识文件所有者、所属用户组和其他用户的权限,那么文件特殊权限的设置其实就是在前面加上一个数字标识特殊权限,三个特殊权限的数字标识分别如下:

SUID : 4 
SGID : 2
SBIT : 1

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 增加SUID特殊权限
[thinktik@thinkcent test]$ chmod 4755 1.txt
[thinktik@thinkcent test]$ ll
total 0
-rwsr-xr-x. 1 thinktik thinktik 0 Nov 8 22:46 1.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:52 2
[thinktik@thinkcent test]$ ls
1.txt 2
# 增加SGID权限
[thinktik@thinkcent test]$ chmod 2755 1.txt
[thinktik@thinkcent test]$ ll
total 0
-rwxr-sr-x. 1 thinktik thinktik 0 Nov 8 22:46 1.txt
drwxrwxr-x. 2 thinktik thinktik 6 Nov 8 22:52 2
# 增加SBIT权限
[thinktik@thinkcent test]$ chmod 1755 2/
[thinktik@thinkcent test]$ ll
total 0
-rwxr-sr-x. 1 thinktik thinktik 0 Nov 8 22:46 1.txt
drwxr-xr-t. 2 thinktik thinktik 6 Nov 8 22:52 2
# 增加SUID和SGID特殊权限
[thinktik@thinkcent test]$ chmod 6755 1.txt
[thinktik@thinkcent test]$ ll
total 0
-rwsr-sr-x. 1 thinktik thinktik 0 Nov 8 22:46 1.txt
drwxr-xr-t. 2 thinktik thinktik 6 Nov 8 22:52 2
  1. 符号法设置

符号法设置特殊权限命令如下

SUID : chmod u+s 文件
SGID :chmod g+s 文件或目录
SBIT :chmod o+t 目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[thinktik@thinkcent test]$ ll
total 0
-rwsr-xr-x. 1 thinktik thinktik 0 Nov 8 22:46 1.txt
drwxr-xr-t. 2 thinktik thinktik 6 Nov 8 22:52 2
# 增加SGID权限
[thinktik@thinkcent test]$ chmod g+s 1.txt
[thinktik@thinkcent test]$ ll
total 0
-rwsr-sr-x. 1 thinktik thinktik 0 Nov 8 22:46 1.txt
drwxr-xr-t. 2 thinktik thinktik 6 Nov 8 22:52 2
# 取消所有权用户的执行权限,注意S的由s变成了S
[thinktik@thinkcent test]$ chmod u-x 1.txt
[thinktik@thinkcent test]$ ll
total 0
-rwSr-sr--. 1 thinktik thinktik 0 Nov 8 22:46 1.txt
drwxr-xr-t. 2 thinktik thinktik 6 Nov 8 22:52 2
# 取消所有权用户的SUID权限
[thinktik@thinkcent test]$ chmod u-s 1.txt
[thinktik@thinkcent test]$ ll
total 0
-rw-r-sr--. 1 thinktik thinktik 0 Nov 8 22:46 1.txt
drwxr-xr-t. 2 thinktik thinktik 6 Nov 8 22:52 2

大致这样,更多细节的不演示了。。。

写的不错?请我喝杯可乐!!!
0%