文件及目录权限的表示方法

当我们使用 ls -l 命令查看详细文件内容时,可以看到查询出的内容如下:

1
2
3
4
5
6
7
8
9
root@CHJ-20190520VPS:/usr/lib# ls -l
total 920
drwxr-xr-x 1 root root 4096 May 21 22:39 kernel
drwxr-xr-x 1 root root 4096 May 21 22:39 klibc
drwxr-xr-x 1 root root 4096 May 21 22:40 language-selector
lrwxrwxrwx 1 root root 21 Feb 12 16:55 libDeployPkg.so.0 -> libDeployPkg.so.0.0.0
-rw-r--r-- 1 root root 31280 Feb 12 16:55 libDeployPkg.so.0.0.0
lrwxrwxrwx 1 root root 20 Feb 12 16:55 libguestlib.so.0 -> libguestlib.so.0.0.0
-rw-r--r-- 1 root root 22656 Feb 12 16:55 libguestlib.so.0.0.0

一共查询出七列内容,分别表示:

文件属性(占10个字符空间)、拥有的文件数量、文件的创建者、所属的group、文件大小、建档日期、文件名

文件属性

Linux的文件基本上分为三个属性:可读(r),可写(w),可执行(x)

但是这里有十个格子可以填(具体程序实现时,实际上是十个bit位)

文件类型

第一个小格是特殊表示格,表示目录或连结文件等等

  1. d 表示目录,这个是在创建下来文件的类型就固定了下来,不可以人为进行更改

  2. l 表示链接文件,类似于快捷方式

  3. - 表示这是普通文件

  4. b 块特殊文件,其实是指的是设备,比如我们插入一个移动硬盘,插入一个硬盘之后,Linux系统就会把他当成一个特出文件块文件来表示

  5. c 字符特殊文件,就是终端

  6. f 命名管道

  7. s 套接字文件

文件权限表示方法

字符权限表示方法:

  1. r

  2. w

  3. x 执行

数字权限的表示方法(8进制数字表示):

  1. r=4

  2. w=2

  3. x=1

其余剩下的格子就以每3格为一个单位,因为Linux是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限,其文件的权限位置排列顺序是(以-rwxr-xr-x为例):

  rwx(Owner)r-x(Group)r-x(Other)

这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。

另外,有一些程序属性的执行部分不是X,而是S,这表示执行这个程序的使用者,临时可以有和拥有者一样权力的身份来执行该程序。一般出现在系统管理之类的指令或程序,让使用者执行时,拥有root身份。

文件权限的修改

修改权限命令

chown命令

修改属主或数组命令,使用方法:

  1. 修改属主:chown 用户名称 文件名称

  2. 修改属组:chown :用户组名称 文件名称

修改文件、目录权限。Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用

首先我们新创建一个目录,查看root用户新创建目录的默认权限,如下:

1
2
root@CHJ-20190520VPS:/tmp# ls -ld testdir/
drwxr-xr-x 1 root root 4096 Jul 27 15:05 testdir/

表示文件的属主是root用户,root用户可以读写删除等,所属用户组不能删除,其他其他用户不能删除

这里我们需要了解,Linux权限限制是非root用户的,这里既是我们将文件或目录的权限给root修改了,但是root用户还是不受限制的

所以为了方便测试我们不要用root用户来操作,命令使用示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 修改属主
root@CHJ-20190520VPS:/tmp# chown wangjia3 testdir
root@CHJ-20190520VPS:/tmp# ls -ld testdir
drwxr-xr-x 1 wangjia3 root 4096 Jul 27 15:05 testdir

# 修改属组
root@CHJ-20190520VPS:/tmp# groupadd group01
root@CHJ-20190520VPS:/tmp# chown :group01 testdir
root@CHJ-20190520VPS:/tmp# ls -ld testdir
drwxr-xr-x 1 wangjia3 group01 4096 Jul 27 15:05 testdir

# 属主属组一起修改
root@CHJ-20190520VPS:/tmp# chown wangjia3:group01 testdir/
root@CHJ-20190520VPS:/tmp# ls -ld testdir/
drwxr-xr-x 1 wangjia3 group01 4096 Aug 3 12:35 testdir/

可以看到文件的属主和属组已经改变

chgrp命令

修改属组命令,使用方法:chgrp 用户组名称 文件名称

使用示例:

1
2
3
root@CHJ-20190520VPS:/tmp# chgrp root testdir
root@CHJ-20190520VPS:/tmp# ls -ld testdir
drwxr-xr-x 1 wangjia3 root 4096 Jul 27 15:05 testdir

可以看到文件的属组已经被修改回为root分组

创建文件的默认权限

我们创建一个新的文件,默认的权限如下所示:

1
2
3
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 3 12:35 demoFile

那它是怎么来的呢?其实创建新的文件默认的权限是数字表示法:666,表示属主属组其他都是拥有读写权限,但它会根据数字权限表示减去一个uumask,umask表示如下:

1
2
root@CHJ-20190520VPS:/tmp/testdir# umask
0022

所以这就是我们创建文件的默认权限的由来,是使用 666 减去 umask 得到的默认权限

chmod命令

chmod是Linux/Unix中修改文件或者目录权限的命令,通过修改权限可以让指定的人对文件可读、可写、可运行,极大地保证了数据的安全性

使用方法:chmod [修改内容 修改符号 权限] 文件

修改字符权限

参数详解

修改内容
  1. u 修改文件属主的权限

  2. g 修改文件属组的权限

  3. r 修改其他以外的权限

  4. a 以上三者都修改

具体权限修改
  1. + 增加权限

  2. - 取消权限

  3. = 直接设定权限

此三条具体设置的权限就是我们之前了解的:r、w、x

使用示例:

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
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 3 12:35 demoFile

# 属主增加执行权限
root@CHJ-20190520VPS:/tmp/testdir# chmod u+x demoFile
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rwxr--r-- 1 root root 0 Aug 3 12:35 demoFile

# 属组取消读权限
root@CHJ-20190520VPS:/tmp/testdir# chmod o-r demoFile
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rwxr----- 1 root root 0 Aug 3 12:35 demoFile

# 其他设置执行和读权限
root@CHJ-20190520VPS:/tmp/testdir# chmod o=xr demoFile
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rwxr--r-x 1 root root 0 Aug 3 12:35 demoFile

# 所有设置读写执行权限
root@CHJ-20190520VPS:/tmp/testdir# chmod a=xwr demoFile
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rwxrwxrwx 1 root root 0 Aug 3 12:35 demoFile

修改数字权限

修改方法:chmod [数字] 文件

注意:以上参数中数字为3位数

参数详解

三位数字第一位代表属主权限,第二位代表属组权限,第三位代表其他权限

数字则分别用 1、2、4 来分别表示 执行、写、读

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rwxrwxrwx 1 root root 0 Aug 3 12:35 demoFile

# 设置取消所有权限
root@CHJ-20190520VPS:/tmp/testdir# chmod 000 demoFile
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
---------- 1 root root 0 Aug 3 12:35 demoFile

# 设置属主读写权限,属组和其他读权限
root@CHJ-20190520VPS:/tmp/testdir# chmod 644 demoFile
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 3 12:35 demoFile

特殊权限

SUID

用于二进制可执行文件,执行命令时取得文件的属主权限,例如 /usr/bin/password

1
2
wangjia3@CHJ-20190520VPS:/tmp/testdir$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59640 Mar 23 03:05 /usr/bin/passwd

如上示例中:属主权限是 wss 之前是我们没有解释过的,它表示的是不管是root用户还是普通用户,它在执行这条命令时,它都会以文件的属主的这种身份来进行操作

它的作用就是,我们有些文件用户是没有任何权限的,例如保存用户账户密码的文件,/etc/shadow:

1
2
wangjia3@CHJ-20190520VPS:/tmp/testdir$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1153 Jul 27 13:38 /etc/shadow

我们当前登录的用户是没有此文件的任何权限的,而root用户有此文件的权限,那我们普通用户为什么能修改密码呢,就是我们在修改密码例如passwd文件的时候,它能以root用户的身份来执行,这样就避免了我们需要主动去切换用户的修改密码的问题。

SGID

用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的数组,一般是我们在文件共享的时候,一般会用到SET GID

SBIT

用于目录,该目录下新建的文件和目录,仅root和自己可以删除,如/tmp

1
2
wangjia3@CHJ-20190520VPS:/$ ls -ld /tmp
drwxrwxrwt 1 root root 4096 Aug 3 13:50 /tmp

注意在其他位有一个t,这样就可以防止自己创建的文件被其他的普通用户修改或删除

设置特殊权限

使用的也是 chmod命令,用法与上述修改权限用法一致,只不过多了由三位数变为了四位数,第一位为特殊权限的表示数字

特殊权限数字表示:

  • 4 SET UID
1
2
3
4
5
6
7
8
9
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
----rw---- 1 wangjia3 wangjia3 0 Aug 3 12:35 demoFile

root@CHJ-20190520VPS:/tmp/testdir# chmod 4644 demoFile

root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rwSr--r-- 1 wangjia3 wangjia3 0 Aug 3 12:35 demoFile
  • 1 SET BIT
1
2
3
4
root@CHJ-20190520VPS:/tmp/testdir# chmod 1644 demoFile
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rw-r--r-T 1 wangjia3 wangjia3 0 Aug 3 12:35 demoFile
  • 2 SET GID
1
2
3
4
root@CHJ-20190520VPS:/tmp/testdir# chmod 2644 demoFile
root@CHJ-20190520VPS:/tmp/testdir# ls -l
total 0
-rw-r-Sr-- 1 wangjia3 wangjia3 0 Aug 3 12:35 demoFile

注意特殊权限一般不要去自己随便指定,使用系统默认就行

最后更新: 2019年08月03日 14:13

原始链接: https://jjw-story.github.io/2019/08/03/文件及目录权限/

× 请我吃糖~
打赏二维码