如何在linux上使用suid、sgid和sticky位

SUID、SGID和Sticky位是强大的特殊权限,您可以为Linux上的可执行文件和目录设置这些权限。我们将分享使用它们的好处和潜在的缺陷。...

SUID、SGID和Sticky位是强大的特殊权限,您可以为Linux上的可执行文件和目录设置这些权限。我们将分享使用它们的好处和潜在的缺陷。

它们已经在使用了

将安全性构建到多用户操作系统中会出现几个难题。以密码(看似)的基本概念为例。它们都必须存储起来,这样每次有人登录时,系统就可以将他键入的密码与存储的副本进行比较。显然,密码是王国的钥匙,必须加以保护。

在Linux上,存储的密码有两种保护方式:加密,只有具有root权限的人才能访问包含密码的文件。这听起来很好,但却带来了一个难题:如果只有拥有root权限的人才能访问存储的密码,那么那些没有该权限的人如何更改他们的密码?

提升你的地位

通常,Linux命令和程序运行时与启动程序的人具有相同的权限集。当root运行passwd命令以更改密码时,它将以root的权限运行。这意味着passwd命令可以自由访问/etc/shadow文件中存储的密码。

理想的方案是,系统中的任何人都可以启动passwd程序,但passwd程序保留root的提升权限。这样任何人都可以修改自己的密码。

上面的场景正是Set User ID位(SUID)所做的。它使用文件所有者的权限而不是启动程序的人的权限来运行程序和命令。

你在提升这个项目的地位

不过,还有一个困惑。必须防止此人干涉他人的密码。Linux采用了SUID方案,它允许它运行一组临时借用的权限的应用程序,但这只是安全性的一半。

防止某人使用他人密码的控制机制包含在passwd程序中,而不是操作系统和SUID方案中。

使用提升权限运行的程序如果不是以“设计安全”的心态创建的,可能会带来安全风险。这意味着安全是你考虑的第一件事,然后你就建立在这个基础上。不要写你的程序,然后试着给它一层安全的外衣。

开源软件的最大优势是你可以自己查看源代码或者参考可信的同行评审。在passwd程序的源代码中,有一些检查,因此可以查看运行该程序的人是否是root。如果某人是root用户(或使用sudo的人),则允许使用不同的功能。

这是检测是否有人是root用户的代码。

如何在linux上使用suid、sgid和sticky位

下面是一个考虑到这一点的例子。因为root可以更改任何密码,所以程序不必费心检查它通常执行的检查,以查看用户有权更改哪些密码。因此,对于root,它跳过这些检查并退出检查函数。

如何在linux上使用suid、sgid和sticky位

使用核心Linux命令和实用程序,您可以确信它们已经实现了安全性,并且代码已经被多次审阅。当然,总有未知的剥削威胁。但是,补丁或更新很快就会出现以对抗任**识别的漏洞。

它是第三方软件,尤其是任何非开源的软件,在使用SUID时需要格外小心。我们不是说不要这样做,但是,如果你这样做了,你要确保它不会让你的系统暴露在风险之下。你不想提升一个程序的特权,因为它不能正确地自治它自己和运行它的人。

使用suid的linux命令

以下是一些Linux命令,这些命令在由普通用户运行时使用SUID位授予命令提升的权限:

ls -l /bin/su ls -l /bin/ping ls -l /bin/mount ls -l /bin/umount ls -l /usr/bin/passwd

如何在linux上使用suid、sgid和sticky位

注意,文件名以红色高亮显示,表示已设置SUID位。

文件或目录上的权限通常由三组三个字符表示:rwx。它们代表读、写和执行。如果信件存在,则表示已获得许可。但是,如果出现连字符(-)而不是字母,则表示尚未授予该权限。

这些权限有三组(从左到右):文件所有者权限、文件组成员权限和其他权限。在文件上设置SUID位时,“s”表示所有者的执行权限。

如果在没有可执行功能的文件上设置SUID位,则大写的“S”表示这一点。

我们来看一个例子。普通用户dave键入passwd命令:

passwd

如何在linux上使用suid、sgid和sticky位

passwd命令提示dave输入新密码。我们可以使用ps命令查看运行进程的详细信息。

我们将在另一个终端窗口中使用ps和grep,并查找passwd进程。我们还将在ps中使用-e(每个进程)和-f(全格式)选项。

我们键入以下命令:

ps -e -f | grep passwd

如何在linux上使用suid、sgid和sticky位

报告了两行,其中第二行是grep进程,它在其中查找字符串为“passwd”的命令。不过,这是我们感兴趣的第一行,因为这是dave启动的passwd进程的第一行。

我们可以看到passwd进程的运行方式与root启动它时的运行方式相同。

设置suid位

用chmod很容易改变SUID位。u+s符号模式设置SUID位,u-s符号模式清除SUID位。

为了说明SUID位的一些概念,我们创建了一个名为htg的小程序。它位于dave用户的根目录中,并且没有SUID位。当它被执行时,它显示真实有效的用户id(UID)。

真正的UID属于启动程序的人。有效ID是程序运行时所使用的帐户,就像启动程序时所使用的帐户一样。

我们键入以下内容:

ls -lh htg ./htg

如何在linux上使用suid、sgid和sticky位

当我们运行程序的本地副本时,我们看到真实的和有效的id都被设置为dave。所以,它的行为就像一个正常的程序应该。

让我们将它复制到/usr/local/bin目录,以便其他人可以使用它。

我们键入以下命令,使用chmod设置SUID位,然后检查它是否已设置:

sudo cp htg /usr/local/bin sudo chmod u+s /usr/local/bin/htg ls -hl /usr/local/bin/htg

如何在linux上使用suid、sgid和sticky位

因此,复制程序,并设置SUID位。我们将再次运行它,但这次将运行/usr/local/bin文件夹中的副本:

htg

如何在linux上使用suid、sgid和sticky位

即使dave启动了这个程序,有效ID也被设置为root用户。因此,如果mary启动程序,同样的事情也会发生,如下所示:

htg

如何在linux上使用suid、sgid和sticky位

真实身份是玛丽,有效身份是根。程序以根用户的权限运行。

相关:如何在Linux上使用chmod命令

sgid位

Set Group ID(SGID)位与SUID位非常相似。在可执行文件上设置SGID位时,有效组被设置为该文件的组。进程使用文件组成员的权限运行,而不是使用启动它的人的权限。

我们调整了htg程序,这样它也显示了有效的组。我们将把htg程序组更改为用户mary的默认组mary。我们还将使用带有chown的美国和g+s符号模式来移除SUID位并设置SGID。

为此,我们键入以下内容:

sudo chown root:mary /usr/local/bin/htg sudo chmod u-s,g+s /usr/local/bin/htg ls -lh /usr/local/bin/htg

如何在linux上使用suid、sgid和sticky位

您可以在组权限中看到由“s”表示的SGID位。另外,请注意,组被设置为mary,文件名现在以黄色突出显示。

在我们运行程序之前,让我们确定dave和mary属于哪个组。我们将使用id命令和-G(groups)选项来打印所有组id。然后,我们将以dave的身份运行htg程序。

我们键入以下命令:

id -G dave id -G mary htg

如何在linux上使用suid、sgid和sticky位

mary的默认组ID是1001,htg程序的有效组是1001。因此,虽然它是由dave发起的,但它是在mary组成员的权限下运行的。就好像戴夫加入了玛丽组织一样。

让我们将SGID位应用到一个目录。首先,我们将创建一个名为“work”的目录,然后将其组更改为“geek”,然后在该目录上设置SGID位。

当我们使用ls检查目录的设置时,我们还将使用-d(directory)选项,以便查看目录的详细信息,而不是目录的内容。

我们键入以下命令:

sudo mkdir work sudo chown dave:geek work sudo chmod g+s work ls -lh -d work

如何在linux上使用suid、sgid和sticky位

设置SGID位和“geek”组。这些将影响在工作目录中创建的任何项。

我们键入以下内容以进入工作目录,创建一个名为“demo”的目录,并检查其属性:

cd work mkdir demo ls -lh -d demo

如何在linux上使用suid、sgid和sticky位

SGID位和“geek”组自动应用于“demo”目录。

让我们键入以下内容以使用touch命令创建文件并检查其属性:

touch useful.sh ls -lh useful.sh

如何在linux上使用suid、sgid和sticky位

新文件的组将自动设置为“geek”

相关:如何在Linux上使用chown命令

有点粘

粘性比特的名字来源于它的历史用途。在可执行文件上设置时,它会向操作系统标记可执行文件的文本部分应以交换方式保留,从而加快其重用速度。在Linux上,粘性位只影响目录,在文件上设置它是没有意义的。

在目录上设置粘滞位时,用户只能删除该目录中属于自己的文件。他们不能删除属于其他人的文件,无论对这些文件设置了哪种文件权限组合。

这允许您创建一个目录,每个人和他们启动的进程都可以用作共享文件存储。这些文件受到保护,因为,同样,没有人可以删除任何其他人的文件。

让我们创建一个名为“shared”的目录,我们将使用chmod的o+t符号模式来设置该目录的粘性位。然后我们将查看该目录上的权限,以及/tmp和/var/tmp目录。

我们键入以下命令:

mkdir shared sudo chmod o+t shared ls -lh -d shared ls -lh -d /tmp ls -lh -d /var/tmp

如何在linux上使用suid、sgid和sticky位

如果设置了粘滞位,则“其他”文件权限集的可执行位设置为“t”。文件名也以蓝色突出显示。

/tmp和/var/tmp文件夹是两个拥有为所有者、组和其他人设置的所有文件权限的目录示例(这就是它们以绿色突出显示的原因)。它们被用作临时文件的共享位置。

有了这些权限,理论上任何人都应该可以做任何事情。但是,粘性位会覆盖它们,任何人都不能删除不属于他的文件。

提醒

以下是我们上面所述内容的快速清单,以供将来参考:

  • SUID只对文件有效。
  • 您可以将SGID应用于目录和文件。
  • 只能对目录应用粘性位。
  • 如果“s”、“g”或“t”指示器以大写形式出现,则表示尚未设置可执行位(x)。

  • 发表于 2021-04-02 14:48
  • 阅读 ( 176 )
  • 分类:互联网

你可能感兴趣的文章

迟钝的(blunt)和粘端结扎术(sticky end ligation)的区别

...是钝性结扎和粘性结扎的区别。 R参考文献:1。限制性酶如何成为分子生物学的工作马〉,《国家科学院院刊》。国家Acad科学,n.d.Web。2017年4月12日。阿德南,阿姆纳。限制性酶在生物技术中的应用。N、 p.,N.d.网络。2017年4月12...

  • 发布于 2020-10-25 22:10
  • 阅读 ( 684 )

windows与linux:以下是它们的共同点

... 人们喜欢指着Windows,为这个功能或是这个功能是如何从Linux或Mac中被盗而哭泣。但是,微软在1985年就率先推出了一个Windows1.0的功能:Alt+Tab开关。 ...

  • 发布于 2021-03-14 16:05
  • 阅读 ( 287 )

如何使用windows subsystem for linux运行linux桌面

... 下面介绍如何使用Windows子系统在Windows中运行Linux桌面。 ...

  • 发布于 2021-03-18 04:14
  • 阅读 ( 234 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 288 )

为什么linux发行版会终止32位版本(这对您意味着什么)

... 软件必须知道如何与硬件通信,以便利用这一差异。因此,虽然32位版本的操作系统可以在64位PC上运行,但它不能利用所有额外的电源。另一方面,64位版本的操作系统根本不能在32位PC...

  • 发布于 2021-03-24 17:24
  • 阅读 ( 483 )

如何安装linux

...你不喜欢,只要重新启动,你就会回到Windows。下面介绍如何开始使用Linux。 选择一个linux发行版并下载它 首先,您需要选择要使用的Linux发行版。Linux发行版将Linux内核和其他软件打包成一个您可以使用的完整操作系统。不同的...

  • 发布于 2021-04-01 12:11
  • 阅读 ( 195 )

如何在linux上编写fstab文件

...是你在任何地方都看不到你的新硬盘。为什么没有出现?如何让Linux“看到”驱动器以便开始配置它? 实际上,Linux已经看到了您的硬件,但它并没有很快宣布它。或者给你一个提示,它已经找到了你的新硬件。您必须询问Linux...

  • 发布于 2021-04-03 00:45
  • 阅读 ( 157 )

如何在mac上创建和使用便签

macOS的Stickies应用程序为你的桌面提供了便签,把你的Mac变成了一个虚拟的公告板,让你记下一些简短的文字以便以后记住。笔记是特定于桌面的,所以你可以随意组织它们,即使关闭应用程序,它们也会保留它们的布局和内容...

  • 发布于 2021-04-04 05:40
  • 阅读 ( 244 )

如何在windows10上安装和使用linux bash shell

...令行应用程序都能正常工作,因为这个特性并不完美。 如何在windows10上安**ash 相关:如何知道我运行的是32位还是64位Windows? 此功能在32位版本的Windows 10上不起作用,因此请确保您使用的是64位版本的Windows。无论如何,如果你...

  • 发布于 2021-04-06 16:32
  • 阅读 ( 248 )

如何检查linux系统是32位还是64位

...是仅仅因为计算机支持它并不意味着它正在运行。下面是如何判断您运行的是32位还是64位版本的Linux。 相关:你应该使用32位还是64位的ubuntulinux? 在大多数情况下,我们建议运行64位版本的Linux。您将获得更好的性能和安全性。...

  • 发布于 2021-04-06 21:36
  • 阅读 ( 169 )
zlrh9970
zlrh9970

0 篇文章

相关推荐