Linux文件权限和访问模式
为了更加安全的存储文件,Linux为不同的文件赋予了不同的权限,每个文件都拥有下面三种
]权限
所有者权限u:文件所有者能够进行的操作
组权限g:文件所属用户组能够进行的操作
外部权限o:(其他权限):其他用户可以进行的操作。
查看文件权限
使用ls-l命令可以查看与文件权限相关的信息:
$ls-l/home/amrood
-rwxr-xr--1amroodusers1024Nov200:10myfile
drwxr-xr---1amroodusers1024Nov200:10mydir
第一列就包含了文件或目录的权限。
第一列的字符可以分为三组,每一组有三个,每个字符都代表不同的权限,分别为读取(r)、写入(w)和执行(x):
第一组字符(2-4)表示文件所有者的权限,-rwxr-xr--表示所有者拥有读取(r)、写入(w)和执行(x)的权限。
第二组字符(5-7)表示文件所属用户组的权限,-rwxr-xr--表示该组拥有读取(r)和执行(x)的权限,但没有写入权限。
第三组字符(8-10)表示所有其他用户的权限,rwxr-xr--表示其他用户只能读取(r)文件。
文件访问模式
文件权限是Linux系统的第一道安全防线,基本的权限有读取(r)、写入(w)和执行(x):
读取r:用户能够读取文件信息,查看文件内容。
写入w:用户可以编辑文件,可以向文件写入内容,也可以删除文件内容。
执行x:用户可以将文件作为程序来运行。
目录访问模式
目录的访问模式和文件类似,但是稍有不同:
读取r:用户可以查看目录中的文件
写入w:用户可以在当前目录中删除文件或创建文件
执行x:执行权限赋予用户遍历目录的权利,例如执行cd和ls命令。
改变权限
可以使用chmod(changemode)命令来改变文件或目录的访问权限,权限可以使用符号或数字来表示。
使用符号表示权限
对于初学者来说最简单的就是使用符号来改变文件或目录的权限,你可以增加(+)和删除(-)权限,也可以指定特定权限。
符号说明
+为文件或目录增加权限
-删除文件或目录的权限
=设置指定的权限
下面的例子将会修改testfile文件的权限:
$ls-ltestfile
-rwxrwxr--1amroodusers1024Nov200:10testfile
$chmodo+wxtestfile
$ls-ltestfile
-rwxrwxrwx1amroodusers1024Nov200:10testfile
$chmodu-xtestfile
$ls-ltestfile
-rw-rwxrwx1amroodusers1024Nov200:10testfile
$chmodg=rxtestfile
$ls-ltestfile
-rw-r-xrwx1amroodusers1024Nov200:10testfile
也可以同时使用多个符号:
$chmodo+wx,u-x,g=rxtestfile
$ls-ltestfile
-rw-r-xrwx1amroodusers1024Nov200:10testfile
使用数字表示权限
除了符号,也可以使用八进制数字来指定具体权限,如下表所示:
数字说明权限
0没有任何权限---
1执行权限--x
2写入权限-w-
3执行权限和写入权限:1(执行)+2(写入)=3-wx
4读取权限r--
5读取和执行权限:4(读取)+1(执行)=5r-x
6读取和写入权限:4(读取)+2(写入)=6rw-
7所有权限:4(读取)+2(写入)+1(执行)=7rwx
下面的例子,首先使用ls-1命令查看testfile文件的权限,然后使用chmod命令更改权限:
$ls-ltestfile
-rwxrwxr--1amroodusers1024Nov200:10testfile
$chmod755testfile
$ls-ltestfile
-rwxr-xr-x1amroodusers1024Nov200:10testfile
$chmod743testfile
$ls-ltestfile
-rwxr---wx1amroodusers1024Nov200:10testfile
$chmod043testfile
$ls-ltestfile
----r---wx1amroodusers1024Nov200:10testfile
更改所有者和用户组
在Linux中,每添加一个新用户,就会为它分配一个用户ID和群组ID,上面提到的文件权限也是基于用户和群组来分配的。
有两个命令可以改变文件的所有者或群组:
chown:chown命令是"changeowner"的缩写,用来改变文件的所有者。
chgrp:chgrp命令是"changegroup"的缩写,用来改变文件所在的群组。
chown命令用来更改文件所有者,其语法如下:
$chownuserfilelist
user可以是用户名或用户ID,例如
$chownamroodtestfile
$
将testfile文件的所有者改为amrood。
注意:超级用户root可以不受限制的更改文件的所有者和用户组,但是普通用户只能更改所有者是自己的文件或目录。
chgrp命令用来改变文件所属群组,其语法为:
$chgrpgroupfilelist
group可以是群组名或群组ID,例如
$chgrpspecialtestfile
$
将文件testfile的群组改为special。
SUID和SGID位
在Linux中,一些程序需要特殊权限才能完成用户指定的操作。
例如,用户的密码保存在/etc/shadow文件中,出于安全考虑,一般用户没有读取和写入的权限。但是当我们使用passwd命令来更改密码时,需要对/etc/shadow文件有写入权限。这就意味着,passwd程序必须要给我们一些特殊权限,才可以向/etc/shadow文件写入内容。
Linux通过给程序设置SUID(SetUserID)和SGID(SetGroupID)位来赋予普通用户特殊权限。当我们运行一个带有SUID位的程序时,就会继承该程序所有者的权限;如果程序不带SUID位,则会根据程序使用者的权限来运行。
SGID也是一样。一般情况下程序会根据你的组权限来运行,但是给程序设置SGID后,就会根据程序所在组的组权限运行。
如果程序设置了SUID位,就会在表示文件所有者可执行权限的位置上出现's'字母;同样,如果设置了SGID,就会在表示文件群组可执行权限的位置上出现's'字母。如下所示:
$ls-l/usr/bin/passwd
-r-sr-xr-x1rootbin19031Feb713:47/usr/bin/passwd*
$
上面第一列第四个字符不是'x'或'-',而是's',说明/usr/bin/passwd文件设置了SUID位,这时普通用户会以root用户的权限来执行passwd程序。
注意:小写字母's'说明文件所有者有执行权限(x),大写字母'S'说明程序所有者没有执行权限(x)。
如果在表示群组权限的位置上出现SGID位,那么也仅有三类用户可以删除该目录下的文件:目录所有者、文件所有者、超级用户root。
为一个目录设置SUID和SGID位可以使用下面的命令:
$chmodug+sdirname
$ls-l
drwsr-sr-x2rootroot4096Jun1906:45dirname
$