Linux 文件权限

前言

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。

为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

Linux 文件属性

Linux 中,文件属性是一个字符串,它描述了文件的权限,文件的所有者,文件的所有者组,文件的其他用户的访问权限。

使用 ls -l 命令可以显示文件的属性:

1
2
3
4
5
6
7
8
root@emoryhuang:/# ls -l
total 970048
lrwxrwxrwx 1 root root 7 Nov 23 18:08 bin
drwxr-xr-x 18 root root 3880 Jan 12 08:46 dev
drwxr-xr-x 90 root root 4096 Jan 12 18:44 etc
drwxr-xr-x 5 root root 4096 Jan 12 21:29 home
-rw------- 1 root root 993249280 Nov 23 18:08 swapfile
...

可以发现,返回值共有 7 个部分:

权限 连结数 拥有者 用户组 文件容量 修改时间 文件名
drwxr-xr-x 18 root root 3880 Jan 12 08:46 dev

文件类型

每个文件的属性由左边第一部分的 10 个字符来确定, 其中 第 0 位 表示 文件类型

Linux 中文件可以分为 5 个类型:

字符 文件类型
d 目录
- 文件
l 符号链接
b 可供储存的接口设备
c 串行端口设备,如键盘、鼠标等

用户与用户组

  • 文件 拥有者 - user
  • 文件的拥有者所在 用户组 的其他成员 - group
  • 拥有者用户组 成员以外的其他用户 - others

对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。

同时,在 Linux 系统中,用户是按组分类的,一个用户属于一个或多个组。

文件所有者以外的用户又可以分为文件所属组的同组用户和其他用户。

文件权限是相对于这三类用户而言的,不同身份的用户可以具有不同的权限。

权限信息

考虑到用户的身份的不同,同样文件的权限信息也可以分为三类, 以三个为一组, 分别对应 拥有者, 用户组, 其他人 拥有的权限。

对于权限信息 rwxr-xr-x 来说, 拥有者 的权限为 rwx, 用户组其他人 的权限为 r-x

r, w, x 分别表示执行权限。

要注意的是,三个权限的位置不会改变,如果没有权限,就会用 - 字符表示。

改变文件属性与权限

  • chgrp: 修改文件所属用户组
  • chown: 修改文件拥有者
  • chmod: 改变文件的权限

修改文件所属用户组

1
2
3
4
5
6
7
8
chgrp [-R] 用户组名称 文件或目录


范例: 修改 install.log 所属用户组为 users

root@emoryhuang:/# chgrp users install.log
root@emoryhuang:/# ls -l
-rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log

-R: 递归更改文件属组, 就是在更改某个目录文件的属组时, 如果加上 -R 的参数,那么该目录下的所有文件的属组都会更改。

修改文件拥有者

1
2
3
4
5
6
7
8
9
chown [–R] 账号名称 文件或目录
chown [-R] 账号名称:组名 文件或目录


范例: 修改 install.log 拥有者为 bin

root@emoryhuang:/# chown bin install.log
root@emoryhuang:/# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log

修改文件权限

数字类型改变文件权限

我们可以使用数字来代表各个权限,各权限的分数对照表如下:

权限 分数
r 4
w 2
x 1

每种身份各自的三个权限分数是需要 累加 的,例如当权限为 rwxrwx--- 时,对应的分数为:

1
2
3
user   = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0

得到的文件权限数字也就为 770, 修改权限时就可以使用这个数字完成:

1
2
3
4
5
root@emoryhuang:/# ls -l .bashrc
-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc
root@emoryhuang:/# chmod 777 .bashrc
root@emoryhuang:/# ls -l .bashrc
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc

符号类型改变文件权限

还有一个改变权限的方法, 使用 u, g, o 来代表 user, group, others 的权限, a 则代表 all 亦即全部的身份。

命令 身份 操作 权限 对象
chmod u + (添加) r 文件或目录
g - (去除) w
o = (设定) x
a
1
2
3
4
5
6
7
8
9
10
11
范例: 修改 .bashrc 的 user 权限为 rwx, group 和 others 的权限为 r-x

root@emoryhuang:/# chmod u=rwx,go=rx .bashrc
root@emoryhuang:/# ls -l .bashrc
-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc

范例: 去除全部人的可执行权限

root@emoryhuang:/# chmod a-x .bashrc
root@emoryhuang:/# ls -al .bashrc
-rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc

参考资料