Por que não consigo executar um comando como um usuário com / bin / false como shell de login?

2

conecto a uma imagem do docker na qual o usuário já foi criado com este comando:

RUN useradd -r -u 200 -m -c "nexus role account" -d /nexus-data -s /bin/false nexus

Eu queria executar um comando como esse usuário, mas nada aconteceu. Tentando resolver isso, descobri que não posso executar nada com um usuário que tenha / bin / false como login:

# useradd xxx
# su xxx -c 'ls >>/t/t1'
# ls /t
t1
# useradd -s /bin/false
# su xxx1 -c 'ls >>/t/t2'
# ls /t
t1

Eu esperava que o shell de login não importasse ao chamar su sem - . Eu pesquisei e descobri que posso executar o comando se adicionar -s /bin/bash , mas por que isso acontece? A opção - é su significa 'usar shell de login', por que o shell de login é relevante sem - ?

    
por Assen Kolov 03.07.2016 / 19:12

1 resposta

8

Se você não especificar -s ou --preserve-environment , o shell do usuário destino será usado. No seu exemplo, isso seria executar /bin/false -c 'ls >> /t/t2' , o que, obviamente, não executa nada útil.

O "login shell" tem um significado específico e faria com que os shells normais, como sh ou bash , executassem os scripts de login, como .profile .

    
por 03.07.2016 / 19:18

Tags