Há uma decepcionante falta de comentários no código . É como se ninguém jamais achasse útil, uma vez que as montagens de bind de tempo foram implementadas na v2.4. Certamente tudo que você precisa fazer é substituir .mnt->mnt_sb
, onde diz .mnt
...
Because it gives you a security boundary around a subtree.
PS: isso foi discutido várias vezes, mas para evitar buscas: considerar, por exemplo mount --bind / tmp / tmp; agora você tem uma situação quando os usuários não podem criar links para outros lugares sem root fs, embora eles tem / tmp gravável para eles. Técnicas semelhantes funcionam para outro isolamento precisa - basicamente, você pode restringir renomear / link para subárvore dada. IOW é uma característica deliberada. Note que você pode ligar um monte de árvores em chroot e obter restrições previsíveis, independentemente de como o coisas podem ser rearranjadas um ano depois na árvore principal, etc.
- Al Viro
Há um exemplo concreto mais abaixo no tópico
Whenever we get mount -r --bind working properly (which I use to place copies of necessary shared libraries inside chroot jails while allowing page cache sharing), this feature would break security.
mkdir /usr/lib/libs.jail for i in $LIST_OF_LIBRARIES; do ln /usr/lib/$i /usr/lib/libs.jail/$i done mount -r /usr/lib/libs.jail /jail/lib chown prisoner /usr/log/jail mount /usr/log/jail /jail/usr/log chrootuid /jail prisoner /bin/untrusted &
Although protections should be enough, but I'd rather avoid having the prisoner link /jail/lib/libfoo.so (write returns EROFS) to /jail/usr/log where it's potentially writeable.