su vs sudo -s vs sudo -i vs sudo bash

su vs sudo -s vs sudo -i vs sudo bash

Qual é a diferença entre os seguintes comandos:

su
sudo -s
sudo -i
sudo bash

Eu sei que supreciso saber a senha do root e que sudopreciso estar no sudoersarquivo, mas depois de executado qual a diferença?

Eu sei que há uma diferença entre sue sudo -sporque meu diretório inicial está /rootdepois da execução su, mas meu diretório inicial ainda está /home/mynamedepois sudo -s. Mas suspeito que isso seja apenas um sintoma de uma diferença subjacente que estou perdendo.

Responder1

Com suvocêtornar-seoutro usuário — root por padrão, mas potencialmente outro usuário. Se você disser su -, seu ambiente também será substituído pelo ambiente de login desse usuário, de modo que o que você vê seja indistinguível do login desse usuário. Não há como o sistema saber o que você faz enquanto sufaz outro usuário a partir das ações desse usuário quando ele faz login.

As coisas são muito diferentes com sudo:

  • Comandos que você executasudo executarcomo o usuário alvo - root por padrão, mas alterável com -u- mas registra os comandos que você executa, marcando-os com seu nome de usuário para que a culpa possa ser atribuída posteriormente. :)

  • sudoé muito flexível. Você pode limitar os comandos que um determinado usuário ou grupo de usuários pode executar, por exemplo. Com su, é tudo ou nada.

    Esse recurso normalmente é usado para definir funções. Por exemplo, você pode definir um grupo de "backups" com permissão para execução dumpe tar, cada um dos quais precisa de acesso root para fazer backup adequado do disco do sistema.

    Menciono isso aqui porque significa que você pode dar sudoprivilégios a alguém sem dar-lhes sudo -sou sudo bashhabilidades. Eles têm apenas as permissões necessárias para realizar seu trabalho, enquanto suexecutam todo o sistema. Porém, você precisa ter cuidado com isso: se você der a alguém a capacidade de dizer sudo vi, por exemplo, ele poderá desembolsar vie ter efetivamente o mesmo poder que com sudo -s.

  • Como ele usa a senha do sudoer em vez da senha do root, sudoisola a permissão entre vários sudoers.

    Isso resolve um problema administrativo do su, que é que quando a senha do root muda, todos aqueles que precisavam saber para usá-la sutinham que ser avisados. sudopermite que as senhas dos sudoers sejam alteradas de forma independente. Na verdade, é comum bloquear com senha a conta do usuário root em um sistema para sudoforçar todas as tarefas do administrador de sistema a serem realizadas via sudo. Em uma grande organização com muitos sudoers confiáveis, isso significa que quando um dos administradores de sistema sai, você não precisa alterar a senha root e distribuí-la aos administradores que permanecerem.

As principais diferenças entre sudo bashe sudo -ssão:

  1. -sé mais curto quebash

  2. Você pode sudo -s some-commandexecutar some-commandno shell padrão, mas com privilégios de superusuário. É basicamente uma abreviação de sudo $SHELL -c some-command.

  3. Em vez disso, você pode passar os comandos para a entrada padrão do shell, como sudo -s < my-shell-script. Você poderia usar isso com umheredocenviar vários comandos para uma única sudochamada, evitando a necessidade de digitar sudorepetidamente.

  4. Mesmo sem esses argumentos de comando extras, sudo -sainda difere de sudo bashporque pode executar um shell diferente do bash, já que olha primeiro na SHELLvariável de ambiente e, se não estiver definido, na configuração do shell de login do usuário, normalmente em /etc/passwd.

O shell executado sudo -sherda seu ambiente de usuário atual. Se o que você realmente deseja é um ambiente limpo, como o obtido logo após o login, o que você deseja é sudo -iuma adição relativamente recente ao sudo. Grosso modo, sudo -ié sudo -scomo su -está su: redefine todas as principais variáveis ​​de ambiente, exceto algumas, e envia você de volta ao diretório inicial do usuário. Se você também não fornecer comandos para executar nesse shell por meio de entrada padrão ou sudo -i some-command, ele executará esse shell como um shell de login interativo, para que os scripts de inicialização do shell do usuário (por exemplo, .bash_profile) sejam executados novamente.

Tudo isso torna sudo -iconsideravelmente mais seguro que o sudo -s. Por que? Porque se alguém puder modificar seu ambiente antes sudo -s, poderá causar a execução de comandos não intencionais. O caso mais óbvio é modificar SHELL, mas também pode acontecer de forma menos direta, como via PAGERse você disser man foowhile under sudo -s.

Você pode dizer: "Se eles podem modificar PAGER, eles podem modificar PATH, e então podem simplesmente substituir um sudoprograma maligno", mas alguém suficientemente paranóico pode dizer /usr/bin/sudo /bin/bashpara evitar essa armadilha. Você provavelmente não é tão paranóico a ponto de evitar as armadilhas em todos osoutrovariáveis ​​de ambiente suscetíveis, no entanto. Você também se lembrou de verificar EDITOR, por exemplo, antes de executar qualquerVCcomando? Por isso sudo -i.

Como sudo -itambém altera seu diretório de trabalho para o diretório inicial do usuário, você ainda pode querer usar sudo -spara aquelas situações em que sabe que deseja permanecer no mesmo diretório em que estava cdquando executou sudo. Ainda é mais seguro ir sudo -ie cdvoltar para onde você estava.

Outra variante de tudo isso que você às vezes vê é sudo su, que é aproximadamente equivalente a sudo -s. Da mesma forma, sudo su -é funcionalmente bastante próximo de sudo -i. Como sudoe susão comandos concorrentes, é um pouco estranho combiná-los assim, então recomendo que você use os sudosinalizadores.

Responder2

De umpostagem no ubuntuforumEu fiz há um tempo:

Considere o seguinte experimento:

applic@ion:~% sudo su
[sudo] password for applic:
root@ion:/home/applic# env > /tmp/sudo_su_env
root@ion:/home/applic# exit
exit
applic@ion:~% sudo -s
applic .bashrc read...
root@ion:~% env >/tmp/sudo_s

Aqui estão as diferenças que encontrei:

Com sudo -s:

HOME=/home/applic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
reads $USER's ~/.bashrc

Com sudo su:

HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
reads /etc/environment
reads /root/.bashrc

Observe a diferença em $HOME. Ser root e configurar $HOMEa casa normal do usuário pode causar problemas. Por exemplo, se você executar um aplicativo gráfico, o usuário normal ~/.Xauthoritypoderá ser substituído pelo root. Isso causa problemas normais ao usuário posteriormente, como não conseguir executar determinados aplicativos gráficos por meio do cron.

Para resumir:

                                     corrupted by user's 
        HOME=/root  uses root's PATH     env vars
sudo -i     Y       Y[2]                 N
sudo -s     N       Y[2]                 Y
sudo bash   N       Y[2]                 Y
sudo su     Y       N[1]                 Y
  1. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games provavelmente definido por/etc/environment
  2. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

O resultado final é sudo -io comando adequado a ser executado quando você deseja um shell root que não seja contaminado pelo ambiente do usuário.

Responder3

su(ébruxavocêser ouésubstitutovocêser) permite trocar de usuário. subasicamente inicia outra instância do shell com os privilégios do usuário pretendido. Por padrão, ele muda você para o rootusuário, se quisermos mudar de usuário específico, precisamos passar o usuário da seguinte forma:

$ su bob  # switches to bob (requires bob's password)

su -significa que as variáveis ​​de ambiente serão redefinidas para root e susignifica que as variáveis ​​de ambiente são do usuário antigo.

por exemplo: diretório inicial do root se você usar su -ou diretório inicial do usuário antigo se você usar su.

sudo (ésuperiorvocêSerfazer) é um utilitário de linha de comando que permite aos usuários executar programas com os privilégios de segurança de outro usuário; por padrão, é superusuário, ou seja, root. Ele usa um arquivo de configuração /etc/sudoersque lista quais usuários têm direitos para ações específicas

sudo deve ser lido como/ˈsuːduː/. sintaxe sudo command, ou sejaébruxavocêser efazereste comando.

  • sué equivalente sudo -ie simula um login na conta root. Seu diretório de trabalho será /root, e ele lerá o root, .profileetc. O prompt mudará de $ para #, indicando que você tem acesso root.

  • sudo -s inicia um shell como root, mas não altera seu diretório de trabalho.

  • sudo bash onde bashestá o comando para executar sudo. Este comando é executado bashcomo superusuário.

  • Usando sudopode ser registrado tudo o que alguém faz.
  • O uso sudoevita que um usuário precise saber a senha root.
  • Usando sudopodemos limitar os comandos que podem ser executados.

informação relacionada