No post anterior eu expliquei o
sudo
e 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
sudo
você digita a sua senha pra executar um comando como outro usuário - No
su
você 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
su
trata cada parâmetro individualmente então se você passar-c touch Natanael 123
osu
vai passar apenas otouch
para-c
,Natanael
e123
sã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