Last Updated on
对于多用户,多任务的Linux来说,文件和目录的权限管理非常重要。在Linux中目录是一种特殊的文件,这里将文件和目录统称为文件。
文件权限就是指对文件的访问控制,决定哪些用户,哪些组对文件具有哪种访问权限。
Linux将文件访问者身份分为3个类别:
- 所有者owner
- 所属组group
- 其他用户others
然后将访问权限,也分为3种:
- 读read
- 写write
- 执行execute
那么对文件权限管理,就包括这两个方面,即文件的访问者身份和不同身份对文件的访问权限。
1. 访问者身份
访问者身份分为上面的三种,所有者,所属组,其他用户,下面我们依次来简单说一下,
(1)所有者
每个文件都有它的所有者,默认情况下,文件的创建者即为其所有者,所有者对文件具有所有权,是一种特别权限。
只有root账户可以将文件的所有全转让给其他用户,使其对文件具有所有权,成为所有者。使用chown
命令可修改文件所有者
chown命令格式如:
chown [选项] [新所有者] 文件列表
示例: # 将文件test.txt的所有者改为user1 chown user1 test.txt # —R参数,递归改变整个test目录及子目录所有文件的所有者为user1 chown -R user1 test/
(2)所属组
这是指文件所有者所属的组,可为该组指定访问权限。默认情况下,文件创建者的主要组即为该文件的所属组。
root账户同样可以修改文件的所属组。使用chgrp
命令修改所属组,文件所有者用户也可以修改文件所属组,但是所有者用户必须是修改的目标所属组的组员,否则无法修改。
chgrp命令格式如下:
chgrp [选项] [新的所属组] 文件列表
示例: # 修改test.txt文件的所属组为group1 chgrp group1 test.txt # -R参数,通chwon,递归修改整个test目录及子目录所有文件的所属组为group1 chgrp -R group1 test/
(3)其他用户
其他用户就是指文件所有者和所属组之外的所有用户,可以授予最低级别的权限。
2. 访问权限
上面说了,访问权限有3种,读,写,执行,然后对于每一个访问者身份都有这3种权限。
文件的访问权限在文件属性中,通过ls -l
就可以查看到文件权限和属性。如下:
$ ls -l
-rw-r--r-- 1 root root 358 May 14 15:23 test.txt
如上,第一个root为文件的所有者,第二个root为文件的所属组。文件属性的第一个参数就是文件的权限:-rw-r--r--
这个就是文件权限,一共为10个字符,代表的意思如下:
- 第一个字符:文件类型
- 字符2-4:所有者权限
- 字符5-7:所属组权限
- 字符8-10:其他用户权限
第一个字符表示文件类型,常见的文件类型有:
- -:表示文件
- d:表示目录
- l:表示链接文件
- b:表示块设置文件
- c:表示字符设备文件
接下来的字符,以3个为一组,分别表示所有者,所属组,其他用户的权限,每一种访问者身份的3种访问权限依次用r,w,x
分别表示读,写,执行。这3种访问权限的位置不会变,如果没有此权限,则使用-
表示。
所以上面的文件权限:
-rw-r--r-- 1 root root 358 May 14 15:23 test.txt
理解为,这是一个文件,所有者的权限为rw,可读写。 所属组的权限为r,只读。其他用户的权限为r,只读。
此文件的所有者为root,所属组也为root。
3. 修改访问权限
root用户和文件所有者可以修改文件访问权限,使用命令chmod
来修改文件权限,格式为:
chmod [选项] [模式] 文件
同样,使用-R参数,可以递归修改整个目录及子目录的所有文件的访问权限。
文件权限可以用字符或者数字来表示。所以相对的,修改文件访问权限,也可以通过字符或者数字:
(1)通过字符修改权限
这时需要具体操作符号来修改权限,
-
+
:表示增加某种权限 -
-
:表示取消某种权限 -
=
:表示指定某种权限 -
u
:表示所有者 -
g
:表示所属组 -
o
:表示其他用户 -
a
:表示所有用户(即上面3种用户) -
r,w,x
:表示3种权限,读,写,执行
下面列举几个例子:
# 所属组增加写权限,其他用户增加读权限
chmod g+w,o+r test.txt
# 同时取消所属组和其他用户的读权限
chmod go-r test.txt
# 对所有用户的权限都设置为读和执行
chmod a=rx test.txt
# 对所有用户都增加执行权限
chmod +x test.txt
(2)通过数字修改权限
将3种权限,分别用数字进行表示:
- 4:表示读权限r
- 2:表示写权限w
- 1:表示执行权限x
每一类访问身份的权限用各项访问权限所对应的数字的和表示,依次为所有者,所属组,其他用户设置权限,使用3个数字表示这3个身份的权限。
比如:
644 :表示所有者为读写权限,所属组和其他用户为只读权限 754 : 表示所有者的权限为rwx,所属组的权限为rx,其他用户的权限为r
同样使用命令chmod
修改文件权限,示例如下:
# 修改文件的权限为,所有者为rwx,所属组为rw,其他用户为r。
chmod 764 test.txt
等同于
chmod u=rwx,g=rw,o=r test.txt
修改默认的访问权限
你会发现,我们创建文件时,并没有指定文件的权限,就会有一个默认的文件权限:
- 文件的默认权限为644
- 目录的默认权限为755
默认权限实际上是通过umask
(掩码)来实现的,该掩码用数字表示,实际上是文件权限码的“补码”,默认为022。
创建目录的最大权限为777,减去umask
的值022,就等于755,也就是创建文件时的默认权限。
由于文件创建时不能有执行权限,所有创建文件的最大权限为666,减去umask
的值022,就等于644,也就是创建文件的默认权限。
可使用umask
命令来查看和修改umask
的值:
# 查看当前的umask
$ umask
0022 # 最前面的0表示特殊权限,可忽略不看
# 临时修改umask为022,重新登录或者打开新的shell则失效。
$ umask 002
如果想永久修改umask
的值,可以修改/etc/profile
文件中关于umask
值的设置:
总结
Linux的文件权限管理就说到这里,这是Linux系统中的基础知识,作为运维人员是必须了解的。
除了这个基础的文件权限,还存在特殊权限(也叫隐藏权限),是比基础的文件权限更高一层的存在,很多病毒木马黑客等,入侵你服务器后,基本都会用到,详细请看《Linux 文件特殊权限》
有任何问题,欢迎留言
满满干货,学习了!!
1