我想让 /ts 引用 ~/.local/ts,而无需 root/admin 权限?

我想让 /ts 引用 ~/.local/ts,而无需 root/admin 权限?

假设:

  • 我在 Linux 机器上使用 ubuntu 发行版。
  • 我没有 root/admin 权限——只是一个标准用户。
  • 我主要使用 bash shell。
  • 该目录/ts已存在。我对此目录只有只读权限。

当我通过 ssh 进入这台 Linux 机器时,我想要/ts引用~/.local/ts。例如,给定以下目录/文件结构:

/
├── ts
|    └── A.sh
├── home
     └── rtetteh
            └── .local
                   └── ts
                        └── B.sh

当我执行时,ls /ts我希望看到B.sh。当我执行时,cd /ts我希望处于~/.local/ts

不仅限于上面的例子,我想在所有场景中/ts参考。~/.local/ts我只想为自己实现这一点。我不想改变此 Linux 服务器上其他用户的任何行为。

我做了一些研究,发现mount --bind这需要 root/admin 权限,而且我确信这种特定技术也会影响其他用户,这不是我想要的。我还看到了一些相关内容,bindfs但还不太确定,仍在研究中。

答案1

你想要的可以通过利用内核命名空间功能在我看来,如果你从头开始重新创建文件系统命名空间,这需要一些管道……不过,幸运的是,有一个来自软件包的工具bubblewrap可以很容易地做到这一点:

包裹是容器设置的特权助手。您不太可能直接从命令行使用它,尽管这是可能的。

它的工作原理是创建一个新的、完全空的文件系统命名空间,其中根位于主机不可见的 tmpfs 上,并且当最后一个进程退出时会自动清理。然后,您可以使用命令行选项来构建根文件系统和进程环境,以便在命名空间中运行命令。

所以:

bwrap --die-with-parent --bind / / --dev-bind /dev /dev --bind /home/rtetteh/.local/ts /ts -- /bin/bash

是最小例子(照我看来) 做你想做的事...阅读手册并根据需要使用更多选项扩展该示例,例如--setenv VAR VALUE在需要时设置环境变量。

如果您需要添加更多绑定挂载,那么您可以在最后一个之前--以...的形式添加它们--bind SRC DEST。并且您将始终需要它们--bind / / --dev-bind /dev /dev,所以不要删除或修改它们。

不用说,您不能使用诸如或...等系统目录/etc作为/bin其他/var目录的目标挂载点,否则您新创建的文件系统命名空间将变得不稳定并且可能无法使用。

这不会影响其他用户或系统服务,只会影响新创建的文件系统命名空间。

相关内容