Linux—文件与目录权限

1、Linux文件属性

Linux—文件与目录权限_第1张图片

  • 文件权限类型一般有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-- ]为其它人的权限,表示可读。

2、修改文件属性与权限


(1) 修改所属用户组(chgrp)

chgrp [ -R ] dirname/filename …
-R:递归修改,连同子目录下的文件一起修改。

注意:要修改的组名必须在/etc/group文件中存在才行,否则会显示错误。
在这里插入图片描述
如图,test1文件的用户组变成了czy。


(2) 修改文件拥有者(chown)

chown [ -R ] 用户名称 文件/目录
chown [ -R ] 用户名称:用户组 文件/目录

-R:递归修改,连同子目录下的文件一起修改。

注意:用户必须是已经存在于系统中的账号才能修改。
在这里插入图片描述
如图,通过chown修改了test1文件的拥有者,chown还可以顺便修改所属用户组:
在这里插入图片描述

(3) 修改权限(chmod)

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,那么可以这样:
在这里插入图片描述

3、目录权限


那么r、w、x对目录有什么意义呢?

[ 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文件。

4、默认权限&隐藏属性


(1)文件默认权限:umask

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

让我们测试一下:
Linux—文件与目录权限_第2张图片
范例1:修改umask
在这里插入图片描述

(2)文件隐藏属性

1、chattr(配置文件隐藏属性)

a :当设置a之后,该文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置该属性
i :当设置i之后,该文件将不能被删除、改名、也无法写入或新增数据,只有root才能设置该属性

范例1:新建test2文件,并加入i的参数,尝试删除看看:
在这里插入图片描述
范例2:该文件的i属性取消
在这里插入图片描述

2、lsattr(显示文件隐藏属性)

-a :将隐藏文件的属性也显示出来
-d :如果接的是目录,仅列出目录本身属性而非目录内的文件名
-R :连同子目录的数据一并列出来

范例1:使用lsattr列出属性
在这里插入图片描述

5、文件特殊权限:SUID/SGID/SBIT


(1)SUID

当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对目录无效

(2)SGID

当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的权限,则用户所建立的新文件,该新文件的用户组与此目录的用户组相同

(3)SBIT

SBIT只针对目录有效,SBIT对于目录的作用是:

- 当用户对于此目录具有w、x权限时,即具有写入的权限
- 当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除该文件

换句话说:当甲这个用户对于A目录具有w的权限时,表示甲可以对该目录内任何人建立的文件或目录均可进行删除、更名、移动等操作。不过,如果将A目录加上了SBIT的权限时,则甲只能够对自己建立的文件或目录进行删除、更名、移动等操作,而无法删除其它人的文件

在这里插入图片描述
/tmp权限为drwxrwxrwt,表示任何人都可以在/tmp内新增、修改文件,当仅有文件拥有者和root能够删除自己的目录或文件

(4)SUID/SGID/SBIT权限设置

在表示权限的三个数字前加上一个数字来代表特殊权限

SUID:4
SGID:2
SBIT:1

范例1:将test1权限修改为【-rwsr-xr-x】
在这里插入图片描述

你可能感兴趣的:(Linux)