4.1 Linux文件权限模型

没有彻头彻尾的绝望。真正的成功,不是来自别人的认可和评价,而是由自我满足带来的满足宁静平和的心态,如果你在你自己力所能及的范围内,尽了最大的努力来改变你的现状,那就是你最大的成功!

1. 文件权限——认证、授权、审计

-10位权限

rwxrwrwx
左三位:定义user(owner)的权限,属主权限
中三位:定义group的权限,属组权限
有三位:定义other的权限,其他的权限
第一位:文件类型

进程对文件的访问权限应用模型:
进程的属主与文件的属主是否相同。
如果相同,则应用属主权限;否则去检查金证的属于是否属于文件的属组;
如果是,则应用属组权限,否则,就只能引用other权限。

权限
r:readable,可读
w:writable,可写
x:executble,可执行

文件
r:可获取文件的数据
w:可修改文件的数据
x:可将此文件运行为进程

目录
r:可使用ls命令获取旗下的所有文件列表
w:可修改次目录下的文件列表,即创建或删除文件
x:可cd值此目录中,且可使用ll来获取到所有文件详细属性信息

权限组合机制:

目录 描述
--- 二进制000 十进制0
--x 二进制001 十进制1
-w- 二进制010 十进制2
-wx 二进制011 十进制3
r-- 二进制100 十进制4
r-x 二进制101 十进制5
rw- 二进制110 十进制6
rwx 二进制111 十进制7

2.更改文件的权限

文件的属主或者root可以使用chmod命令对文件的权限进行更改。

2.1 修改三类用户(user, group and other)的权限:

  1. 比如我们想让文件a对三类用户都具有读写和执行权限,可以使用以下命令,

    chmod 777 a #最高权限

  1. 我们新建一个文件b,它的权限是-rw-rw-r--.,我们想让a的权限变得和b一样,可以使用--reference选项:

    chmod –reference=b a

  1. 假如我们想改变某个目录和目录下所有文件的权限,可以使用-R选项,如test目录下有两个文件,它们的权限为:
  1. 我们使用chmod –R来改变test文件夹的权限,然后查看test下的文件

chmod –R 755 test

结果显示文件的权限也都变成了755。

2.2 修改某类用户或某些用户的权限:

如果我们想要修改某类用户的权限,可以使用chmod u=rwx file类似的格式。
例如我们只想把a文件属主的权限改为可读,其他不变,可以使用以下命令:

chmod u=r a

类似的,我们改变属主和属组的权限为rwx,可以使用以下命令:

chmod ug=rwx a

2.3 修改某类用户的某位权限:

我们还可以修改某类用户的某位权限,比如我们想要去除group的执行权限,则

chmod g-x a

我们再把group的执行权限加上,则

chmod g+x a

我们可以使用类似的命令改变属主或者其他用户的某一位或多位的权限。

2.4 更改文件的属主和属组

管理员可以更改某个文件的属主,使用chown命令。

chown: 改变文件属主
格式:chown USERNAME file,...
-R:递归修改目录及其内部文件的属主;
--reference=/path/to/somefilefile,... :将文件属主属组信息设置为与指定文件一致;

例如:a文件本来属于sxy,我们想把它的属主变为sxy1,则可以使用以下命令:

chown sxy1 a

若要同时改变属主属组,可以使用下列格式的命令:

chown USERNAME:GRPNAME file...
例如:我们将a文件的属主改为sxy1,属组改为sxy1,则使用以下命令:

1.三种写法都改属主属组;
chown sxy1:sxy1 a
chown sxy1.sxy1 a
chgrp sxy1 a
chgrp可以单独改变文件属组,用法与chown类似。

2.:右边   ,只修改属组
chown :sxy1 a

3.递归 -R 修改文件夹中文件的属主与属组;
chown -R tom hi.dir/

4.--reference=/path/to/somefilefile,... :将文件属主属组信息设置为与指定文件一致

5. getfacl/setfacl 用户控制

getfacl issue 访问控制列表

--------------------------------------
(learn) [root@Centos7 dell]# getfacl data
# file: data
# owner: dell
# group: dell
user::rwx
group::rwx
other::r-x

setdacl -m 添加用户组
setfacl -m g:user1:rw issue
(learn) [root@Centos7 dell]# getfacl issue
user::rw-
user::user1:rw-
group::r--
group::user1:rw-
other::r-x

setfacl -x g:user1 issue  删除用户组
setfacl -x g:user1 issue
(learn) [root@Centos7 dell]# getfacl issue
user::rw-
user::user1:rw-
group::r--
other::r-x

getfacl和setfacl
getfacl命令可以显示文件的名称、用户所有者、组群所有者和访问控制列表。
setfacl可以设置文件或目录的访问控制列表,当我们需要对文件进行批量更改权限时可以使用这两个命令。

3. 文件系统的特殊权限

Linux里文件和目录有r、w、x这三个读、写、执行的权限。但有时还会在权限里看到s和t,例如:


特殊权限s\t

s和t是Linux里的特殊权限,具体有SUID、SGID、SBIT三种;

SUID

当s出现在文件所有者的x权限上时,就被称为Set UID,简称SUID。例如前言中的/usr/bin/passwd文件,它的权限状态是:-rwsr-xr-x 1 root root。

SUID具体的功能和限制是:

  1. SUID权限仅对二进制程序有效;
  2. 执行者对于该程序需要具有x的可执行权限;
  3. 本权限仅在执行改程序的过程中有效;执行者将具有该程序的拥有者(owner)权限;

举例来说,Linux里所有的账号和密码都记录在/etc/shadow文件里,这个文件的权限是:-rw-r----- 1 root shadow。但我们的一般用户修改密码时(passwd命令)必然会变动该文件的内容,而一般用户又不具有该文件的修改权限,那是怎么修改成功的呢?这就是SUID的功能了。

因为一般用户对于passwd(/usr/bin/passwd)都是有执行权限的;而passwd的拥有者(owner)是root账号;又因为passwd的拥有者具有s权限;所以一般用户执行passwd的过程中会获得passwd的拥有者的权限(即root权限);因此/etc/shadow可被一般用户所执行的passwd修改。

通过上面这个例子相信大家就能够理解SUID的作用了。

  1. 另外需要注意的是,SUID仅可用在二进制程序上,不能用着shell脚本上。因为shell脚本也只是将很多的二进制文件调用执行而已。所以SUID的权限部分,还是得看shell脚本调用进来的程序的设置。
  2. 此外,SUID对于目录是无效的
SGID
  • 当s标记在文件拥有者的x上时为SUID,那s标记在用户组的x上时则称为Set GID,简称SGID。例如:

  • 和SUID不同的是,SGID对于文件和目录都有效

对文件来说,SGID有如下功能:

  1. SGID对二进制程序有用;
  2. 程序执行者对于该程序来说,需具备x的权限;
  3. 执行者在执行过程中将会获得该程序用户组的支持;
  • 举例来说,/usr/bin/locatec程序依赖/var/lib/mlocate/mlocate.db文件的内容;而一般用户对于mlocate.db没有任何权限;但在执行/usr/bin/locate程序时,一般用户会获得mlocate用户组的支持;因此就能够去读取mlocate.db文件。

  • 目录来说,SGID有如下功能:
  1. 用户若对于此目录具有r和x的权限,则能够进入此目录;
  2. 用户在此目录下的有效用户组(effective group)将会变成该目录的用户组;
  3. 若用户在此目录下具有w的权限,则用户创建的新文件的用户组和此目录的用户组相同;
  • SGID用于目录时,一般用来搭建同一用户组下所有用户都有最大权限,且不许其他人进行查阅的“共同开发目录”。例如:

    image
  • 为什么一定要用SGID权限呢,直接把用户组改成project不可以实现这个效果么?答案是无法实现。因为默认文件的所有者和所属组都是文件的创建者,除非收到修改文件所属组,否则project组下的workerb用户,只会有r权限,没有w权限。演示如下:

    image
SBIT
  • 当t标记在目录权限的x上时为SBIT。
  • SBIT(Sticky Bit)只对目录有效,对文件没有效果。

SBIT对目录的作用是:

  1. 当用户对于此目录具有w、x权限时;
  2. 当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件;
  • 也就是说,当一个用户对目录A具有了w权限,即代表该用户可对目录A内的任何文件和子目录进行删除、重命名、移动等操作。但如果目录A有了SBIT权限,则该用户只能对自己创建的子目录和文件进行删除、重命名、移动等,而无法对别人的文件进行这些操作。以/tmp目录为例,演示如下:

SUID/SGID/SBIT权限设置

我们知道可以用类似chmod 755 dir这样的数字权限表示法来修改目录或文件的r、w、x权限,对于特殊权限这个方法也是适用的,只需要在现有的三位数字前再加上一位数字。三个特殊权限的数字表示分别为:

SUID:4 SGID:2 SBIT:1

  • 演示如下:

  • 此外,字符表示法对特殊权限也是适用的。演示如下:

    image
  • 最后还有一点需要注意的是,s和t都是加在x权限位置上的,也就是说具有x权限是s和t权限的前提。如果在没有x权限的情况下加了s或t权限,则会显示大写的S或T,表示“空的”,也不会有任何效果的:

你可能感兴趣的:(4.1 Linux文件权限模型)