O que o comando 'sudo -s' faz e como é usado neste exemplo?

6

Eu tenho a seguinte dúvida. Em um tutorial relacionado a uma instalação de software que estou seguindo, digo que preciso executar os seguintes comandos (estou fazendo isso em um shell ssh , portanto, esta lista de etapas termina com o comando exit ):

sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit

Minhas dúvidas são:

O que exatamente o parâmetro -s faz após o comando sudo ?

Pesquisando na web, descobri que:

  

‑s [comando]       A opção -s (shell) executa o shell especificado pela variável de ambiente SHELL, se estiver definida ou o shell, conforme especificado no   banco de dados de senha. Se um comando for especificado, ele será passado para o   shell para execução através da opção shell -c. Se nenhum comando for   especificado, um shell interativo é executado

Parece-me que o sudo -s executa um comando usando a variável de ambiente do shell.

Mas isso não está claro para mim: neste caso, qual é o comando executado com a variável de ambiente? (só executa sudo -s e não sudo -s [command] ).

    
por AndreaNobili 03.06.2014 / 23:43

1 resposta

7

A resposta simples é que você tem um shell de root. É isso que está sendo usado aqui. Há uma boa comparação técnica entre su , sudo -i , sudo -s e sudo su métodos no Unix.SE mas isso não é relevante aqui. O código poderia ter usado algum e teria funcionado.

O nugget de ajuda significa algumas coisas:

  • Ele está procurando um comando na variável de ambiente $SHELL . Se você executar echo $SHELL , provavelmente verá /bin/bash . Isso significa que você obterá uma instância de raiz do Bash. Tenho certeza que se você estivesse em zsh , isso significaria que você obtém uma instância de raiz de zsh .

  • Se $SHELL estiver vazio, ele retornará ao shell padrão definido em /etc/passwd para esse usuário.

  • Se você fornecer um comando (por exemplo, sudo -s whoami ), ele será executado: sudo /bin/bash -c "whoami"

  • Se você não passar um comando, ele não passa um argumento -c para que você tenha um shell interativo.

Eu usei a frase "root" várias vezes. Por padrão sudo é tudo sobre a execução de coisas como root, mas sudo (e su) pode executar coisas como outros usuários (se você tiver permissão para fazer isso). Eu estou apenas afirmando isso para os pedantes que irão gritar que sudo -s -u $USER não dá a eles um shell de root como eu prometi que -s iria acima.

E no meu humblest de opiniões, é realmente ridículo transformar o root em apenas dois comandos, sem mencionar que ele pode deixar um usuário executando acidentalmente comandos adicionais como root. Se você quer ou precisa executar algo como root, basta premendar o comando com sudo :

sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen

Eu duvido de qualquer tutorial que sugira obter um shell de root, exceto nos casos em que você tem centenas de comandos para executar ... E, mesmo assim, há scripts.

    
por Oli 03.06.2014 / 23:50