如果您的系统足够新(例如RHEL 7)并且支持setnssyscall,则可以在安装名称空间的帮助下完成。需要根访问权限。
想法是为该进程创建一个单独的安装命名空间,然后在该命名空间内将其他文件或FIFO绑定安装,/dev/random以便该安装命名空间中的进程将从该绑定安装文件中读取数据。其他过程将看到常规/dev/random。
这是这样做的方法。
准备:运行以下命令以使所有这些工作人员都可以工作(由于默认情况下可能无法工作,请参阅此问题以获取详细信息)。
# mount --make-rprivate /
Run Code Online (Sandbox Code Playgroud)
现在,让我们创建一个在新的安装命名空间内运行的shell。
# unshare -m /bin/bash
Run Code Online (Sandbox Code Playgroud)
您有一个bash具有其自己的安装命名空间的新启动项。您可以从此shell内部和其他shell中比较以下命令的结果:
这个shell:
# ls -l /proc/self/ns/mnt
lrwxrwxrwx. 1 root root 0 Sep 26 16:06 /proc/self/ns/mnt -> mnt:[4026532148]
Run Code Online (Sandbox Code Playgroud)
其他外壳:
$ ls -l /proc/self/ns/mnt
lrwxrwxrwx. 1 ec2-user ec2-user 0 Sep 26 16:06 /proc/self/ns/mnt -> mnt:[4026531840]
Run Code Online (Sandbox Code Playgroud)
请注意,数字不同,因此这两个外壳程序位于不同的安装名称空间中,并且从第一个外壳程序执行的安装对于系统中的其他进程(该外壳程序的所有子代除外)将不可见。
现在,在此shell中,我们可以在现有目录上绑定安装某些东西/dev/random。
# echo 'some large text' > /tmp/fakerandom
# mount --bind /tmp/fakerandom /dev/random
Run Code Online (Sandbox Code Playgroud)
其他进程看不到,因为它们/dev/random照常工作:
$ ls -l /dev/random
crw-rw-rw-. 1 root root 1, 8 Sep 26 15:45 /dev/random
$ cat /dev/random
?Znp7?v?c???^C
Run Code Online (Sandbox Code Playgroud)
但是在我们的shell中,它很特别:
# ls -l /dev/random
-rw-r--r--. 1 root root 16 Sep 26 16:18 /dev/random
# cat /dev/random
some large text
Run Code Online (Sandbox Code Playgroud)
对于功能测试,您可能需要/dev/random用一些FIFO 代替,并在其他一些过程中将一些已知数据写入该FIFO(mkfifo(1)如果需要,请参见参考资料以获取更多信息)。
可以在这篇出色的文章中找到有关安装名称空间的更多信息。
| 归档时间: |
|
| 查看次数: |
789 次 |
| 最近记录: |