Já li no manual, mas não vejo diferença.
su
- altere o ID do usuário ou torne-se superusuário
sudo -s [command]
A -s
opção (shell) executa o shell especificado pela variável de ambiente SHELL se estiver definido ou o shell conforme especificado em passwd (5). Se um comando for especificado, ele será passado para o shell para execução. Caso contrário, um shell interativo é executado.
sudo -i
desaparecer descrição no manual
su user
login de shells não confiáveis, massu - user
. Veja unix.stackexchange.com/q/7013/8250sudo -i
é ruim, mas certamente você pode f *** coisas usá-loRespostas:
A principal diferença entre esses comandos está na maneira como eles restringem o acesso a suas funções.
su
(que significa "usuário substituto" ou "alternar usuário") - faz exatamente isso, inicia outra instância do shell com privilégios do usuário de destino. Para garantir que você tenha os direitos para fazer isso, ele solicita a senha do usuário de destino . Então, para se tornar root, você precisa saber a senha root. Se houver vários usuários em sua máquina que precisam executar comandos como root, todos eles precisam saber a senha root - observe que será a mesma senha. Se você precisar revogar as permissões de administrador de um dos usuários, precisará alterar a senha de root e informar somente às pessoas que precisam manter o acesso - desarrumado.sudo
(hmm ... qual é o mnemônico? Superusuário-DO?) é completamente diferente. Ele usa um arquivo de configuração (/ etc / sudoers) que lista quais usuários têm direitos para ações específicas (executar comandos como root, etc.) Quando chamado, solicita a senha do usuário que o iniciou - para garantir que a pessoa no terminal é realmente o mesmo "joe" que está listado em/etc/sudoers
. Para revogar privilégios de administrador de uma pessoa, você só precisa editar o arquivo de configuração (ou remover o usuário de um grupo listado nessa configuração). Isso resulta em um gerenciamento muito mais limpo de privilégios.Como resultado disso, em muitos sistemas baseados no Debian, o
root
usuário não tem uma senha definida - ou seja, não é possível fazer login diretamente como root.Além disso,
/etc/sudoers
permite especificar algumas opções adicionais - ou seja, o usuário X só pode executar o programa Y etc.A
sudo su
combinação usada com frequência funciona da seguinte maneira: primeirosudo
solicita sua senha e, se você puder fazer isso, chama o próximo comando (su
) como superusuário. Comosu
é invocado porroot
, não é necessário inserir a senha do usuário de destino. Portanto,sudo su
permite abrir um shell como outro usuário (incluindo root), se você tiver acesso de superusuário pelo/etc/sudoers
arquivo.fonte
su
como "alternar usuário", mas sempre como superusuário; o comportamento padrão sem o nome de usuário de outra pessoa (embora faça sentido). Da wikipedia : "O comando su, também conhecido como superusuário [1] desde 1974, também foi chamado de" usuário substituto "," usuário falso "ou" usuário definido "porque permite alterar a conta associada ao atual terminal (janela). "sudo su
?sudo
permite executar comandos em sua própria conta de usuário com privilégios de root.su
permite alternar usuário para que você efetue login como root.sudo -s
executa um shell com privilégios de root.sudo -i
também adquire o ambiente do usuário raiz.Para ver a diferença entre
su
esudo -s
, façacd ~
epwd
depois de cada um deles. No primeiro caso, você estará no diretório inicial do root, porque é o root. No segundo caso, você estará em seu próprio diretório pessoal, porque possui privilégios de root.Há mais discussão sobre essa pergunta exata aqui .
fonte
cd ~
resultados serem diferentes é resultado do sudo -s não definir a variável de ambiente $ HOME.sudoers
arquivo controla quem pode executar qual comando como outro usuário, mas isso acontece antes da execução do comando. No entanto, uma vez que você teve permissão para iniciar um processo como, digamos, root - o processo em execução possui o UID do root e tem acesso total ao sistema, não há como o sudo restringir isso. Novamente, você sempre é você mesmo ou raiz, não há "meio e meio". Portanto, se osudoers
arquivo permitir que você execute o shell como root - as permissões nesse shell seriam indistinguíveis de um shell raiz "normal".Esta resposta é um engano da minha resposta em um engodo desta pergunta , coloque aqui a resposta canônica para que as pessoas possam encontrá-la!
A principal diferença entre
sudo -i
esudo -s
é:sudo -i
fornece o ambiente raiz, ou seja, o seu~/.bashrc
é ignorado.sudo -s
fornece o ambiente do usuário, para que você~/.bashrc
seja respeitado.Aqui está um exemplo, você pode ver que eu tenho um aplicativo
lsl
no meu~/.bin/
diretório que é acessível via,sudo -s
mas não acessívelsudo -i
. Observe também que o prompt do Bash muda da mesma forma que com,sudo -i
mas não comsudo -s
:Embora
sudo -s
seja conveniente para fornecer o ambiente que você está familiarizado, recomendo o usosudo -i
por dois motivos:.bashrc
.fonte
sudo -s
fornece um ambiente com o qual o usuário está familiarizado?su
pede a senha do usuário "root".sudo
solicita sua própria senha (e também verifica se você tem permissão para executar comandos como root, que é configurado através de/etc/sudoers
- por padrão, todas as contas de usuário pertencentes aos grupos "admin" ou "sudo" podem usar o sudo).sudo -s
lança um shell como root, mas não altera seu diretório de trabalho.sudo -i
simula um login na conta root: seu diretório de trabalho será/root
e o root,.profile
etc., será originado como se estivesse no login.fonte
sudo -s
é quase igual asu
($ HOME é diferente) esudo -i
é igual asu -
No Ubuntu ou em um sistema relacionado, não encontro muita utilidade
su
no sentido tradicional de superusuário.sudo
lida com esse caso muito melhor. No entanto,su
é ótimo para se tornar outro usuário em situações pontuais em que a configuração de sudoers seria tola.Por exemplo, se eu estiver reparando meu sistema a partir de um CD / USB ativo, geralmente montarei meu disco rígido e outras coisas necessárias
chroot
no sistema. Nesse caso, meu primeiro comando é geralmente:Dessa forma, estou operando não como root, mas como meu usuário normal, e depois uso
sudo
conforme apropriado.fonte
su
Solicita a senha do root, torna-se root, abre um shell interativo sem login.su -
Solicita a senha do root, torna-se root, abre um shell de login interativo.sudo -s
Pergunta suas senhas, torna-se root, abre um shell interativo sem login.sudo -i
Pergunta suas senhas, torna-se root, abre um shell de login interativo.A melhor prática é usar esses dois.
sudo su
Solicita sua senha, torna-se root por um segundo e rodasu
como root`.sudo su -
Solicita sua senha, torna-se root por um segundo e executasu -
como root.Portanto, neste caso, você está executando o
su
usosudo
e não precisa saber a senha real do root. Os resultados são os mesmos quesu
esu -
.fonte