stat 在 proot 环境中无法正常工作

stat 在 proot 环境中无法正常工作

我正在尝试proot在 Ubuntu 22.04 下创建一个具有单独主目录的隔离环境。我正在运行以下命令:

proot -r /home/user/testroot/ -w /home/user -b /bin:/bin! -b /dev -b /etc -b /lib:/lib! -b /lib32:/lib32! -b /lib64:/lib64! -b /libx32:/libx32! -b /proc -b /sbin:/sbin! -b /usr -b /var   /bin/bash

运行正常,基本符合我的预期,但在环境中创建的文件存在一个小问题。具体来说,stat根本找不到它们,除非“主机系统”上存在一个名称完全相同的文件。

user@vbox-ubuntu:~$ ll
ls: cannot access 'testfile_2': No such file or directory
total 16
drwxr-x--- 16 user user 4096 Dec 16 11:55 ./
drwxr-xr-x  3 root root 4096 Jan 26  2023 ../
-rw-------  1 user user 1090 Dec 16 11:26 .bash_history
-rw-r--r--  1 user user 3817 Feb  2  2023 .bashrc
-rw-rw-r--  1 user user    0 Dec 16 11:55 testfile
-?????????  ? ?    ?       ?            ? testfile_2

因此,在上面的例子中,testfile 存在于 /home/user 中,但 testfile_2 不存在。明确地说,我可以从 testfile_2 读取和写入,但stat根本看不到它。有趣的是,我还可以用来stat访问“来宾系统”中未包含的文件:

user@vbox-ubuntu:~$ stat .profile
  File: .profile
  Size: 807             Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 399533      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2023-12-16 11:03:43.648320948 +0000
Modify: 2023-01-26 17:16:25.123261068 +0000
Change: 2023-01-26 17:16:25.123261068 +0000
 Birth: 2023-01-26 17:16:25.123261068 +0000
user@vbox-ubuntu:~$ cat .profile
cat: .profile: No such file or directory

这是一个已知的错误proot,还是我理解错了?

答案1

Ubuntu 仍有 5.1.0 版本的 proot,它尚未拦截新的statx(2)系统调用取代了各种旧的 stat 系统调用。(statx(2) 增加了几个新字段,如文件创建或“出生”时间,而“struct stat”无法报告。)这仅在版本中实现5.3.0

考虑使用使用内核级文件系统隔离(命名空间)的工具,例如bwrapsystemd-nspawn

相关内容