文件所有权和访问权限
4. 文件所有权和访问权限
4.1 概述
在Linux系统中,每一个文件或目录都有拥有者(文件属主),都属于某个或某些组(文件属组)。
Linux给文件设定了一定的访问权限,分三级权限:
- 文件所有者、
- 与文件所有者同组的用户、
- 其他用户。
对文件的访问主要是三种处理操作:读取、写入和执行。
4.2 普通文件的所有权和访问权限
文件三种访问身份:是指对文件有三种访问身份:
user owner:文件拥有者,文件属主;group owner:文件属组;other owner:不属于前两种的用户访问者;
文件权限:是一种限制用户对文件操作的规则,Linux系统中文件访问权限通常分为三类:
r:可读,可以使用类似cat等命令查看文件内容;w:可写,修改文件内容;x:可执行,executable,可以在命令提示符下当作命令提交给内核运行;
4.3 Linux目录的所有权和访问权限
目录三种访问身份:是指对目录也有三种访问身份:
user owner:目录拥有者,目录属主;group owner:目录属组;other owner:不属于前两种的用户访问者;
目录权限:
r:可以对此目录执行ls以列出目录内容;w:可以在此目录创建、删除文件;x:可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息。
关于目录的读权限:
- 允许读取目录包含的内容,
- 如果只有读权限,而没有x权限,只能列出目录下的
文件或子目录名称,而不能查看其属性或者具体内容。
权限的八进制表示:
0000 ---:无权限1001 --x: 执行2010 -w-: 写3011 -wx: 写和执行4100 r--: 只读5101 r-x: 读和执行6110 rw-: 读写7111 rwx: 读写执行
#例如:
755:rwxr-xr-x
640:rw-r-----
660:rw-rw----
775:rwxrwxr-x
4.3 修改文件的所有权
Linux下有两个命令用于修改所有权:
- chgrp修改文件属组
- chown修改文件属主。
4.3.1 chgrp命令
chgrp命令:用来改变文件或目录所属的用户组。【使用者必须是超级用户】
- 组名:可以是用户组的ID,也可以是用户组的组名,但是要求组名必须在/etc/group文件中存在。
- 文件名:可以是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。
#一般格式:
chgrp [选项] 组名 文件名
#常用选项:
# -R 递归式地改变指定目录及其下面的所有子目录和文件的用户组
#示例:将/home/tianjunfeng/mu1及其子目录下的所有文件的用户组改为tianjunfeng3:
chgrp -R tianjunfeng3 /home/tianjunfeng/mu1
4.3.2 chown命令
chown命令:改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。【注意:只有超级用户才可以使用该命令。】
- 用户可以是用户或者是用户ID,
- 用户组可以是组名或组ID。
- 文件名可以使用由空格分开的文件列表,在文件名中可以包含通配符。
#一般格式:
chown [选项] 用户或组 文件名
chown [-R] 属主名:属组名 文件名
#选项:
# -R 递归式地改变指定目录及其所有子目录、文件的文件主。-v 详细列出该命令所做的工作。
#举例:
chown root /u #Change the owner of /u to “root”.
chown root:staff /u #Likewise, but also change its group to “staff”.
chown -hR root /u #Change the owner of /u and subfiles to “root”.
#示例:将目录/home/tianjunfeng/mu1及其下面的所有文件、子目录的文件主改成tianjunfeng4:
chown -R tianjunfeng4 /home/tianjunfeng/mu1
4.4 修改文件访问权限:chmod
chmod命令是非常重要的,用于改变文件或目录的访问权限。
该命令有两种用法:
- 一种是包含字母和操作符表达式的文字设定法;
- 另一种是包含数字的数字设定法。
4.4.1 文字设定法
#命令格式
chmod [who] [+ | - | = ] [mode] 文件名
命令中各选项的含义为:
- 操作对象who:可以是下述字母中的任一个或者它们的组合:
u表示“用户(user)”,即文件或目录的所有者。g表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。l表示“其他(others)用户”。a表示“所有(all)用户”。它是系统默认值。
- 操作符号可以是:
+添加某个权限。u取消某个权限。=赋予给定权限并取消其他所有权限(如果有的话)。
- 设置mode:所表示的权限可用下述字母的任意组合:
r可读。w可写。x可执行。X只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。s在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。t保存程序的文本到交换设备上。u与文件属主拥有一样的权限。g与和文件属主同组的用户拥有一样的权限。o与其他用户拥有一样的权限。
- 文件名:以空格分开的要改变权限的文件列表,支持通配符。
在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:
#使同组和其他用户对文件example 有读权限。
chmod g+r,o+r example
下面是一些具体例子:
-
例1:即设定文件1.txt的属性为:
chmod a+x 1.txt- 文件属主(u) 增加执行权限
- 与文件属主同组用户(g) 增加执行权限
- 其他用户(o) 增加执行权限
-
例2:即设定文件1.txt的属性为:
chmod ug+w,o-x 1.txt-
文件属主(u) 增加写权限
-
与文件属主同组用户(g) 增加写权限
-
其他用户(o) 删除执行权限
-
-
例3:将文件1.txt的执行权限删除,它设定的对象为所有使用者。
chmod a–x 1.txt chmod –x 1.txt chmod ugo–x 1.txt

4.4.2 数字设定法
我们必须首先了解用数字表示的属性的含义:
- 0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。
- 所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
#数字设定法的一般形式为:
chmod [mode] 文件名
-
例1:即设定文件2.txt的属性为:
$ chmod 644 2.txt $ ls –l -rw-r--r-- 1 tianjunfeng tianjunfeng 315 Jun 12 15:55 2.txt-
文件属主(u)tianjunfeng 拥有读、写权限
-
与文件属主同组人用户(g) 拥有读权限
-
其他人(o) 拥有读权限
-
-
例2:即设定wch.txt这个文件的属性为:
$ chmod 750 wch.txt $ ls –l -rwxr-x--- 1 tianjunfeng tianjunfeng 630 Jun 12 16:012 wch.txt-
文件主本人(u)tianjunfeng可读/可写/可执行权
-
与文件主同组人(g) 可读/可执行权
-
其他人(o) 没有任何权限
-
4.5 文件和目录默认权限
用户创建了一个文件或者目录,默认是什么权限呢?
- 这个跟环境掩码有关系,全局环境掩码是配置在/etc/profile里面。
- 用户可以在自己根目录下创建.bashrc文件写入umask xxx来设置私有掩码。
- 当然,也可以使用umask命令在当前终端设置掩码,不过下次登录后又会被重置了。
- 在命令行直接使用umask命令即可查看当前环境的掩码,umask xxxx可以临时更改当前环境的掩码。
#umask命令:指定在建立文件时预设的权限掩码。
#语法格式:
umask [-S][权限掩码]
补充说明:权限掩码有4个八进制位
- 第一位是所谓的guid,一般为0或者直接不写第1位,而使用3位的掩码。
- 将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
例如:系统创建目录默认拥有rwxrwxrwx权限,也就是777(八进制);Linux为了安全起见,不允许新建的文件带有x属性,系统创建文件默认拥有rw-rw-rw-权限,也就是666(八进制)。默认文件或目录权限与掩码做减法运算,就是用户创建文件或目录的最终默认权限。例如:掩码是022(或者0022),则新建目录的权限是755,也就是rwxr-xr-x;新建的文件权限是644,也就是rw-r--r--。下表显示了计算过程:
| 权限八进制 | 777 | 666 |
|---|---|---|
| 对应八进制转换成二进制 | 111111111 | 110110110 |
| 掩码(022八进制) | 000010010 | 000010010 |
| 减法运算结果(二进制) | 111101101 | 110100100 |
| 转成对应八进制 | 755 | 644 |
-
查看系统的umask值例子:
-
设置系统umask例子:umask -S
-
设置新的umask后,新建目录和文件并查看对于的权限变化例子:
-
关于umask掌握二个要点:
- 文件基数为666,目录基数为777,即文件不设x位,目录可设x位。
- chmod是设哪个位,那么哪个位就有权限;而umask是设哪个位,则哪个位上就没权限,只要记住umask是从权限中“拿走”相应的位即可。
总结
浙公网安备 33010602011771号