文件权限类型一般有10个字符,比如上图的 drwxr-xr-x
第一个字符表示这是目录、文件或链接文件等。
(1)当为[ d ]时表示目录
(2)当为[ - ]时表示文件
(3)当为[ | ]时表示链接文件
(4)当为[ b ]时表示设备文件里的可供存储的周边设备(可按块随机读写的设备)
(5)当为[ c ]时表示设备文件里的串行端口设备(键盘、鼠标等)
接下来的字符中,以三个为一组,且均为【rwx】三个参数的组合。
如果没有权限,就会出现[ - ]号。
其中
[ r ] 代表可读(read):可读取文件内容
[ w ] 代表可写(write):可以修改文件内容,但是不能删除该文件
[ x ] 代表可执行(execute):可以执行该文件
第一组表示文件拥有者的权限,第二组表示用户组的权限,
第三组表示其它人权限(既不是拥有者也不是用户组成员)。
举个例子:
test1的权限为-rw-r–r--,第一个字符[ - ]表示这是一个文件:
[ rw- ]为文件拥有者的权限,表示可读可写。
[ r-- ]为用户组权限,表示可读。
[ r-- ]为其它人的权限,表示可读。
chgrp [ -R ] dirname/filename …
-R:递归修改,连同子目录下的文件一起修改。
注意:要修改的组名必须在/etc/group文件中存在才行,否则会显示错误。
如图,test1文件的用户组变成了czy。
chown [ -R ] 用户名称 文件/目录
chown [ -R ] 用户名称:用户组 文件/目录
-R:递归修改,连同子目录下的文件一起修改。
注意:用户必须是已经存在于系统中的账号才能修改。
如图,通过chown修改了test1文件的拥有者,chown还可以顺便修改所属用户组:
chmod [ -R ] xyz 文件/目录
-xyz : 数字属性
-R:递归修改,连同子目录下的文件一起修改。
权限的设置方法有两种,分别可以使用数字或者符号来进行权限的修改。
(1) 数字类型修改文件权限
我们可以使用数字来表示各个权限,各权限的数字对照表如下:
r :4
w :2
x :1
当权限为[ -rwxr-xr-- ]用数字表示则是
owner = rwx = 4+2+1 = 7
group = r-x = 4+1 = 5
others = r-- = 4+0+0 = 4
所以该文件的权限数字就是754
假如我们要把test1的所有权限开启,那么应该这样:
(2)符号类型修改文件权限
我们可以使用 u,g,o 来代表三种身份,此外 a 则表示全部的身份。
假如我们要设置文件的权限为-rwxr-xr–,那么可以这样:
如果我不知道test1的文件属性,而我想要让每个人都能修改test1,那么可以这样:
[ r ] : 当你具有读取一个目录的权限时,表示你可以查询该目录下的文件名数据,所以你可以 利用ls命令显示目录列表。
[ w ] :当你对目录具有w的权限时,表示你可以建立新文件/目录,移动文件/目录或者删除文件/ 目录(无论该文件的权限是什么)。
[ x ] :目录的x权限代表用户能否进入该目录。
能不能进入某一个目录,只和该目录的x权限有关。
如果你在某目下不具有x的权限,那么你就无法切换到该目录下,也就无法执行该目录下的任何命令,即使你具有该目录r或w的权限。
要开放目录给任何人浏览时,至少也要给予r和x的权限,但w的权限不能随便给。
例如:在用户家目录下新建test2文件,权限为-rw-r-----,那么问题来了,当前用户czy能否删除这个文件?
首先分析一下,用户czy对test2来说属于其它人,因此对test2文件不具有任何权限,理应不能删除test2,但是因为test2文件在它的家目录下,用户czy在此目录下具有rwx的完整权限,所以它也能够删除test2文件。
如图,用户czy正确地删除了test2文件。
umask 就是指定目前用户在建立文件或目录时候的权限默认值
范例1:获取umask的值
0022?为什么这里会有四个数字,其实第一位是特殊权限,我们稍后再讲
注意:umask的数字指的是该默认值需要减掉的权限
比如,因为umask为022,所以user并没有被拿掉任何权限,而group和others的权限被拿掉了2(也就是w这个权限)
当建立文件时(默认权限为-rw-rw-rw-):
(-rw-rw-rw-) - (-----w–w-) ==> -rw-r–r--
当新建目录时(默认权限为drwxrwxrwx):
(drwxrwxrwx) - (d----w–w-) ==> drwxr-xr-x
a :当设置a之后,该文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置该属性
i :当设置i之后,该文件将不能被删除、改名、也无法写入或新增数据,只有root才能设置该属性
范例1:新建test2文件,并加入i的参数,尝试删除看看:
范例2:该文件的i属性取消
-a :将隐藏文件的属性也显示出来
-d :如果接的是目录,仅列出目录本身属性而非目录内的文件名
-R :连同子目录的数据一并列出来
当s出现在文件拥有者的x权限上时,此时就有称为SUID的特殊权限
SUID的功能:
- SUID权限仅对二进制程序有效
- 执行者对于该程序需要具有x的可执行权限
- 本权限仅在执行该程序的过程中有效
- 执行者将具有该程序拥有者的权限
举个例子,我们的Linux系统中,所有账号的密码都记录在/etc/shadow这个文件里面,该文件的权限为【-r-------- 1 root root】,意思就是该文件仅有root可读且仅有root可以强制写入而已。既然该文件只有root可以修改,那为什么当前用户czy可以通过passwd命令去修改文件内的密码?这就是SUID的功能。借此我们可以知道:
1.czy对于/usr/bin/passwd 这个程序来说具有x的权限,表示czy能够执行passwd
2.passwd的拥有者是root
3.czy执行passwd的过程中,会暂时获得root的权限
4./etc/shadow可以被czy所执行的passwd修改
那么如果使用cat去读取/etc/shadow时,它能够读取吗?
因为cat不具有SUID的权限,所以是不能读取的。
注意:SUID对目录无效
当s出现在用户组的x权限上时则称为SGID
SGID的功能:
- SGID对二进制程序有用
- 程序执行者对于该程序需具备x的权限
- 执行者在执行的过程中会获得该程序用户组的权限
举个例子:
-rwx–s--x 1 root slocate … /usr/bin/locate
-rw-r----- 1 root slocate … /var/lib/mlocate/mlocate.db
若我使用czy这个账号去执行locate时i,那czy将会取得slocate用户组的权限,因此就能够去读取mlocate.db文件
注意:SGID也能够用在目录上
当一个目录设置了SGID的权限后,它将具有如下功能:
- 用户若对此目录具有r与x的权限时,该用户能够进入此目录
- 用户若在此目录下的有效用户组将会变成该目录的用户组
- 若用户在此目录下具有w的权限,则用户所建立的新文件,该新文件的用户组与此目录的用户组相同
SBIT只针对目录有效,SBIT对于目录的作用是:
- 当用户对于此目录具有w、x权限时,即具有写入的权限
- 当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除该文件
换句话说:当甲这个用户对于A目录具有w的权限时,表示甲可以对该目录内任何人建立的文件或目录均可进行删除、更名、移动等操作。不过,如果将A目录加上了SBIT的权限时,则甲只能够对自己建立的文件或目录进行删除、更名、移动等操作,而无法删除其它人的文件
/tmp权限为drwxrwxrwt,表示任何人都可以在/tmp内新增、修改文件,当仅有文件拥有者和root能够删除自己的目录或文件
在表示权限的三个数字前加上一个数字来代表特殊权限
SUID:4
SGID:2
SBIT:1