一、用户所有者,组所有者,权限
linux中每个文件都有三个属性,允许用户控制文件的访问方式。
当建立一个文件时,当前用户就是这个文件的用户所有者(也就是说这个文件是哪个用户建立的),组所有者就是这个用户的主要组,一般和用户同名。普通用户不能更改文件用户所有者,但可以更改组所有者(比如之前学习的newgrp可以定义主要组)。
文件的权限定义了三个不同极别的用户如何使用这个文件:
二、三种权限
通过上图我们知道用户所有者,组所有者,其它人都对文件有着不同的权限设置,其中每组权限分为rwx,被标记 “-” 的表示这组权限中没有这个权限。比如 rw- 表示没有x权限。
标记 | 权限 | 说明 |
---|---|---|
r | 读 | 对于文件表示可以读取文件的内容,对于文件夹表示可以浏览目录中的文件列表 |
w | 写 | 对于文件表示可以修改文件的内容,对于文件夹表示可以创建和删除文件 |
x | 执行 | 对于文件表示可以执行(类似于windows的exe文件),对于文件夹表示可以进入此文件夹中。 |
三、三种访问级别
每个文件都有三组不同的读,写,执行权限,分别用于文件所有者(u),组所有者(g)和其它人(o)。
当有人访问一个文件时,系统会按如下顺序访问:
- 当前用户是文件所有者吗? 如果是启用用户权限。
- 当前用户是组所有者的成员吗? 如果是启用组权限。
- 如果前面两者都不是启用其它权限。
(一)其它人的权限测试
cclove@home:~$ echo "hello" > /tmp/abc.txt
cclove@home:~$ su - linux
密码:
$ echo "hello" >> /tmp/abc.txt
-su: 1: cannot create /tmp/abc.txt: Permission denied
$ ls -l /tmp/abc.txt
-rw-r--r-- 1 cclove cclove 6 7月 14 18:57 /tmp/abc.txt
我们先用cclove用户创建文件/tmp/abc.txt,之后切换到linux用户,追加字符串到/tmp/abc.txt文件中,但发现没有权限。 之后我们用ls -l查看一下,发现其它人只能读,不能写,所以不能修改人家的文件。
(二)共同组成员的权限测试
首先我们查看一下abc.txt文件的组所有者权限是读和写,这说明只要是cclove组的成员就可以修改abc.txt。 之后我们切换到linux通过id查看一下,发现linux用户的次要组有cclove,这说明linux在cclove这个组中,对这个文件有修改权限。
这里要注意一下,老陌通过修改/etc/group文件:
cclove : x : 1000 : linux
把linux放到cclove最后一个字段,表示这个用户属于cclove组,如果有多个用户,用逗号分隔。
(三)符号链接文件的权限
链接文件就是创建的快捷方式,这里link_abc.txt是abc.txt的快捷方式。我们发现权限是rwxrwxrwx,但实际上它链接到abc.txt,所以权限同abc.txt。
四、修改文件权限
chmod ugoa +-= rwx filename
缩写 | 说明 |
---|---|
u | 用户所有者 |
g | 组所有者 |
o | 其它人 |
a | 以上三组(所有) |
+ | 增加权限 |
- | 减去权限 |
= | 设置权限 |
r | 读 |
w | 写 |
x | 执行 |
例:
给文件abc.txt 用户所有者添加x权限,组所有者添加w权限,其它人去掉r权限。
五、修改文件的组所有者
之前老陌通过newgrp临时修改用户的主要组,之后创建文件则以修改后的组为准,但是如果已经创建文件了就无能为力了。
我们需要用chgrp来修改(change group):
chgrp GROUP file……
此命令的作用是将文件的组所有者改成GROUP,可以一次性修改多个文件。
只有文件的所有者才能更改文件的所属组,而且这个用户必须是新组的成员。
通过上图我们来分析一下:
先创建文件file,查看他的组所有者是laomo, 之后查看文件所有者用户的次要组都有谁,查看之后用chgrp修改file的组所有者为netdev,之后再查看成功。
最后修改file的组所有者为music失败,因为laomo用户不是music组成员,所以修改不了。如果非要改可以用管理员账号改。
六、修改文件的用户所有者
这个需要管理来操作,普通用户没有权限修改。
chown USER file……
将文件的用户所有者改成USER。
通过上图我们来分析一下:
首先查看文件的用户所有者是laomo,之后我们用chown修改成me用户(me是老陌新创建的用户),注意要以管理员权限修改, 再次查看文件的所有者已经变成了me。