Por que não consigo ligar / montar “/” dentro de um espaço para nome de usuário?

13

Por que isso não funciona?

$ unshare -rm mount --bind / /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /, missing codepage or helper program, or other error.

Estes funcionam bem:

$ unshare -rm mount --bind /tmp /mnt
$ unshare -rm mount --bind /root /mnt
$

$ uname -r  # Linux kernel version
4.17.3-200.fc28.x86_64
sourcejedi
fonte

Respostas:

16

A diferença é que /tem montagens filho. Dentro de um espaço para nome de usuário, você não tem permissão para separar montagens herdadas das montagens filhas. Um exemplo mais óbvio é que você não tem permissão umount /proc. Caso contrário, poderia de repente conceder acesso a arquivos ocultos embaixo de outras montagens. Às vezes, sobreposições são usadas deliberadamente como uma medida de segurança.

Você tem permissão para criar uma montagem de ligação recursiva, que preserva todas as submontagens:

$ unshare -rm mount --rbind / /mnt
sourcejedi
fonte