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

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

Tenho a seguinte dúvida. Em um tutorial relacionado a uma instalação de software que estou seguindo, digo que devo executar os seguintes comandos (estou fazendo isso em umsshshell, então esta lista de etapas termina com o exitcomando):

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 -sparâmetro faz após sudoo comando?

Pesquisando na web descobri que:

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

Parece-me que sudo -sexecute 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 -se não sudo -s [command]).

Responder1

A resposta simples é que fornece um shell de root. É para isso que está sendo usado aqui. Há um bomcomparação técnica entre os métodos , sue no Unix.SEsudo -isudo -ssudo sumas isso realmente não é relevante aqui. O código poderia ter usado qualquer um e teria funcionado.

A pepita de ajuda significa algumas coisas:

  • Está procurando um comando na $SHELLvariável de ambiente. Se você correr, echo $SHELLprovavelmente verá /bin/bash. Isso significa que você obterá uma instância root do Bash. Tenho certeza de que se você estivesse nisso, zshsignificaria que você obteria uma instância root do zsh.

  • Se $SHELLestiver vazio, ele retorna ao shell padrão definido /etc/passwdpara esse usuário.

  • Se você fornecer um comando (por exemplo sudo -s whoami), ele estará em execução:sudo /bin/bash -c "whoami"

  • Se você não passar um comando, ele não passará um -cargumento, então você apenas obterá um shell interativo.

Já usei a frase “root” diversas vezes. Porpadrão sudotrata-se de executar coisas como root, mas sudo(e su) pode executar coisas como outros usuários (se você tiver permissão para fazê-lo). Só estou afirmando isso para os pedantes que gritarão que isso sudo -s -u $USERnão lhes dá uma casca de raiz como prometi -sacima.


E no meumais humildede opiniões, é realmente bobo se tornar root para apenas dois comandos, sem mencionar que isso pode fazer com que um usuário execute acidentalmente outros comandos como root. Se você deseja ou precisa executar algo como root, basta pré-mendar 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 duvidaria de qualquer tutorial que sugerisse obter um shell de root, exceto nos casos em que você tem muitos comandos para executar ... E mesmo assim, há scripts.

Responder2

sudo -sexecutará um comando no diretório atual como um usuário normal faria. Por exemplo:

rick@alien:~/askubuntu$ suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
Nov 12 22:23:37 to Nov 13 04:24:37 lasting 21,660 seconds
(... SNIP ...)
Dec 02 21:58:49 to Dec 03 04:20:52 lasting 22,923 seconds
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,356 seconds (21 days, 12 hours, 29 minutes, 16 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,015 seconds (7 days, 22 hours, 33 minutes, 35 seconds)

rick@alien:~/askubuntu$ sudo suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -H suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -s suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
(...SNIP...)
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,431 seconds (21 days, 12 hours, 30 minutes, 31 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,090 seconds (7 days, 22 hours, 34 minutes, 50 seconds)

É claro que usar -sem vez de prefixar o comando com ./pode não economizar muito tempo.

informação relacionada