常规权限可以被SUIDSGID粘滞位(Sticky bit)等特殊权限覆盖。当您对文件使用特殊权限时,只有文件的所有者或组所有者才能操作该文件。

在某些情况下,您只希望所有者可以执行文件,那么SUIDSGID是最好的方法。

如果您想保护您的文件不被任何其他用户删除,那么请获得一个粘性位权限,这可以成为可共享空间中的救星。

目录

什么是 SUID?

简单来说,SUID是一种特殊权限,只有在您拥有文件时才允许您执行这些文件。 否则,您无法执行它。

当您只想限制对自己的权限时,这可能会很方便。最典型的例子是passwd命令,它具有 SUID 权限,因此,如何识别它的问题就出现了。

如果您想详细检查权限统计信息,请运行stat 命令或者您可以使用ls 命令

linuxmi@linuxmi:~/www.linuxmi.com$ stat /usr/bin/passwd 
linuxmi@linuxmi:~/www.linuxmi.com$ ls -l /usr/bin/passwd

输出如下:
 文件:/usr/bin/passwd
大小:68208 块:136 IO 块:4096 普通文件
设备:805h/2053d Inode:28843676 硬链接:1
权限:(4755/-rwsr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2021-12-07 18:51:04.827435882 +0800
最近更改:2021-07-15 06:08:18.000000000 +0800
最近改动:2021-07-24 20:19:58.576147880 +0800
创建时间:-创建时间:- Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-03-01 14:07:48.377112656 +0530
Modify: 2020-02-07 20:24:14.000000000 +0530
Change: 2021-10-30 19:29:05.076144777 +0530
 Birth: 2021-07-28 00:59:20.060264859 +0530

SUID可以由数字4“s”来标识,如果是可执行权限,则用“s”来标识,如果是非可执行权限,则用“S”来标识。

因为该passwd命令只能由当前登录用户执行,并限制您更改任何其他用户的密码,除非您是root用户。那么如何在系统上实现它呢?

linuxmi@linuxmi:~/www.linuxmi.com$ passwd mysql
输出如下
passwd:您不能查看或更改 mysql 的密码信息。

如何在文件上实现 SUID

要在文件上实现SUID非常简单,您只需使用代表SUID的第 4 位,或使用符号模式“s”

$ chmod 4XXX [FILE-NAME]
$ chmod u+s [FILE-NAME]

例如,我创建了一个应该执行 的 bash 脚本,并且没有其他用户可以执行,然后传递以下命令:

linuxmi@linuxmi:~/www.linuxmi.com$ chmod 4744 linuxmi.sh
linuxmi@linuxmi:~/www.linuxmi.com$ ls -l linuxmi.sh
输出如下:
-rwsr--r-- 1 linuxmi linuxmi 243 3月  11 21:15 linuxmi.sh

如何从文件中撤销 SUID

您只需传递以下命令即可简单地撤销SUID权限,该命令将不触及权限值的其余部分并从文件清除SUID 权限

命令语法:

$ chmod u-s [FILE-NAME]
linuxmi@linuxmi:~/www.linuxmi.com$ chmod u-s linuxmi.sh
linuxmi@linuxmi:~/www.linuxmi.com$ ls -l linuxmi.sh
输出如下:
-rwxr--r-- 1 linuxmi linuxmi 243 3月  11 21:15 linuxmi.sh

什么是SGID?

SUID适用于单个用户,如果您希望多个或多组用户可以执行文件,则使用类似于SUID 的SGID权限。

当组权限用“s”而不是“ x ”或“S”括起来时,您可以识别SGID 权限,如果它是不可执行的文件或位权限中的第二个。

为了检查,我们将在wall上运行以下命令,该命令用于向所有用户广播消息。

linuxmi@linuxmi:~/www.linuxmi.com$ stat /usr/bin/wall
  文件:/usr/bin/wall
  大小:35048     	块:72         IO 块:4096   普通文件
设备:805h/2053d	Inode:28845220    硬链接:1
权限:(2755/-rwxr-sr-x)  Uid:(    0/    root)   Gid:(    5/     tty)
最近访问:2022-02-12 12:11:30.000000000 +0800
最近更改:2022-02-07 21:33:35.000000000 +0800
最近改动:2022-02-12 12:11:32.378374082 +0800
创建时间:-
linuxmi@linuxmi:~/www.linuxmi.com$ ls -l /usr/bin/wall
-rwxr-sr-x 1 root tty 35048 2月   7 21:33 /usr/bin/wall

如何在文件上实现 SGUID

要在文件上实现GUID非常简单,您只需使用代表SUID的第 2 位,或使用符号模式“s”

$ chmod 2XXX [FILE-NAME]
$ chmod g+s [FILE-NAME]

我将使用以下命令将“linuxmi.sh”的权限修改为SGID :

linuxmi@linuxmi:~/www.linuxmi.com$ chmod 2755 linuxmi.sh
linuxmi@linuxmi:~/www.linuxmi.com$ ls -l linuxmi.sh
输出如下:
-rwxr-sr-x 1 linuxmi linuxmi 243 3月  11 21:15 linuxmi.sh

如何从文件中撤销 SGID

您可以参考以下命令语法从相应文件中删除 SGID,并运行ls-l以验证权限统计信息。

$ chmod g-s [FILE-NAME]
$ ls -l [FILE-NAME]

我将通过输入以下命令恢复为常规权限:

linuxmi@linuxmi:~/www.linuxmi.com$ chmod g-s linuxmi.sh
linuxmi@linuxmi:~/www.linuxmi.com$ ls -l linuxmi.sh
-rwxr-xr-x 1 linuxmi linuxmi 243 3月  11 21:15 linuxmi.sh

总结

关于Linux 中的 SUID 和 SGID 就这些了。

发表评论