Entendendo o su (o principal)

No post anterior eu expliquei o sudo e nesse eu vou explicar o su, 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 por l

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 o su vai passar apenas o touch para -c, Natanael e 123 são passados como parâmmetros para o su, 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

9 Curtidas

Ficou muito bom.
:clap:

Só um sugestão
Você esqueceu de colocar o - sozinho

su sem o traço você entra na pasta que está aplicando o su

E su -

Você entra na pasta do usuário root

1 Curtida

Já vi gente falando que sudo significa “Superuser Do”, isso clareou minha mente :joy:

Realmente, faz total sentido. XD

Excelente conteúdo @Natanael.755 , unindo com o primeiro texto, a obra fica completissíma! Parabéns e obrigada por compartilhar saberes!
Tenho encarado estes tutoriais do Diolinux Plus, como um verdadeiro curso sobre GNU/Linux!
E como quem recebe a mão também pede o pé rsrsrs, não seria nada mal uma introdução sobre shell script sabe… (uso o Bash mesmo) :roll_eyes: :joy: Mas tudo ao seu tempo, sem pressões!!!
Abraços a todas e todos :v: :laughing:!

2 Curtidas

Ah vai ter sim, com certeza eu preciso explicar algumas coisas antes, vou tentar aumentar a frequência de posts

2 Curtidas

Nooosa, vai ser sensacional @Natanael.755 , desde já muito obrigada! Mas reforço, sem pressa!

Lembro de uma postagem que vc comentou rapidamente sobre “absorção de conteúdo”, ou algo assim… cada vez mais entendo que isso é importante no processo de aprendizagem.

Graças a vocês eu finalmente possuo um conteúdo para estudo no qual eu realmente consigo compreender, mas preciso de tempo para assimilar todas as informações passadas e claro, praticar.

Mas com toda certeza, todos nós que somos iniciantes vamos gostar muito de um conteúdo como shell script em uma linguagem mais acessível (que é o que vcs já tem feito por aqui já)!

Mas por favor, não se sacrifique! Aí já não acho que seja muito justo contigo e com todos os demais “veteranos” digamos assim. Eu vou tentar rever minhas primeiras anotações que tem muita coisa que realmente não entendo, aí vou perguntando para o senhor, para o @RuKsu ou para o “Presto” @Rodrigo_Chile :joy: :heart: por exemplo. Aí dentro das possibilidades de vcs, vão respondendo… Naturalmente a comunidade de veteranos é muito maior (ainda bem :pray:) e todos são incríveis, mas estas são as pessoas que interagi mais.

Vcs já fizeram MUITO, sério, acho que vcs não conseguem dimensionar a importância de todo esse conteúdo compartilhado! Muito obrigada!!!

3 Curtidas