如何在挂载的文件系统上使用 chown

How to use chown on a mounted file system

我有一个根文件系统 RFS1,它有自己的组和用户,目前正被内核使用。我安装了另一个根文件系统 RFS2,它有自己的组和用户。如何在 RFS2 下的 file/directory 上 运行 chown 以从 RFS2 的 /etc/groups 下列出的组中创建所有者。 当 OS(linux) 使用 RFS1.

时,我正在执行 chown

既然你想把RFS2文件chown给一个RFS2用户,你不需要RFS1来chown,所以最直接的方法是chroot(1)

您安装 RFS2,例如在 /mnt/rfs2。然后按照指示 here.

chroot 进入目标 /mnt/rfs2

chroot 创建一个在 /mnt/rfs2 内被监禁的新进程。当该进程引用 / 时,OS 会将其翻译为 /mnt/rfs2。如果进程引用 /hello/world,OS 会将其翻译为 /mnt/rfs2/hello/world

如果 RFS2 有自己的用户,那么它就有自己的 /etc/passwd,并且可以假设它有自己的 /bin//usr/lib/

chroot 后,确保您的 PATH 与二进制文件的实际位置匹配。

在 chroot 监狱中,您执行的每个命令,例如 chown,都会在 PATH 中搜索。它可能会在 /bin/chown 中找到,但现在是 RFS2 的 /bin/chown(即 /mnt/rfs2/bin/chown),而不是 RFS1 的。 chown 可能使用的每个动态库也将来自 RFS2 文件系统。

当你chown user:group时,chown会搜索/etc/passwd/etc/group中的用户和组,但那是RFS2的密码和组文件。

完成后,您 运行 exitchroot 为您创建的被监禁的 shell 进程将退出。当这一切发生时,机器上的其余进程仍在使用 RFS1。