特殊权限 SUID、SGID、Sticky

一. 前提

本篇主要讲解SUID, SGID, Sticky三个权限的基本原理和应用.

为什么要使用特殊权限?

比如系统中假如有超过四类人然而每一类人都需要一种独特权限.只有三种独特权限的基础权限系统就会明显不够用.

特殊权限可以扩展系统基础权限的功能,使得linux权限更加强大灵活.

在理解特殊权限之前,需要先具备几个关于安全上下文的认知:

前提:进程有属主和属组;文件有属主和属组;

(1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限;

(2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组;

(3) 进程访问文件时的权限,取决于进程的发起者:

(a) 进程的发起者,同文件的属主:则应用文件属主权限;

(b) 进程的发起者,属于文件的属组;则应用文件属组权限;

(c) 应用文件“其它”权限;

二. SUID

  1. 权限设定方法:
    1. 字母表示法:

chmod u+s FILE...

chmod u-s FILE...

  1. 数字表示法:

chmod 4755 FILE 添加SUID权限到二进制程序文件(添加到DIR无意义)

在普通三位数字权限位之前,用4代表添加的SUID位

chmod 0xxx .... 可以删除文件的SUID(无法删除目录的SUID)

  1. 文件权限表示:

# ll f1

-rwsr-xr-x. 1 root root 0 Nov 17 20:18 f1

文件属主的x权限,用s代替.表示被设置了SUID

如果属主位没有x权限,会显示为大写S,表示有故障(权限无效)

  1. SUID相关说明:
    1. 启动为进程之后,其进程的属主为原程序文件的属主;
    2. 只能作用在二进制程序上,不能作用在脚本上,且设置在目录上无意义 ;
    3. 执行suid权限的程序时,此用户将继承此程序的所有者权限;
  1. SUID工作原理
  1. 环境前提:
    1. linux中有一个二进制程序cat,属主属组均为root
    2. linux中有一个系统文件/etc/shadow,属主属组均为root
    3. 我们创建一个普通用户叫user1
    4. user1具有对cat的执行权限
    5. user1 不具有对/etc/shadow的任何权限
  1. 默认情况下
    1. user1执行cat,系统创建一个cat进程,进程的属主属组取程序发起者,也就是user1:user1
    2. cat进程访问/etc/shadow,由于进程属主属组是user1:user1,与/etc/shadow的属组属主都不匹配,所以被拒绝访问.
  1. 给cat设置SUID之后
    1. user1执行cat.系统创建一个cat进程,进程的属主取cat的属主,属组取程序发起者,就是root:user1
    2. cat进程访问/etc/shadow,由于进程属主是root,与/etc/shadow的属主匹配,所以被允许访问.
  1. 举例说明:

passwd命令是linux系统中用来修改密码的命令.系统中所有用户都可以使用.而passwd命令改密码的行为是通过修改/etc/shadow文件来实现.

看一下/etc/shadow的文件权限:

# ll /etc/shadow

----------. 1 root root 1771 Nov 16 17:06 /etc/shadow

可见/etc/shadow对普通用户没有任何权限.

所以普通用户默认无法使用文本编辑器打开或者编辑这个文件.

那为什么通过passwd这个命令就可以编辑呢?

用ls命令查看passwd命令的源文件信息:

# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 30768 2月  22 2012 /usr/bin/passwd

我们发现passwd这个程序的属主位的执行位不是x而是s,说明passwd被设置了特殊权限SUID.

于是普通用户运行passwd命令,系统创建的passwd进程的属主由默认为"程序发起者"变为了passwd的属主.而passwd的属主是root,所以普通用户其实是在用root的权限修改/etc/shadow文件.最后passwd命令执行结束,passwd进程被关闭.

  1. 做个实验:

给命令vim添加SUID,可以让普通用户自己把自己变为超级用户.

看一下vim的原权限

# ll /usr/bin/vim

-rwxr-xr-x. 1 root root 2289640 Aug  2 08:45 /usr/bin/vim

给vim加个SUID

# chmod u+s /usr/bin/vim

权限变为

-rwsr-xr-x. 1 root root 2289640 Aug  2 08:45 /usr/bin/vim

现在用普通用户登录

su quintin

尝试使用vim编辑系统账户文件/etc/passwd

$ vim /etc/passwd

找到自己的用户名一行

修改第三列自己的uid为0

root的uid不用改.

然后保存,提示只读文件,使用w!强制保存,成功!

我们知道普通用户quintin对vim是有执行权限的,而对/etc/passwd则没有编辑权限.

通常情况下quintin启动vim后,系统会创建一个以当前用户quintin为属主属组的vim进程,此时vim进程的属主属组为quintin:quintin,由于无论是属主还是属组都不具有对/etc/passwd的编辑权限,所以这个vim进程无权编辑/etc/passwd.

而给/usr/bin/vim设置了SUID之后,quintin或任何用户启动vim程序时,系统创建的vim进程的属主则是取了/usr/bin/vim这个程序文件自身的属主root,所以此时vim进程的属主属组为root:quintin. 系统检查发现正好匹配了/etc/passwd的属主,于是放行vim进程.

其他文本编辑器同理.

退出vim并重新登陆quintin帐户

这时发现命令提示符已完全变为root,而且系统认为我就是root

因为linux只通过uid判断超级管理员,而quintin帐户把自己的uid变成了超级管理员一样的0,所以重新登陆之后,quintin具有了root的身份.

测试:

找一个属主属组都为root且other位无w的文件

# ll /app/f11

-rw-r--r--.  1 root root   0 Nov 17 20:18 f11

改个名字

# mv f11 f1

成功.

三.  SGID

  1. 权限设定方法:
    1. 字母表示法

chmod g+s DIR/FILE...

chmod g-s DIR/FILE...

  1. 数字表示法 :

chmod 2755  DIR/FILE 添加SGID到目录或文件

在普通数字权限位前,用2代表添加SGID位

chmod 0755 DIR/FILE 删除文件的SGID,(目录不受影响)

chmod 755 DIR/FILE 同上

  1. 文件权限表示:

# ll /app/f1

-rwxr-sr-x. 1 root root 0 Nov 17 20:18 /app/f1

文件属组的x权限,用s代替.表示被设置了SGID

如果属组位没有x权限,会显示为大写S,表示有故障(权限无效)

  1. SGID相关说明:
    1. 作用在二进制程序上时:

执行sgid权限的程序时,此用户将继承此程序的所属组权限

  1. 作用于目录上时:

此文件夹下所有用户新建文件都自动继承此目录的用户组.

  1. SGID实例:
    1. 作用在二进制程序上时,原理同SUID,只是由user位变为group位.
    2. 作用于目录上时演示:

普通帐户quintin在/tmp中创建一个目录叫quintindir,添加SGID.权限777

$ chmod 2777 quintindir/

$ ll -d quintindir/

drwxrwsrwx. 2 quintin quintin 6 Nov 18 14:42 quintindir/

切换到普通用户user1,在quintindir目录中创建一个文件和一个目录

$ touch user1file

$ mkdir user1dir

$ ll

-rw-rw-r--. 1 user1 quintin 0 Nov 18 14:47 user1file

drwxrwsr-x. 2 user1 quintin 6 Nov 18 14:47 user1dir

结果显示,user1在quintindir目录下创建的文件和目录都自动继承了quintindir的属组

而且新目录的权限也继承了SGID.

所以设定了SGID的目录中的所有新建文件和目录都会自动属于quintin组.

四. Sticky 粘滞位

  1. 权限设定方法:
    1. 字母表示法:

chmod o+t DIR...

chmod o-t DIR...

chmod +t DIR...

  1. 数字表示法:

chmod 1755 DIR

在普通数字权限位前,用1代表添加Sticky位

  1. 文件权限表示:

# ll -d tmp

drwxrwxrwt. 2 root root 19 Nov 17 20:02 tmp

文件other位的x权限,用t代替.表示被设置了Sticky

如果other位没有x权限,会显示为大写T,表示有故障(权限无效)

  1. Sticky相关说明:
    1. 对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除和改名自己的文件或目录;
    2. 只能作用在目录上.普通文件设置无意义,且会被linux内核忽略
    3. 用户在设置Sticky权限的目录下新建的目录不会自动继承Sticky权限
  1. Sticky实例:
  1. 目的:

我希望在系统中创建一个很多用户可以共同使用的目录,但是要求用户之间不能互相删除改变对方的文件.

  1. 实现:

root用户先创建一个777权限目录/app/tmp

普通用户quintin和wang分别在其中创建几个文件和目录

这时候有个问题,就是目录中的任何用户都可以随意删除其他人的文件.

所以root要给/tmp这个文件夹设定一个Sticky位.

# chmod 1777 tmp

# ll -d tmp

drwxrwxrwt. 5 root root 97 Nov 20 00:49 tmp

设定完毕可见目录tmp的other权限中的x位已经显示为t.说明已设定成功.

  1. 测试

切换到quintin用户,进入/app/tmp目录

尝试删除或改名用户wang的文件或目录

改名文件

[[email protected] /app/tmp]$ mv wangf1 aaa

mv: cannot move ‘wangf1’ to ‘aaa’: Operation not permitted

改名目录

[[email protected] /app/tmp]$ mv wangd1 bbb

mv: cannot move ‘wangd1’ to ‘bbb’: Operation not permitted

移动文件

[[email protected] /app/tmp]$ mv wangf1 qdir1/

mv: cannot move ‘wangf1’ to ‘qdir1/wangf1’: Operation not permitted

删除文件

[[email protected] /app/tmp]$ rm -f wangf1

rm: cannot remove ‘wangf1’: Operation not permitted

删除目录

[[email protected] /app/tmp]$ rm -f wangf1

rm: cannot remove ‘wangf1’: Operation not permitted

以上所有操作均提示Operation not permitted,表明Sticky权限已发挥作用.

  1. 提示:

普通用户在设定了Sticky位的目录下创建的子目录不会继承这个Sticky权限,所以要注意设定好自己目录的权限.

五. 总结:

  1. 作用范围及功能:
    1. SUID:作用于文件(二进制程序)

此用户将继承此程序的所有者权限

  1. SGID:作用于文件(二进制程序)和目录
    1. 对于文件:

此用户将继承此程序的所属组权限.

  1. 对于目录:

此文件夹下所有用户新建文件都自动继承此目录的用户组.

  1. Sticky:作用于目录

设定后,目录中的用户只能删除、移动或改名自己的文件或目录


二进制文件


目录


SUID


此用户将继承此程序的所有者权限


无意义


SGID


此用户将继承此程序的所属组权限


此目录下所有用户新建文件都自动继承此目录的用户组


Sticky


无意义


目录中每个用户仅能删除、移动或改名自己的文件或目录

  1. 添加权限方法及注意事项:
  1. 字母权限法很灵活,无论目录还是文件都可以随意添加删除超级权限

chmod u+s ... 添加SUID

chmod g+s ... 添加SGID

chmod +s ...同时添加SUID和SGID

chmod -s ...同时删除SUID和SGID

chmod o+t ...添加Sticky

chmod +t ...同上

  1. 数字权限表示法添加/删除时:
    1. 数字权限法可以同时删除文件的所有三种超级权限

chmod 0755 FILE

chmod  755 FILE

  1. 数字权限法只能删除目录的Sticky.不能删除目录的SUID和SGID.
  2. 数字权限法每次只能设置一种超级权限.添加权限时:

对于文件,会删除掉原有的其他超级权限.

对于目录,添加SUID或SGID时,Sticky会被删除.

  1. 所有表示为大写字母的权限均为无效(故障)权限,因为缺少了相应的x权限.
  1. 几个权限位映射参考:

SUID: user, 占据属主的执行权限位;

s: 属主拥有x权限

S:属主没有x权限

SGID: group,  占据group的执行权限位;

s: group拥有x权限

S:group没有x权限

Sticky: other, 占据ohter的执行权限位;

t: other拥有x权限

T:other没有x权限

时间: 2024-10-05 15:02:09

特殊权限 SUID、SGID、Sticky的相关文章

Linux文件系统上的特殊权限      SUID, SGID, Sticky(粘之位)

每个人都有自己的梦想,我想把它写出来. Linux文件系统上的特殊权限 SUID, SGID, Sticky(粘之位) 1 文件基本权限 r读, w写, x执行 user, group, other 2 安全上下文 前提:进程有属主和属组:文件有属主和属组: (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限: (2) 启动为进程之后,其进程的属主为发起者:进程的属组为发起者所属的组: (3) 进程访问文件时的权限,取决于进程的发起者: (a) 进程的发起者,同

linux系统上的特殊权限SUID,SGID,STICKY

特殊权限:SUID SGID STICKY linux的安全上下文: 1.进程以用户的身份运行,进程是发起此用户的代理,因此以此用户的身份和权限完成所有的操作. 2.权限匹配模型: 1)判断进程的属主,是否以被访问的文件属主.如果是,则应用属主权限,否则进入第2步. 2)判断进程的属主,是否属于被访问的文件属组.如果是,则应用属组的权限,否则进入第3步. 3)应用other的权限. SUID: 默认情况下,用户发起的进程,进程的属主是其发起者,因此,其以发起者的身份在运行. SUID的功用:用户

文件的特殊权限:suid sgid sticky

一.文件的特殊权限:suid    展示于文件属主的执行权限位:    如果属主本来有执行权限,则展示为s:否则,展示为S; 功用:对于一个可执行文件来讲,任何用户运行此程序为进程时,进程的属主不再是发起者本人,而可执行程序文件自己的属主: 管理文件SUID权限的方法:        chmod u+|-s FILE... [[email protected] ~]# useradd fedora [[email protected] ~]# cp /bin/cat /var/tmp/ [[em

Linux系统上的特殊权限SUID,SGID,STICKY以及额外权限管理工具facl命令

Linux系统上的特殊权限 特殊权限:SUID, SGID, STICKY 安全上下文: 1.进程以某用户的身份运行:进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作: 2.权限匹配模型: (1) 判断进程的属主,是否为被访问的文件属主:如果是,则应用属主的权限:否则进入第2步: (2) 判断进程的属主,是否属于被访问的文件属组:如果是,则应用属组的权限:否则进入第3步: (3) 应用other的权限: SUID: 默认情况下:用户发起的进程,进程的属主是其发起者:因此,其以发起

文件特殊权限 SUID,SGID,Sticky 笔记

SUID : 运行某程序时 , 相应进程的属主是程序文件自身的属主,而不是启动者 chmod u+s FILENAME  (添加 SUID 权限)      chmod u-s FILENAME  (除去 SUID 权限) 如果 FILE 本身原来就有执行权限,则 SUID 显示为 s ; 否则显示 S; passwd 命令默认具有 SUID 权限 SGID : 运行某程序时 , 相应进程的属组是程序文件自身的属组,而不是启动者 (目录有SGID权限后,在该目录下创建文件目录时,创建后的属组为目

特殊权限-SUID,SGID,Sticky 学习笔记

SUID : 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者 chmod u+s FILENAME  (添加 SUID 权限)      chmod u-s FILENAME  (除去 SUID 权限) 如果 FILE 本身原来就有执行权限,则 SUID 显示为 s ; 否则显示 S; passwd 命令默认具有 SUID 权限 SGID : 运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者 (目录有SGID权限后,在该目录下创建文件目录时,创建后的属组为目录自身的

特殊权限SUID,SGID,Sticky

SUID属性 SUID属性属性只能运用在可执行文件上,当其他用户执行该文件时,临时拥有该文件所有者的权限.典型的有passwd文件,因为SUID属性,所以一般用户在使用passwd修改命令时,临时拥有了passwd的拥有者root的权限.使用命令"ls -l "或"ll"查看文件时,如果如果可执行文件所有者权限的第三位是一个小写的"s"就表明该执行文件拥有SUID属性. [[email protected]~]# ls -l /etc/passw

特殊权限:SUID,SGID,Sticky

特殊权限passwd:s SUID: 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者:    chmod u+s FILE    chmod u-s FILE        如果FILE本身原来就有执行权限,则SUID显示为s:否则显示S:SGID: 运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组:    chmod g+s FILE    chmod g-s FILE        develop team, hadoop, hbase, hive 

linux的权限管理以及特殊权限SUID,SGID,Sticky

一切皆文件是linux重要的哲学思想之一,用户通过帐号密码登录系统以获得系统的使用权,在系统内部是通过UID来唯一标识一个用户,那么一个用户是否可以去访问或者使用某个文件资源,就取决于该用户是否有对应的权限. 在linux系统上,使用ls -l选项可以看见每一个文件的权限都分为三段,分别对应文件属主,属组,其它.权限位由r,w,x(读写执行)组成. 权限匹配流程:首先检查执行操作的用户是不是文件的属主,如果是,就应用文件属主 的权限.否则就检查用户是不是文件属组中的用户,最后就应用其它用户持用

【Linux】文件特殊权限 SUID/SGID/Sticky Bit

linux中除了常见的读(r).写(w).执行(x)权限以外,还有3个特殊的权限,分别是setuid.setgid和stick bit 1.setuid.setgid 先看个实例,查看你的/usr/bin/passwd 与/etc/passwd文件的权限 [[email protected] ~]# ls -l /usr/bin/passwd /etc/passwd-rw-r--r-- 1 root root 1549 08-19 13:54 /etc/passwd-rwsr-xr-x 1 ro