Com su
, você se torna outro 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, para que o que você vê seja indistinguível do login como aquele usuário. Não há como o sistema saber o que você faz enquanto su
'd para outro usuário a partir de ações desse usuário quando fizerem login.
As coisas são muito diferentes com sudo
:
-
Comandos que você executa por
sudo
executar como o usuário de destino - raiz por padrão, mas alterável com-u
- mas registra os comandos executados, 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. Comsu
, é tudo ou nada.Esse recurso é normalmente usado para definir funções. Por exemplo, você pode definir um grupo de "backups" com permissão para executar
dump
etar
, cada um dos quais precisa de acesso root para fazer backup do disco do sistema.Eu mencionei isso aqui porque significa que você pode dar a alguém
sudo
privileges sem dar a elessudo -s
ousudo bash
habilidades. Eles têm apenas as permissões necessárias para fazer seu trabalho, enquanto que comsu
eles executam todo o sistema. Você tem que ter cuidado com isso, porém: se você der a alguém a habilidade de dizersudo vi
, por exemplo, eles podem gastarvi
e ter efetivamente o mesmo poder que comsudo -s
. -
Como a senha do sudo é usada em vez da senha raiz,
sudo
isola a permissão entre vários sudoers.Isso resolve um problema administrativo com
su
, que é quando a senha do root muda, todos os que precisam saber para usarsu
precisam ser informados.sudo
permite que as senhas dos sudoers mudem de forma independente. Na verdade, é comum bloquear com senha a conta do usuário raiz em um sistema comsudo
para forçar todas as tarefas do administrador a serem feitas viasudo
. 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 de root e distribuí-la para os administradores que permanecem.
A principal diferença entre sudo bash
e sudo -s
é que -s
é menor e permite que você passe comandos para executar no shell padrão do usuário de duas maneiras:
-
Você pode dizer
sudo -s some-command
, que executasome-command
em seu shell. É basicamente uma abreviação desudo $SHELL -c some-command
. -
Você pode passar os comandos para a entrada padrão do shell, como
sudo -s < my-shell-script
. Você poderia usar isso com um heredoc para enviar vários comandos para uma única chamadasudo
, evitando a necessidade de digitarsudo
repetidamente.
Ambos os comportamentos são opcionais. Muito mais comumente, você atribui -s
sozinho, então ele executa a shell do seu usuário interativamente. Nesse modo, ele difere de sudo bash
em que ele pode executar um shell diferente de bash
, pois ele fica em primeiro lugar na variável de ambiente SHELL
e, se isso não for definido, na configuração do shell de login do usuário, normalmente em /etc/passwd
.
O shell executado por sudo -s
herda seu ambiente de usuário atual. Se o que você realmente quer é um ambiente limpo, como ocorre após o login, o que você deseja é sudo -i
, uma adição relativamente recente a sudo
. Grosso modo, sudo -i
é para sudo -s
como su -
é para su
: redefine todas, exceto algumas variáveis-chave de ambiente, e envia de volta para o diretório inicial do usuário. Se você também não der comandos para executar sob esse shell via 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 de seu usuário (por exemplo, .bash_profile
) sejam executados novamente. / p>
Tudo isso torna sudo -i
consideravelmente mais seguro que sudo -s
. Por quê? Porque se alguém puder modificar seu ambiente antes de sudo -s
, eles poderão causar comandos não intencionais a serem executados. O caso mais óbvio é modificar SHELL
, mas também pode acontecer menos diretamente, como por meio de PAGER
se você disser man foo
enquanto estiver sob sudo -s
.
Você pode dizer: "Se eles puderem modificar o PAGER
, poderão modificar o PATH
e poderão substituir um programa malvário sudo
", mas alguém suficientemente paranoico poderá dizer /usr/bin/sudo /bin/bash
para evitar essa armadilha . Você provavelmente não é tão paranoico que também evita as armadilhas em todas as variáveis de ambiente suscetíveis outras . Você também se lembrou de verificar EDITOR
, por exemplo, antes de executar qualquer comando VCS ? Assim sudo -i
.
Como sudo -i
também altera seu diretório de trabalho para o diretório inicial do usuário, talvez você ainda queira usar sudo -s
nas situações em que você sabe que deseja permanecer no mesmo diretório em que estava cd
d em quando você correu sudo
. Ainda é mais seguro voltar a sudo -i
e cd
para onde você estava.