Eu consegui chegar perto do que eu queria inicialmente usando monte namespaces . (Minha solução original usou unionfs também, mas como acabou não sendo necessário). Ele é usado para vincular a montagem /bin/bash
a /bin/sh
para um conjunto limitado de processos. O procedimento curto para configurar um novo shell, onde sh
é bash
, é descrito abaixo.
Primeiro, iniciamos um novo shell com um namespace de montagem isolado:
sudo unshare -m sudo -u user /bin/bash
E, no novo shell, vinculamos-mount /bin/bash
a /bin/sh
:
sudo mount --bind /bin/bash /bin/sh
É isso aí!
Vamos ver o que temos neste shell:
user@ubuntu:~$ /bin/sh --version
GNU bash, version ...
user@ubuntu:~$ diff -s /bin/sh /bin/bash
Files /bin/sh and /bin/bash are identical
Mas se estiver executando em outro shell:
user@ubuntu:~$ /bin/sh --version
/bin/sh: 0: Illegal option --
user@ubuntu:~$ diff -s /bin/sh /bin/bash
Binary files /bin/sh and /bin/bash differ
user@ubuntu:~$ diff -s /bin/sh /bin/dash
Files /bin/sh and /bin/dash are identical