É possível executar 'unshare -n [program]' como um usuário sem privilégios?

6

Eu quero executar um programa sem acesso à Internet, por exemplo

unshare -n ping 127.0.0.1 .

Como usuário não privilegiado, ele retorna Operation not permitted , como usuário privilegiado, retorna o Network is unreachable desejado.

Existe alguma maneira de fazer o trabalho para o usuário não privilegiado, também?

    
por clinei 01.01.2016 / 18:03

3 respostas

5

Em versões posteriores do util-linux, unshare ganhou a opção --map-root-user . Citando a partir de unshare(1) versão 2.26.2:

-r, --map-root-user

Run the program only after the current effective user and group IDs have been mapped to the superuser UID and GID in the newly created user namespace. This makes it possible to conveniently gain capabilities needed to manage various aspects of the newly created namespaces (such as configuring interfaces in the network namespace or mounting filesystems in the mount namespace) even when run unprivileged. As a mere convenience feature, it does not support more sophisticated use cases, such as mapping multiple ranges of UIDs and GIDs. This option implies --setgroups=deny.

Então, em sistemas mais novos, você pode executar:

unshare -n -r ping 127.0.0.1

E isso produzirá o esperado Network is unreachable .

    
por 11.06.2017 / 14:49
3

Torne setuid (supondo que já seja de propriedade de root ):

sudo chmod u+s "'which unshare'"

De unshare (1) :

NOTES The unshare command drops potential privileges before executing the target program. This allows to setuid unshare.

    
por 01.01.2016 / 18:26
0

Você pode usar o utilitário setcap para configurar o compartilhamento não compartilhado.

sudo setcap cap_sys_admin+ep /usr/bin/unshare

Depois disso, você pode usar unshare -n ping 127.0.0.1 Eu não posso explicar mais e não sei se isso é uma boa idéia, mas funciona e whoami não mostra root como nome de usuário.

    
por 18.06.2018 / 14:49