23.文件特殊权限之SUID权限、SGID权限、Sticky BIT权限和ACL权限

目录

1.SUID权限 

2.SGID权限

3.Sticky BIT权限

4.ACL权限 

在多用户多任务的Linux系统里,每个进程的运行都与运行的用户和组相关联。除了进程识别号(PID)以外,每个进程还有另外4个用户和用户组相关的识别号。他们分别是:实际用户识别号(RUID)、实际组识别号(RGID)、有效用 户识别号(EUID)、有效组识别号(EGID)。EUID和EGID的作用在于确定一个进程对其访问的文件的权限和优先权。一般情况下, EUID、EGID与RUID和RGID相同。设置了SUID和SGID情况除外。

1.SUID权限 

当一个具有执行权限的文件设置SUID权限后,用户执行这个文件时将以文件所有者的身份执行。

特点:只有可以执行的二进制程序才能设定SUID权限

命令执行者要对该程序拥有x(执行)权

命令执行者在执行该程序时获得该程序文件属主的身份

SUID权限只在该程序执行过程中有效,就是说身份改变只在执行过程中有效。

可执行文件/usr/bin/passwd所属用户是root(UID为0),此文件被设置了SUID权限。当一个UID为1000、GID为1000的用户执行此命令时,产生的进程RUID和RGID分别是1000和 1000,EUID是0、EGID是1000。

user1用户登陆,取得了一个bash的shell类型。然后 执行passwd命令。在这个命令执行过程中,执行命令的身份被切换成了root用户。 在用户权限上 有一个s,这就是说明该文件设置了SUID权限。也就是说在普通用户在执 行passwd命令的时候是使用root的身份。

添加或删除SUID的命令格式为:

chmod u+s /usr/bin/passwd           #添加SUID权限

chmod u-s /usr/bin/passwd           #删除SUID权限

2.SGID权限

SGID权限的功能和SUID类似。如果某个二进制文件的用户组权限设置了SGID权限。则在执行该文件时,用户将获得该文件所属组的权限。 SGID可以针对文件生效,也可以针对目录生效。在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限

添加或删除SGID的命令格式为:

chmod g+s /usr/bin/passwd

chmod g-s /usr/bin/passwd

除了二进制程序之外,SGID也能用在目录上,这也是常见的用途。当一个目录设置了SGID的权限后它将具有如下功能: 用户在此目录下有效用户组将会变成该目录的用户组。若用户在此目录下具有w的权限,那么在创建新文件之后文件的所属组与目录的属组相同。

SGID针对文件: 

只有可执行的二进制程序才能设置SGID权限。

命令执行者要对该程序拥有x(执行)权限。

程序在执行过程中,程序的组会改变成程序文件的属组。

SGID权限同样只在该程序执行过程中有效,也就是说组身份的转变在程序执行过程中有效。

SGID针对目录: 

普通用户必须对此目录拥有r和x权限才能进入此目录。

普通用户在此目录中的有效组会变成此目录的属组。

普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组。 

3.Sticky BIT权限

sticky权限只能用于设置在目录上,设置了这种权限的目录,任何用户都可以在该目录中创建或修改文件,但只有该文件的创建者、目录的拥有者和root可以删除自己的文件。在RedHat或CentOS系统中/tmp目录就拥有sticky权限。

添加或删除

chmod o+t /tmp/            #添加SBIT权限

chmod o-t /tmp/            #删除SBIT权限

4.ACL权限 

ACL(access control list)访问控制列表,可以对单一的用户或者组设置对文件或目录的独立rwx权限。

开启ACL权限 

由于ACL是传统的Unix-like操作系统权限的额外支持项目,因此要使用ACL必须要有文件系统的支持才行。目前绝大部分的文件系统都支持ACL的功能,包括EXT3/EXT4,JFS,XFS等。ext系列:

文件系统查询命令格式:dumpe2fs -h 分区设备名称

命令:dumpe2fs -h  /dev/sad3

Default mount options;     #缺省挂载选项

假如没有开启ACL权限,手动开启分区ACL权限。

命令:mount -o remount ,acl/

此命令执行后是临时让/分区有ACL权限,重启后失效。若永久开启ACL需要修改配置文 件/etc/fstab文件:

xfs文件系统: xfs文件系统是centos7中默认使用的文件系统(旧版本通常为ext系列),XFS文件系统默认开启ACL权限。因为是不同的文件系统,所以查询的方式也并不相同:

命令:dmesg  |  grep  -i  “acl”

ACL权限的使用描述

实验:

第一步:创建一个目录。将目录的所属组进行修改,所有用户使用组权限进行创建文件

第二步:为了防止组用户之间相互删除或修改文件,使用SBIT权限对目录进行限制。最终使目录的权限为1770

第三步:防止组内的其他人查看自己的文件,文件创建者修改自己文件其他人权限为 0

第四步:创建一个特殊的用户,用来代替root用户对目录内文件进行查看修改。给该用户添加ACL权限。

setfacl 【选项】 {-m|-x} {u:username:rwx} 文件或目录

getfacl  目录名   :可以查看目录权限的详细信息

选项: -b          #删除所有ACL条目

-m         #添加ACL条目

-x         #删除指定用户的ACL权限

-R          #实现目录上的ACL权限递归 :对目录进行-R递归添加,就可以对目录下的所有文件生效。

-d            #设置默认ACL权限(对目录生效)对文件或目录进行-d设置,后续新生成的文件都会自动生效。

一般情况下setfacl   -mRd  u:username:rwx   文件或目录

注:删除的时候不能带权限:setfacl   -x  u:username  文件或目录

mask:在ACL权限里还有mask的相关设置,可以把mask理解为有效权限。它的意思就是 用户或组的权限必须要存在于mask的权限设置范围内才能生效。

(为test目录设置mask为r可读。再次查看发现ACL权限出现了变化。user1的ACL权限在 加上mask之后只有r权限。)

注:为/test/添加默认最大权限(mask)为r,其他ACL权限不得超出此权限。但mask的设置必须遵循最后设置原则,其他ACL权限设置完成后最后设置mask默认ACL才能正常生效。

在生产环境中我们通常将mask默认设置成rwx,然后针对不同的用户和用户组规定他们权限。

sudo命令 

而如果要切换的用户是root就要知道root的密码。在系统中root的权限是最大的,如果很多人都知道root密码以后那么是非常不安全的。为了避免这种情况我们还可以使用sudo命令,在使用sudo命令时只输入自己的密码即可。sudo的使用方式是在sudo后加上需要执行的命令。sudo执行流程如下:

1.当用户执行sudo时系统会在/etc/sudoers文件中查找该用户是否有执行sudo的权限。

2.若用户具有执行sudo的权限后,系统会让用户输入自己的密码来确认。

3.密码输入成功,开始进行sudo后续的命令。但root执行sudo不需要输入密码(如果切换的用户与执行者的身份相同也不用输入密码)。

因为在sudo执行的时候要去检查/etc/sudoers文件,所以先要对/etc/sudoers文件进行修改,让该账号能够使用全部或部分的root命令功能。(可以用visudo命令打开文件进行修改,在退出时如果有语法错误会提示)

 

(vim /etc/sudoers 添加user1的sudo权限)

格式为:用户账号    登录者的来源主机名=(可切换的身份)   可执行的命令  

所以上面两行的意思是:

1.用户账号:系统默认为root可以使用sudo命令。后添加user1用户。

2.可以被管理的服务器的网络地址,写自己或者ALL代表任何来源地址都可以管理本台服务器。

3.可切换身份:这个账号可以切换成什么身份来执行后续的命令。

4.可执行的命令:这个命令必须写绝对路径。

ALL:代表任何身份,任何主机,任何命令。

user用户权限接近与root的原因:

   %wheel  ALL=(ALL)  ALL   ,wheel是一个默认组,这个组内的成员默认使用sudo命令时转换成root用户执行所有命令的,而user1用户就在此组内。

添加授权组使用sudo命令:添加组的时候在组名添加%即可。之后保存退出

加!表示取反:user2  ALL=(ALL)   !/usr/bin/passwd root

sudo和su命令的组合使用:

 

这样可以让user1不知道root用户密码的情况下使用“sudo su - root”切换用户身份至root。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值