-
su - usernameé interpretado pelo seusupara significar shell "run username como um shell de login interativo" -
su username -é interpretado pelo seusupara significar "execute o seguinte comando não interativo (-) como nome de usuário " - o último só funcionou porque:
- seu
sutransmite argumentos à direita parashpara análise -
shusa-para significar "executar como um shell de login (leia/etc/profile, ...)"
- seu
Mas o que você está realmente interessado é: por que não-interativo ? O compartilhamento do terminal de controle entre o pai privilegiado e o filho não privilegiado deixa você vulnerável a " escalonamento de privilégios de pushdown TTY ", também conhecido como TIOCSTI bug, então, a menos que você realmente precise dele su se destaca dele . Quando você usou o formulário su username - , su inferiu que você não precisa de um terminal de controle .
Somente processos com um terminal de controle podem ter líderes de sessão que manipulam grupos de processos (fazem o controle de tarefas); o traço que você deu é bash detectando que não pode ser um líder de sessão.
Você menciona:
Where it gets stranger is that both forms work fine on Ubuntu and CentOS 6, however on vanilla Debian, only the first form works without error.
Ignorando variantes como sux e sudo , existem pelo menos três [1] versões de su no Linux: coreutils , util-linux e shadow-utils a partir das quais O Debian vem. A manpage deste último aponta:
This version of su has many compilation options, only some of which may be in use at any particular site.
e o Debian vem com a bandeira old_debian_behavior ; outras versões podem ter opções similares de tempo de compilação / tempo de execução. Outra razão para a variabilidade pode ser que houve algum debate [2 ] para saber se su deve ser usado para eliminar privilégios dessa maneira e se o erro TIOCSTI é, portanto, um bug (Redhat originalmente closed it "WONTFIX" ).
[1]: edite: adicione SimplePAMApps e hardened-shadow a isso.
[2]: O Solar Designer tem algumas (antigas) opiniões que acho que vale a pena ler.