Linux 文件权限
Linux 系统中,用户分为三种:文件拥有者 (User/Owner),群组 (Group),其它人 (Others),对同一个文件/文件夹,不用的身份的用户对于文件的权限也不同。本文将从这三类用户出发,介绍他们的特点和Linux文件权限。
一、使用者与群组
初次接触 Linux,随便随表敲敲命令,有时候就会出现错误:Permission deny,这就是出现了文件权限不够的情况。而要了解文件权限,我们先从 Linux 的三类用户说起。
1.1 文件拥有者(User/Owner)
文件拥有者就是创建了文件的那个用户,由于Linux是个多人多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生。
如果你在主机里存了一封准备发送给你喜欢的女生的情书,你当然不希望别人偷看啦,这个时候你可以把文件权限设为只有文件拥有者,也就是你才可以 Read / Write 这个文件,就可以保证别人都看不到它了。
1.2 群组(Group)
群组在团队开发中扮演者非常重要的角色。举个例子:
宋兵甲,炮灰乙两个人需要一起开发同一项目 Project1,则可以让他们两人都加入一个群组 Group1,然后 Project1 的文件权限为 Group1 的成员开放;流氓丙,土匪丁两个人一起开发项目 Project2,让他们两个人加入同一群组 Group2,然后 Project2 的文件权限为 Group2 的成员开放。
这个时候,Group1,Group2 仅仅能够访问自己的 Project,没法去别人的项目那里捣乱,整个开发井井有条。而你是上帝,你需要同时监控两组项目的情况,这时候你可以同时加入 Group1 和 Group2,这样的话两个项目都对你开放了。
1.3 其它人(Others)
任何不是文件拥有着和不在文件群组里的用户都叫做 “其它人”,从上面的例子来说,流氓丙对于 Project1 来说,就是个“其它人”。一般来说,其它人对于一个文件所拥有的权限是最低的。
做一个类比:
假设你有个室友,你和他住在同一个房子的两个房间里,你拥有你的房间,即使是你的哥哥,他也不能随随便便进来翻你的抽屉,因为你是这个房间的拥有者。
你和室友共用同一个客厅,你们都可以跑到客厅里看个电视,在冰箱里拿拿饮料喝水,这个时候,你和哥哥组成一个群组,你们共同享有客厅。
最后,大街上的那些其它人,别说到你的房间来了,就连客厅都进不来。除非他和你或者你舍友成了好朋友,加入你们的群组,否则永远进不了你们房子的门。
1.4 root
当然,Linux 系统中,真的有一个上帝般的存在,它就是 root,他可以到达任何他想要去的地方,看到任何想看的东西,包括你昨晚写的那封情书~ 通常情况下,我们可以用 sudo 指令 来执行一些 root 命令。
二、文件权限
首先我们要了解一个指令: ls,这个指令表示查看目录下的所有非隐藏文件。我们键入 ls -al 查看目录下文件的详细信息:
-rwxr-xr-- 1 qyb225 qyb225 42304 10月 11 21:12 A.txt
-rwxr-xr-- 1 qyb225 qyb225 1024 10月 11 21:12 B.txt
2.1 查看权限
我们取任意一行来讲解:
-rwxrw-r-- 1 qyb225 qyb225 0 10月 11 21:12 A.txt
-rwxr-xr--: 这 10 个字符表示的是文件权限。
其它的字段依次向后表示:连接数,文件拥有着,群组,文件大小,最后修改日期,文件名。
再把表示权限的十个字符分为 1 + 3 + 3 + 3 四段:
- | rwx | r-x | r--
- 只有一个字符的第一段表示档案类型
- 第二段表示文件拥有者所拥有的权限
- 第三段表示文件群组拥有的权限
- 第四段表示其它人所拥有的权限
每段的三个位置分别对应了按照 rwx 排列的三个权限:
- r: read 读权限
- w: write 写权限
- x: 执行文件权限
如果该位置字段为 ’-‘, 则该类用户无此权限。还是以上面的 -rwxr-xr-- 为例:
忽略第一个 - ,我们看到三类用户分别对应:
用户 | 权限字符 | 权限 |
---|---|---|
文件拥有者 | rwx | 有读、写、执行权限 |
群组 | r-x | 有读、执行权限,无写权限 |
其它人 | r-- | 有读权限,无写、执行权限 |
2.2 改变文件属性与权限
我们知道文件权限对于一个系统的安全重要性,也知道文件的权限对于使用者与群组的相关性, 那么如何修改一个文件的属性与权限呢?
我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:
- chgrp:改变文件所属群组
- chown:改变文件拥有者
- chmod:改变文件的权限, SUID, SGID, SBIT等等的特性
2.2.1 chgrp
改变群组很简单,只需要 chgrp 命令即可,也就是 change group 的简写。注意你将修改的群组必须在 /etc/group 文件中。
//命令:
$ chgrp [-R] group_name file_name
//示例:
$ sudo chgrp users A.txt
$ ls -l
总用量 0
-rwxr-xr-- 1 qyb225 users 0 10月 11 21:12 A.txt
-rwxr-xr-- 1 qyb225 qyb225 0 10月 11 21:12 B.txt
2.2.2 chown
改变文件拥有者和改变群组几乎相同,命令式 chown,也就是 change owner 的简写。要注意的是, 用户必须是已经存在系统中的账号,也就是在 /etc/passwd 这个文件中有纪录的用户名称才能改变。
//命令:
$ chown [-R] user_name file_name
//示例:
$ sudo chown bin A.txt
$ ls -l
总用量 0
-rwxr-xr-- 1 bin users 0 10月 11 21:12 A.txt
-rwxr-xr-- 1 qyb225 qyb225 0 10月 11 21:12 B.txt
探讨一个小问题,改变文件的拥有者和群组到底有什么用呢?比如一个用处就是在复制文件的时候:比如你想把一个文件复制给 bin 这个使用者,但是复制出的文件的拥有者是你自己,这样 bin 就可能没法查看修改文件,这个时候就需要改一下文件拥有者啦。
2.2.3 chmod
chmod 用于改变文件的权限,共有两种方式。
(1) 数字类型改变权限
在数字类型中,r, w, x 三个字母分别对应了数字 4, 2, 1。
然后拿出三类用户的权限,假设分别为 rwx, r-x, r–。只需要将对应的数字加起来即可:
- rwx = 4 + 2 + 1 = 7
- r-x = 4 + 0 + 1 = 5
- r-- = 4 + 0 + 0 = 4
所以 rwxr-xr-- 的数字表示为:754
根据这个修改文件权限,比如想把 A.txt 的文件权限修改为 rwxrwxr-x:
$ sudo chmod 775 A.txt
$ ls -l
总用量 0
-rwxrwxr-x 1 bin users 0 10月 11 21:12 A.txt
-rwxr-xr-- 1 qyb225 qyb225 0 10月 11 21:12 B.txt
(2) 符号类型改变权限
符号类型修改方法用 u(User), g(Group), o(Others) 三个字母表示文件拥有着,群组和其它人。根据不用的命令,使用 +, -, = 来为不同的用户增加 / 删除 / 修改权限。
$ sudo chmod ugo=wrx A.txt
$ ls -l
总用量 0
-rwxrwxrwx 1 bin users 0 10月 11 21:12 A.txt
-rw-rw-r-- 1 qyb225 qyb225 0 10月 11 21:12 B.txt
$ sudo chmod g-w,o-wx A.txt
$ ls -l
总用量 0
-rwxr-xr-- 1 bin users 0 10月 11 21:12 A.txt
-rwxr-xr-- 1 qyb225 qyb225 0 10月 11 21:12 B.txt
$ sudo chmod g+w,o+x B.txt
$ ls -l
总用量 0
-rwxr-xr-- 1 bin users 0 10月 11 21:12 A.txt
-rwxrwxr-x 1 qyb225 qyb225 0 10月 11 21:12 B.txt