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

猜你喜欢

转载自blog.csdn.net/weixin_40136446/article/details/105919898