Para iniciar um shell raiz em máquinas onde a conta raiz está desativada, você pode executar um dos seguintes:
sudo -i
: executar um shell de logon interativo (leituras/root/.bashrc
e/root/.profile
)sudo -s
: executar um shell interativo sem login (leituras/root/.bashrc
)
No mundo do Ubuntu, muitas vezes vejo sudo su
sugestões como uma maneira de obter um shell raiz. Por que executar dois comandos separados quando um fará? Tanto quanto eu posso dizer, sudo -i
é equivalente sudo su -
e sudo -s
é o mesmo que sudo su
.
As únicas diferenças parecem ser (comparando sudo -i
à esquerda e sudo su -
à direita):
E comparando sudo -s
(esquerda) e sudo su
(direita):
As principais diferenças (ignorando as SUDO_foo
variáveis e LS_COLORS
) parecem ser as XDG_foo
variáveis do sistema nas sudo su
versões.
Existem casos em que essa diferença justifica o uso de algo deselegante sudo su
? Posso dizer com segurança às pessoas (como sempre faço) que nunca há sentido em correr sudo su
ou estou perdendo alguma coisa?
fonte
ubuntu
que impedem os usuários do padrãosu -
. Eles criaram um problema e agora há discussões intermináveis sobre como resolvê-lo.su -
? Você não acha que isso representa uma falha de segurança em ambientes multiusuário, onde mais de uma pessoa precisa ter acesso root?su -
? Sim, seria necessário definir uma senha root, mas isso é trivial.Respostas:
Como você afirmou em sua pergunta, a principal diferença é o meio ambiente.
sudo su -
vs.sudo -i
No caso
sudo su -
, é um shell de login, portanto/etc/profile
,.profile
e.bashrc
é executado e você se encontrará no diretório inicial do root com o ambiente do root.sudo -i
é quase o mesmo quesudo su -
A opção-i
(simular login inicial) executa o shell especificado pela entrada do banco de dados de senha do usuário de destino como um shell de login. Isso significa que os arquivos de recursos específicos de login, como.profile
,.bashrc
ou.login
serão lidos e executados pelo shell.sudo su
vs.sudo -s
sudo su
chamasudo
com o comandosu
. O Bash é chamado como shell interativo sem logon. Então,bash
apenas executa.bashrc
. Você pode ver que, depois de mudar para o root, você ainda está no mesmo diretório:sudo -s
lê a$SHELL
variável e executa o conteúdo. Se$SHELL
contiver/bin/bash
a chamadasudo /bin/bash
, o que significa que/bin/bash
é iniciado como um shell que não é de login, portanto, todos os arquivos de ponto não são executados, masbash
ele próprio lê.bashrc
do usuário que está chamando. Seu ambiente permanece o mesmo. Sua casa não será a casa da raiz. Então você é root, mas no ambiente do usuário que está chamando.Conclusão
O
-i
sinalizador foi adicionadosudo
em 2004 , para fornecer uma função semelhante aosudo su -
, assimsudo su -
como o modelo parasudo -i
e deveria funcionar como ele. Eu acho que realmente não importa qual você usa, a menos que o ambiente não seja importante.Adição
Um ponto básico que deve ser mencionado aqui é que
sudo
foi projetado para executar apenas um único comando com privilégios mais altos e, em seguida, soltar esses privilégios nos originais. Nunca foi feito para realmente mudar o usuário e deixar um shell raiz aberto. Ao longo do tempo,sudo
foi ampliado com esses mecanismos, porque as pessoas ficaram irritadas com o porquê de usarsudo
na frente de cada comando.Então o significado de
sudo
foi abusado.sudo
foi criado para incentivar o usuário a minimizar o uso de privilégios de root.O que temos agora é que
sudo
se torna cada vez mais popular. Está integrado em quase todas as distribuições Linux conhecidas. A ferramenta original para mudar para outra conta de usuário ésu
. Para um veterano da velha escola * nix, algo como issosudo
pode parecer desnecessário. Ele adiciona complexidade e se comporta mais provavelmente aos mecanismos que conhecemos da família OS da Microsofts e, portanto, contraria a filosofia de simplicidade dos sistemas * nix.Eu não sou realmente um veterano, mas também na minha opinião
sudo
sempre foi um espinho do meu lado, a partir do momento em que foi introduzido e sempre trabalhei em torno do usosudo
, se possível. Eu sou muito relutante em usarsudo
. Em todos os meus sistemas, a conta root está ativada. Mas as coisas mudam, talvez chegue a hora, quandosu
será preterido e serásudo
substituídosu
completamente.Portanto, acho que será melhor usar
sudo
os mecanismos internos (-s
,-i
) em vez de confiar em uma ferramenta antiga comosu
.fonte
sudo su
? Na época, eu estava usando distros sem sudo e contas raiz ativas, então não sei. Isso pode explicar a prevalência do sudo su meme no mundo Ubuntu.sudo -i
ousudo -s
antes - eu tenho executado UNIX de vários tipos desde 1991 e para mimsudo su -
é apenas um hábito arraigado neste momento.sudo -s
o mesmo quesudo $SHELL
então?sudo su -
são 1) que funciona e você sabe exatamente o que faz; e 2) que não precisa se lembrar de outra opção parasudo
(quando você já sabesu -
) e 3) você não Não é preciso lembrar com qual versãosudo
você está trabalhando no momento. Por que lembrar mais uma trivialidade quando o que você já tem funciona bem? Existe algo que sesu -i
sai melhor do que evitar uma entrada de log? Eu não uso osudo su -
suficiente para me preocupar com isso.sudo
e estou muito acostumadosu
. É a combinação dos dois que me incomoda.Para responder sua pergunta diretamente: não, não há uma boa razão para fazer isso. Além disso, o sudo su produz duas entradas de log quando uma é suficiente.
Eu já vi muitas pessoas fazerem isso, e quando pergunto por que elas não correm
sudo -s
, a resposta é que elas não sabem sobre a-s
bandeira do sudo e geralmente elas mudam depois que eu a aponto.No entanto, à sua lista de
sudo -s
esudo -i
gostaria de adicionar mais uma opçãosudo -sE
, que é uma espécie de substituto parasu -m
.sudo -sE
preserva seu ambiente, incluindo o diretório inicial. Isso tem riscos se o diretório inicial for inseguro (no NFS). Porém, em um ambiente em que muitas pessoas usam raiz, você evita que tenha que concordar com o conteúdo do.bashrc
arquivo raiz . Meu.bashrc
contém muitas especializações para raiz, portanto, não obtenho exatamente o mesmo ambiente que raiz, mas pelo menos recebo exatamente o ambiente que desejo.fonte
$HOME
, isso significa que todos os novos arquivos criados na pasta pessoal são de propriedade da raiz, não de você. Eu já tive essa causa muitos erros de permissão de diagnóstico.sudo -sE
e depoisecho $HOME
dá/root
no CentOS 7, bash 4.2.-sE
não parece preservar o diretório inicial como você afirmou.