No post anterior eu expliquei o
sudoe nesse eu vou explicar osu, vai seguir a exata mesma linha do outro post
O básico
O nome:
Pra começar, su não é o diminutivo de sudo, mas assim como o outro oo contrário do que muita gente pensa, su , não tem nada a ver com S uper U ser, mas sim de S ubstitute U ser, ou em português: Usuário Substituto
Pra que serve?
Como o nome indica, assim serve pra executar o comando como outro usuário, só que com 3 detalhes em especial, ao contrário do sudo você vai digitar a senha do usuário que rodou o comando o outro detalhe diferente do sudo está no uso padrão
O básico
Lembra que no sudo você precedia um comando pra ele funcionar? Então, aqui é um pouco diferente, você vai digitar apenas su:
su
A grande diferença
Se você digitou sua senha no passo anterior, a menos que sua senha de root seja a mesma que a do seu usuário normal, você não vai conseguir rodar, e está aqui a grande diferença entre su e sudo:
- No
sudovocê digita a sua senha pra executar um comando como outro usuário - No
suvocê digita a senha do usuário que vai executar o comando
Apenas para exercício defina uma senha pro usuário root, com o comando abaixo:
Coloque uma senha diferente do seu usuário:
sudo passwd root
sudo -k
Agora experimente rodar su novamente, mas dessa vez, digite sua senha (o esperado é que dê erro mesmo), e depois digite a senha que você acabou de definir… o resultado disso nos leva a:
A pequena diferença
Lembra que no sudo você precede o comando com sudo?
sudo apt update
No su não se tem essa necessidade, ele já vem com um comando predefinido, mas… que comando é esse? Porque eu posso digitar vários comandos nele? Não deveria ser um comando só e fechou? É o bash?
Esse comando é o shell padrão do usuário (interface para digitar comandos), geralmente é bash mas isso não é regra. Na prática essa interface é essencialmente a mesma coisa que o GNOME Shell, ou um KDE Plasma da vida, só que em modo texto, existem diversos “shells” pra Linux talvez um dia eu faça um post sobre
O não tão básico
Talvez já fosse esperado porque não perguntou o usuário, mas o su também possui opções que modificam seu comportamento, e assim como o sudo elas podem ser separadas em agrupáveis e não agrupáveis:
Agrupáveis
Essas opções você pode colocar vários de uma vez só sem colocar espaço, basicamente coloque um - e coloque as letras correspondentes, por exemplo, se você quer usar as opções l e p, ao invés de fazer -l -p você pode, opcionalmente, fazer -ml:
| Parâmetro | O que faz |
|---|---|
l |
Simula um login |
m |
Preserva as variáveis ambientes |
Nota sobre
l:
Ele causa alguns efeitos interessantes:
Todos os serviços que iniciam ao fazer login no terminal são iniciados, um exemplo é o “message of the day”
O diretório muda para a pasta pessoal do usuário
Ela corta o efeito de
m, para preservar variáveis ambiente use-w
Observação
Apesar de serem agrupáveis
mé anulado porl
Não agrupáveis
Esses comandos você precisa colocar separadamente e precisa especificar um valor, por exemplo, para usar -c junto com m e l você usa ela assim por exemplo: -ml -c "touch Natanael"
| Parâmetro | O que faz |
|---|---|
-c |
Ao invés de executar o shell do usuário o su executa o comando especificado |
-g |
Especifica o grupo principal do usuário, só funciona com o usuário root |
-s |
Usa um shell alternativo, apesar de parecer sem sentido já que temos -c esse parâmetro não permite que você passe “acidentalmente” argumentos pra ele |
-w |
Permite passar uma lista de variáveis ambientes que devem ser preservadas, por padrão o su não preserva nenhuma, usando m todas são preservadas e l ignora m, logo seria necessário uma opção que permitisse preservar apenas algumas e que funcionasse com -l, e é aí que -w entra ela recebe uma lista separada por, por exemplo digamos que você quer preservar as variáveis LS_COLORS, PS1 e EDITOR, você usaria assim: -w LS_COLORS,PS1,EDITOR |
Nota sobre
-c:O
sutrata cada parâmetro individualmente então se você passar-c touch Natanael 123osuvai passar apenas otouchpara-c,Natanaele123são passados como parâmmetros para osu, o resultado é que você vai obter ou um erro de “Falha na autenticação” ou um erro de “Missing file operand”. Para corrigir isso, coloque o comando entre aspas simples com os parâmetros que contém espaços entre aspas duplas, exemplo:su -c 'touch "Natanael 123" 'Caso seu comando tenha a necessidade de ter aspas simples, lembre-se de colocar uma barra invertida como essa
\antes das aspas simples, assim:su -c 'echo "And i\'m Iron Man" '
Ok, vimos os parâmetros mais úteis, mas…
Como muda de usuário?
E não podia ser mais simples, depois que você passou todos os seus parâmetros, o último é justamente o nome de usuário, exemplo usando m, -s e c com o usuário flakboy:
su -m -s "/usr/bin/fish" -c 'echo "And i\'m Iron Man" ' flakboy
Desfazendo sudo passwd root
No começo do artigo para fins didáticos eu incentivei a definir uma senha para o usuário root, como alguns usuário podem se sentir desconfortáveis com a idéia (já que isso é bem estilo Windows) você pode desfazer com:
sudo passwd --lock "root"
Fonte: man su
Esse artigo complementa o atico sobre o sudo: Entendendo o sudo (o principal)
E se esse artigo foi útil, considere mandar um PIX de qualquer valor para:
natanaelpix@gmail.com


!
por exemplo. Aí dentro das possibilidades de vcs, vão respondendo… Naturalmente a comunidade de veteranos é muito maior (ainda bem
) e todos são incríveis, mas estas são as pessoas que interagi mais.