Linux文件和目录权限管理
一、文件和目录权限简介
Linux系统是一个典型的多用户系统,为了保护系统和用户数据的安全,Linux对不同用户访问同一文件和目录做了不同的限制。
在Linux中每一个文件或目录都有自己的访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录
文件和目录的权限有三种
权限 | 文件 | 目录 |
---|---|---|
r(读) | 可以查看文件的内容,例如可以使用cat、more等命令 | 可以列出目录中的内容,例如使用ls、dir等命令 |
w(写) | 可以更改文件的内容,例如使用 vim编辑器、重定向等工具 | 可以在目录中添加删除文件,例如使用rm、mv、cp、mkdir、touch等命令对目录中的文件进行操作 |
x(可执行) | 可以执行文件,需要同时具有 r 权限,例如执行shell脚本、Python脚本 | 可以进入目录,例如使用cd命令 |
文件和目录权限的控制对象包括 :文件的所有者、所属组、以及其他用户。
– 所有者(属主):拥有此文件/目录的用户-user u
– 所属组(属组):拥有此文件/目录的组-group g
– 其他用户:除所有者、所属组以外的用户-other o
- 特别说明:在linux系统中无论这个文件是属于谁、或者属于哪个组,root用户都对它有权限。因为root是系统管理员。
- 而且只用root用户可以修改目录或文件的权限
以/etc/passwd文件为例
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r--. 2 root root 2192 Apr 8 07:33 /etc/passwd
这个文件的所有者是root ,所属组是root,其他用户就是除root用户,以及root组以外的其它用户。
文件属性中由第2~10个字符组成的“rw-r–r--”代表了这个文件的权限,每三个字符为一组,代表了3类用户的**r(读)、w(写)、x(可执行)**三种权限。
“rw-r–r--“ 表示:
- 所有者对该文件有可读可写的权限。
- 所属组用户对该文件有只读的权限
- 其他用户对该文件有只读的权限
二、更改文件和目录的所有者和所属组
2.1、chown命令:修改文件和目录的所有者和所属组
命令格式:
- chown [OPTION]… [OWNER][:[GROUP]] FILE…
- chown [OPTION]… --reference=RFILE FILE…
常用的选项:
- -R :以递归方式更改目录下各级子目录和文件的所有者所属组
- FILE: 需要更改的文件或目录,多个文件或者目录可以使用空格分隔
2.2、实例1:
- 新建目录 /aa
- 新建用户 aa
- 新建用户组 users1
[root@localhost ~]# mkdir /aa
[root@localhost ~]# useradd aa
[root@localhost ~]# groupadd users1
- 将目录/aa的所有者改为用户aa,将所属组改为users1
[root@localhost ~]# ls -ld /aa
drwxr-xr-x. 2 root root 6 May 4 12:13 /aa
[root@localhost ~]# chown aa:users1 /aa
[root@localhost ~]# ls -ld /aa
drwxr-xr-x. 2 aa users1 6 May 4 12:13 /aa
2.2、实例2:
- 新建一个连续的目录 /bb/cc/dd/
- 在/bb/cc/dd/下创建文件a.txt
[root@localhost ~]# mkdir -p /bb/cc/dd
[root@localhost ~]# touch /bb/cc/dd/a.txt
[root@localhost ~]# ls -Rl /bb/
/bb/:
total 0
drwxr-xr-x. 3 root root 16 May 4 12:16 cc
/bb/cc:
total 0
drwxr-xr-x. 2 root root 19 May 4 12:17 dd
/bb/cc/dd:
total 0
-rw-r--r--. 1 root root 0 May 4 12:17 a.txt
- 将目录/bb下所有目录和文件的所有者改为aa,所属组改为users1
[root@localhost ~]# chown -R aa:users1 /bb
drwxr-xr-x. 3 aa users1 16 May 4 12:16 cc
[root@localhost ~]# ls -Rl /bb/
/bb/:
total 0
drwxr-xr-x. 3 aa users1 16 May 4 12:16 cc
/bb/cc:
total 0
drwxr-xr-x. 2 aa users1 19 May 4 12:17 dd
/bb/cc/dd:
total 0
-rw-r--r--. 1 aa users1 0 May 4 12:17 a.txt
三、更改文件和目录的权限
3.1、chmod命令
chmod命令用于更改文件或者目录的访问权限,包括目录下的各级子目录和文件。
命令格式:
- chmod [OPTION]… MODE[,MODE]… FILE…
- chmod [OPTION]… OCTAL-MODE FILE…
- chmod [OPTION]… --reference=RFILE FILE…
常用的选项:
- -R :以递归方式更改目录下各级子目录和文件的所访问权限
- FILE: 需要更改的文件或目录,多个文件或者目录可以使用空格分隔
chmod命令可以使用两种方式更改文件或目录的访问权限
3.2、字符方式
chmod命令使用u、g、o和a分别代表文件的所有者、所属组(属组)、其他用户和所有用户。
命令示例1:
- 新建文件 file1
[root@localhost ~]# touch file1
[root@localhost ~]# ls -l file1
-rw-r--r--. 1 root root 0 May 4 12:29 file1
- 给 file1文件的所有者添加可执行权限
[root@localhost ~]# chmod u+x file1
[root@localhost ~]# ls -l file1
-rwxr--r--. 1 root root 0 May 4 12:29 file1
- 给file1的所属组和其他人加上写权限
[root@localhost ~]# chmod g+w,o+w file1
[root@localhost ~]# ls -l file1
-rwxrw-rw-. 1 root root 0 May 4 12:29 file1
- 给所有用户添加对file1可执行的权限
[root@localhost ~]# chmod a+x file1
[root@localhost ~]# ls -l file1
-rwxrwxrwx. 1 root root 0 May 4 12:29 file1
- 取消其他人对file1的所有权限
[root@localhost ~]# chmod o=--- file1
[root@localhost ~]# ls -l file1
-rwxrwx---. 1 root root 0 May 4 12:29 file1
命令示例2:
- 新建目录/abc/aaa/bbb/ccc
- 新建文件/abc/aaa/bbb/ccc/ABC.txt
[root@localhost ~]# mkdir -p /abc/aaa/bbb/ccc
[root@localhost ~]# touch /abc/aaa/bbb/ccc/ABC.txt
[root@localhost ~]# ls -Rl /abc/
/abc/:
total 0
drwxr-xr-x. 3 root root 17 May 4 12:35 aaa
/abc/aaa:
total 0
drwxr-xr-x. 3 root root 17 May 4 12:35 bbb
/abc/aaa/bbb:
total 0
drwxr-xr-x. 2 root root 21 May 4 12:35 ccc
/abc/aaa/bbb/ccc:
total 0
-rw-r--r--. 1 root root 0 May 4 12:35 ABC.txt
- 为目录/abc下的目录和文件添加所有用户可写的权限
[root@localhost ~]# chmod -R a+w /abc
[root@localhost ~]# ls -Rl /abc/
/abc/:
total 0
drwxrwxrwx. 3 root root 17 May 4 12:35 aaa
/abc/aaa:
total 0
drwxrwxrwx. 3 root root 17 May 4 12:35 bbb
/abc/aaa/bbb:
total 0
drwxrwxrwx. 2 root root 21 May 4 12:35 ccc
/abc/aaa/bbb/ccc:
total 0
-rw-rw-rw-. 1 root root 0 May 4 12:35 ABC.txt
3.3、数字方式
命令格式:
- chmod nnn 文件名
其中1、2、3个n分别表示所有者、所属组和其他人。
权限数值对应表
权限 | 数值 |
---|---|
r | 4 |
w | 2 |
x | 1 |
命令示例1:
- 对文件file1,
- 所有者的权限为只读(r=4,w=0,o=0)
- 所属组的权限为可读可写可执行(r=4,w=2,o=1)
- 其他人的权限为可读可写可执行(r=4,w=2,o=1)
[root@localhost ~]# ls -l file1
-rwxrwx---. 1 root root 0 May 4 12:29 file1
[root@localhost ~]# chmod 477 file1
[root@localhost ~]# ls -l file1
-r--rwxrwx. 1 root root 0 May 4 12:29 file1
四、设置文件和目录的默认权限
对于每个新创建的文件和目录,系统都会自动为它们设置默认的访问权限
4.1、umask命令:设置文件和目录的默认权限
命令格式:
- umask [value]
[value]是一个由4个数字组成的权限掩码。如果直接运行不带选项的umask命令。将会显示当前系统默认的权限掩码值。
[root@localhost ~]# umask
0022
新创建的文件默认访问权限是0666(也就是rw-rw-rw-)
新创建的目录默认访问权限是0777(也就是rwxrwxrwx)
每次创建新的文件或目录时,都会检查umask值。然后将默认权限的值与umask值相减,得到新的访问权限值。
- 如果umask值为0022,那么新创建的文件访问权限就是(0666 - 0022 = 0644 )也就是 rw-r–r--。
[root@localhost ~]# touch file2
[root@localhost ~]# ls -l file2
-rw-r--r--. 1 root root 0 May 4 12:51 file2
- 如果umask值为0022,那么新创建的目录访问权限就是(0777 - 0022 = 0755 )也就是 rwxr-xr-x。
[root@localhost ~]# mkdir dir1
[root@localhost ~]# ls -ld dir1
drwxr-xr-x. 2 root root 6 May 4 12:52 dir1
umask的值可以修改
[root@localhost ~]# umask
0022
[root@localhost ~]# umask 0000
[root@localhost ~]# umask
0000
[root@localhost ~]# umask 0777
[root@localhost ~]# umask
0777