debian su - e su $ PATH diferenças?

1
$ su -
Password: 
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# exit
logout
$ su
Password: 
# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Eu não tenho idéia do porque / bin e / sbin não são adicionados ao $PATH , se eu fizer o su simples. Este costumava ser o caso. Como posso consertar isso? Eu notei que:

-rw-r--r-- 1 root root 0 Jan  8  2018 /etc/environment

Caso contrário, meu sistema parece normal.

EDIT: eu esqueci o obrigatório uname -a

Linux rpi3 4.17.0-1-arm64 #1 SMP Debian 4.17.8-1 (2018-07-20) aarch64 GNU/Linux

EDIT2:

$ cat /etc/issue
Debian GNU/Linux buster/sid \n \l

todos os pacotes são do repositório "testing", já que os "estáveis" não funcionam muito bem em aarch64.

    
por user1095108 04.08.2018 / 10:48

2 respostas

5

Muito recentemente (com a versão 2.32-0.2 de util-linux de 27 Jul 2018) o Debian mudou para uma implementação su diferente, veja bug 833256 . O "novo" su é de util-linux , enquanto o "antigo" estava contido no pacote login e originado de src:shadow

Citações do util-linux / NEWS.Debian.gz:

The two implementations are very similar but have some minor differences (and there might be more that was not yet noticed ofcourse), e.g.

  • new 'su' (with no args, i.e. when preserving the environment) also preserves PATH and IFS, while old su would always reset PATH and IFS even in 'preserve environment' mode.
  • su '' (empty user string) used to give root, but now returns an error.
  • previously su only had one pam config, but now 'su -' is configured separately in /etc/pam.d/su-l

The first difference is probably the most user visible one. Doing plain 'su' is a really bad idea for many reasons, so using 'su -' is strongly recommended to always get a newly set up environment similar to a normal login. If you want to restore behaviour more similar to the previous one you can add 'ALWAYS_SET_PATH yes' in /etc/login.defs.

A implementação su usada anteriormente se comportou de maneira diferente em relação a PATH . Isso também é discutido neste relatório de bug, veja 833256 # 80 . O novo su preserva PATH se não invocado com su - .

Resumindo: o antigo su do Debian se comportou como su - , pelo menos em relação a PATH . Com a nova implementação, você quase sempre deve usar su - , semelhante a outras distribuições.

    
por 06.08.2018 / 08:58
1

O Debian su manpage diz:

The current environment is passed to the new shell. The value of $PATH is reset to /bin:/usr/bin for normal users, or /sbin:/bin:/usr/sbin:/usr/bin for the superuser. This may be changed with the ENV_PATH and ENV_SUPATH definitions in /etc/login.defs.

Citações de /etc/login.defs :

# Three items must be defined:  MAIL_DIR, ENV_SUPATH, and ENV_PATH.
# If unspecified, some arbitrary (and possibly incorrect) value will
# be assumed.  All other items are optional - if not specified then

Em um sistema Debian normal, as variáveis são definidas em /etc/login.defs :

#
# *REQUIRED*  The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

O teste comentando ENV_SUPATH reproduz parcialmente seu problema: su não terá /sbin (nem /usr/local/bin ) enquanto su - executará o script de login /etc/profile , que redefinirá PATH conforme o esperado para o usuário root.

Portanto, você deve verificar qualquer alteração de /etc/login.defs e corrigi-la, ou ver se uma outra parte altera o PATH mais tarde (como um script de inicialização do shell, como algum script bashrc não-login)

    
por 04.08.2018 / 18:43