'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - quando importa qual é usado, ou isso importa?

185

Quando estou fazendo algo que requer que o root seja digitado dezenas de vezes seguidas, prefiro alternar minha sessão para uma sessão raiz. Nos vários tutoriais e instruções que usei na Internet, vejo sudo su , sudo su - , sudo -i e sudo /bin/bash sendo usados para abrir uma sessão raiz, mas não estou claro sobre a diferença entre esses e quando ou se essa diferença é importante.

Alguém pode esclarecer isso para mim?

    
por Paul 13.11.2013 / 00:30

1 resposta

245

Para explicar isso, você precisa saber o que os programas fazem:

su - O comando su é usado para alternar para outro usuário ( s bruxa u ser), mas você também pode alternar para o usuário raiz invocando o comando sem parâmetro. su pede a senha do usuário para mudar, depois de digitar a senha que você mudou para o ambiente do usuário.

sudo - sudo serve para executar um único comando com privilégios de root. Mas, ao contrário de su , ele solicita a senha do usuário atual. Esse usuário deve estar no arquivo sudoers (ou um grupo que esteja no arquivo sudoers). Por padrão, o Ubuntu "lembra" sua senha por 15 minutos, para que você não tenha que digitar sua senha todas as vezes.

bash - Uma interface de texto para interagir com o computador. É importante entender a diferença entre o login, não-login, shells interativos e não interativos:

  • shell de login: Um shell de login faz login no sistema como um usuário especificado, necessário para isso é um nome de usuário e senha. Quando você clica em ctrl + alt + F1 para efetuar login em um terminal virtual, você obtém após o login bem-sucedido um shell de login.
  • shell sem login: Um shell que é executado sem efetuar login, necessário para isso, é um usuário atualmente conectado. Quando você abre um terminal gráfico no gnome, ele é um shell que não é de login.
  • shell interativo: Um shell (login ou não-login) onde você pode digitar ou interromper interativamente comandos. Por exemplo, um terminal gnome.
  • shell não interativo: Um (sub) shell que provavelmente é executado em um processo automatizado. Você não verá nem entrada nem saída.

sudo su Chama sudo com o comando su . O Bash é chamado como shell interativo de não-login. Então o bash só executa .bashrc . Você pode ver que depois de mudar para o root você ainda está no mesmo diretório:

user@host:~$ sudo su
root@host:/home/user#

sudo su - Desta vez é um shell de login, então /etc/profile , .profile e .bashrc são executados e você se encontrará no diretório inicial do root com o ambiente root.

sudo -i É quase o mesmo que sudo 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 /bin/bash Isso significa que você chama sudo com o comando /bin/bash . /bin/bash é iniciado como shell não-login para que todos os arquivos-ponto não sejam executados, mas o próprio bash lê .bashrc do usuário chamador. Seu ambiente permanece o mesmo. Sua casa não será a casa da raiz. Então você é root, mas no ambiente do usuário chamador.

sudo -s lê a variável $SHELL e executa o conteúdo. Se $SHELL contiver /bin/bash , invoca sudo /bin/bash (veja acima).

Verificar: Para verificar se você está em um shell de login ou não (funciona somente no bash porque shopt é um comando interno):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
    
por chaos 13.11.2013 / 10:43