
Quando tentei "sudo su" em vez de "sudo su -" depois de ter feito login como root e su-ing para outro usuário, ele tenta me sudo como o novo usuário, mas via root ...
Quando digito env
, ainda mostra username=root no ambiente. O sudo não está olhando para o usuário conectado no momento, mas para os parâmetros do ambiente?
[oracle@tst-01]$ sudo su grid
Sorry, user oracle is not allowed to execute '/bin/su grid' as root on tst-01.testdomain.com.
[oracle@tst-01]$ env
HOSTNAME=tst-01.testdomain.com
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
QTDIR=/usr/lib64/qt-3.3
USER=oracle
SUDO_USER=ujjain
USERNAME=root
MAIL=/var/spool/mail/ujjain
PATH=/usr/lib/oracle/10.2.0.4/client64/bin:/usr/lib/oracle/10.2.0.4/client64/bin:/sbin:/bin:/usr/sbin:/usr/bin
PWD=/home/ujjain
LANG=en_US.utf8
HOME=/opt/apps/oracle
SUDO_COMMAND=/bin/su
SHLVL=2
LOGNAME=oracle
CVS_RSH=ssh
LESSOPEN=|/usr/bin/lesspipe.sh %s
SUDO_GID=3000
ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client64
G_BROKEN_FILENAMES=1
_=/bin/env
[oracle@tst-01 ujjain]$ sudo su - grid
[grid@tst-01 ~]$
Parece que sudo su newuser também deveria funcionar se sudo estivesse apenas procurando se o usuário atualmente logado tivesse direitos sudo para sudo para o novo usuário. O que sudo su está fazendo e por que é importante que usuários não root usem sudo su - newuser com o hífen?
Responder1
Em su - username
, o hífen significa que o ambiente do usuário é replicado, ou seja, o shell padrão e o diretório de trabalho são lidos /etc/passwd
e quaisquer arquivos de configuração de login do usuário (por exemplo, ~/.profile
) são originados. Resumindo, você obtém praticamente o mesmo ambiente como se estivesse logado normalmente. (Embora o novo usuário possa não possuir o terminal, fazendo com que programas como screen falhem.)
Não usar o hífen, fará com que você mantenha mais ou menos o ambiente do usuário que invocou su
, inclusive te deixando no mesmo diretório de trabalho, onde você pode não ter permissões.
su
não solicitará uma senha se o usuário root a tiver invocado; portanto, se você primeiro usou sudo
(ou su
) para se tornar root, não precisará de uma senha para se tornar qualquer outro usuário.