Dicas e truques de configuração do SUDO para Linux e UNIX

Nos sistemas operacionais baseados no Linux ou no UNIX (MacOS, FreeBSD etc) há tarefas administrativas, que só podem ser executadas com privilégios de superusuário (root).
O comando sudo nasceu da necessidade do sysadmin delegar algumas destas tarefas a outros usuários do sistema — sem precisar expôr a própria senha.
captura de tela comando sudo
Usuários pertencentes ao grupo “sudo”, podem assumir privilégios superiores com o uso da própria senha — sem ter conhecimento da senha do root, portanto.
Quem usa o computador sozinho, pode fazer tudo como usuário comum. Eventualmente, pode “se investir de poderes especiais”, com o uso do sudo — e voltar à segurança de um usuário comum, logo em seguida.
Uma, dentre muitas tarefas comuns a todo usuário, por exemplo, é atualizar o sistema. O comando permite fazer isso, sem exigir que se autentique como root.
Na configuração padrão do sudo, usuários com acesso ao comando podem realizar as seguintes tarefas (entre outras):

  • Acessar dispositivos restritos do hardware.
  • Formatar e alterar sistemas de arquivos.
  • Instalar novos aplicativos e configurar áreas sensíveis do sistema.

Como configurar o comportamento do sudo no meu sistema

O arquivo de configuração do sudo é o /etc/sudoers. Contudo, as boas práticas de segurança, recomendam sempre usar o programa visudo para alterar este arquivo:


sudo visudo


Dentro do arquivo de configuração, há uma sessão com várias linhas. Cada uma delas começa com uma entrada Defaults.
Você pode alterar o comportamento do sudo:

  • editando uma destas linhas — removendo ou editando algum parâmetro ou, ainda, acrescentando um novo.
    Para acrescentar, vá até o final da linha e acrescente uma vírgula seguida do novo parâmetro desejado;
  • adicionando uma nova linha Defaults, seguida da tabulação e dos parâmetros de configuração que você deseja acrescentar.

Por ser muito usado no Linux, já escrevi alguns artigos sobre o sudo (veja a lista no final deste texto). Não esqueça também de dar uma olhada nas tags visudo e sudo, para obter mais informações sobre o uso da ferramenta.
sudo sudoers environment variables
Algumas pessoas, por questão de organização, preferem ter uma linha Defaults exclusiva para cada parâmetro de configuração.
Acompanhe as dicas, para entender melhor.

Edite corretamente o /etc/sudoers

Trata-se de uma dica de segurança.
O UNIX e o Linux são sistemas operacionais projetados para atender uma grande quantidade de demandas e usuários simultâneos.
O visudo bloqueia o acesso de outros usuários ao /etc/sudoers, enquanto você o estiver editando.
Portanto, use sempre o visudo para ajustar o sudo no seu sistema. Não edite o /etc/sudoers diretamente.
Além disso, o visudo faz uma análise do sudoers, logo depois da edição.
Se houver erros, ele avisa e permite que você volte para alterar e corrigir o arquivo.

Organize os Defaults

Como já disse, você pode adicionar vários parâmetros e valores por linha ou abrigar um único parâmetro por linha.
A escolha é sua.
A configuração, abaixo


Defaults        env_reset,timestamp_timeout=5,pwfeedback

tem o mesmo efeito desta


Defaults        env_reset
Defaults        timestamp_timeout=5
Defaults        pwfeedback

Eu gosto do segundo método de organizar os ajustes, pois ele permite adicionar um comentário (com ‘#’) ao final de cada linha.
A forma mais comum de usar a palavra-chave é assim: Defaults. Mas em sistemas mais complexos, com um grande número de usuários, em que o sysadmin deseja delegar especificamente e com abrangência, há outras formas de uso. Veja:

  • Defaults parameter, parameter_list — # os parâmetros desta configuração afetam todos os usuários autenticados no host.
  • Defaults@Host_List parameter, parameter_list # afeta todos os usuários logados no especificado em @Host_List.
  • Defaults:User_List parameter, parameter_list #afeta todos os usuários especificados na lista :User_List.
  • Defaults!Cmnd_List parameter, parameter_list #afeta os comandos especificados na lista !Cmnd_List.
  • Defaults>Runas_List parameter, parameter_list #afeta comandos listados, desde que executados por um usuário específico.

Como criar um arquivo de log do sudo

Como comportamento padrão, o sudo envia o log ou relatório sobre o que ocorreu durante o seu uso para o syslog(3).
Opcionalmente, você pode criar um arquivo para receber este relatório.
Adicione a seguinte linha:


Defaults        logfile="/var/log/sudo.log"

Se quiser que o seu arquivo de log contenha informações sobre o host e o ano relacionados às ações relatadas, use assim:


Defaults        log_host,log_year,logfile="/var/log/sudo.log"

Para poder ver o conteúdo do seu novo arquivo de log, use o sudo e o cat:


sudo cat /var/log/sudo.log

Jun 12 15:32:09 2017 : justincase : HOST=s5ultra : TTY=pts/0 ;
    PWD=/home/justincase ; USER=root ; COMMAND=/bin/ls
Jun 12 15:32:43 2017 : justincase : HOST=s5ultra : TTY=pts/0 ;
    PWD=/home/justincase ; USER=root ; COMMAND=/usr/sbin/visudo
Jun 12 15:34:46 2017 : justincase : HOST=s5ultra : TTY=pts/0 ;
    PWD=/home/justincase ; USER=root ; COMMAND=/bin/cat /var/log/sudo.log

Leia mais dicas e truques para usar com o sudo:

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Referências

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Getting_Started_Guide/ch02s03.html.
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/.

Exemplos de loops no Bash

Mesmo não querendo se dedicar a aprender e entender melhor os meandros da linguagem de programação de scripts Bash, pode ser útil conhecer alguns de seus conceitos.
Saber criar loops é um destes conhecimentos básicos que vale a pena adquirir.
Um pequeno script pode ajudar a poupar uma enormidade de tempo, no dia a dia de qualquer usuário, de qualquer sistema operacional.
Se achar melhor, adicione esta página aos seus favoritos (Ctrl + D), para ter uma referência rápida no futuro. 😉

Os diferentes tipos de loops do Bash

Os loops (ou laços) são expressões presentes em todas (ou quase todas) as linguagens de programação. Além disso, podem se dividir em tipos diferentes.
No Bash, você pode usar for, while e until.
Veja em que casos cada um é mais indicado:

  • for — se você tem experiência com outras linguagens de programação, no Bash, o for é um pouco diferente da maioria.
    Basicamente é usado para te permitir iterar entre uma série de palavras dentro de uma string.
  • while — executa um pedaço de código, caso a expressão de controle seja verdadeira. Ele só irá parar quando ela for falsa — ou quando encontrar um break explícito no meio do código em execução.
  • until — muito semelhante ao while, exceto pelo fato de que o código é executado enquanto a expressão de controle é falsa.

Segue alguns exemplos simples, que você pode usar para compor ou construir um código mais sofisticado, para atender melhor às suas necessidades.

Exemplos de uso do for

Você pode experimentar este código diretamente na linha de comando do sistema, como no exemplo abaixo


for i in $( ls ); do
> echo item: $i
> done

… ou pode abrir um editor e escrever o código dentro dele e gravar com algum nome. O meu, vou gravar como exemplo-for.sh:


#!/bin/bash
for i in $( ls ); do
   echo item: $i
done

Explicando o código…

  • A primeira linha informa ao sistema que o arquivo deve ser executado com o programa /bin/bash.
  • Na segunda linha declaramos a variável i como repositório dos diferentes valores contidos em $( ls ).
  • A terceira linha expõe o valor atual de i.
  • Por fim, done informa que chegamos ao final do laço for e, se não houver mais nada a ser feito, o programa para por aqui — ou segue sendo executado.

Depois de gravado, execute-o com o bash


bash exemplo-for.sh

Experimente também este script, para colorir texto:


#!/bin/bash
for fg in {30..39}
do
    echo -e "\e["$fg"m apenas um texto colorido pelos caracteres de escape do BASH."
done

vim syntax color

Como criar um loop while no Bash

Veja um exemplo simples de laço while (enquanto), no Bash:


#!/bin/bash
contador=0
while [ $contador -lt 10 ];
do
    echo O valor atual do contador é: $contador
    let contador=contador+1
done

O argumento -lt pode ser abreviatura de less than ou lower than, que significame “menos que” ou “menor que”, em uma tradução livre.
Da mesma forma, usa-se -gt, como abreviatura de greater than, para “maior que”.

Exemplo de uso do until no Bash

Se eu fosse traduzir livremente a linha until [ $contador -lt 10 ]; no exemplo abaixo, eu diria “até que (until) a variável contador seja menor que 10…”
Experimente o código e veja o resultado:


#!/bin/bash
contador=30
until [ $contador -lt 10 ];
do
    echo O valor do meu contador é igual a $contador
    let contador-=1
done

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Personalize a mensagem de senha errada do sudo no seu sistema

O sudo permite customizar a mensagem exibida a cada vez que se erra na digitação da senha de autenticação.
Isto é feito através da inclusão ou edição do valor do parâmetro badpass_message=.

Siga o procedimento, abaixo, para criar uma mensagem personalizada de aviso de senha errada, para o sudo.
Abra o editor padrão de edição do sudoers:


sudo visudo

Em seguida vá até seção que tem os parâmetros Defaults.
Inclua mais um:


Defaults        badpass_message="Não posso deixar você fazer isso, Dave."

Eu usei uma frase do filme de Stanley Kubrick, 2001: Uma Odisseia no Espaço.


Leia mais dicas de configuração do comando sudo, clicando na tag visudo e/ou sudo.

A opção insults, no sudoers, se sobrepõe a badpass_message.
Mas você pode desativar qualquer parâmetro Defaults, inserindo um ‘#’ no começo da linha dele.
O bad pass msg acaba sendo uma alternativa para sistemas “chatos” que usam um sudo compilado sem suporte a insults.
Em tempo, saiba mais sobre como “ofender” as pessoas que erram a senha no sudo, neste post.
Divirta-se!

Configure o sudo para fazer piadas quando o usuário erra a senha

A cultura hacker é extremamente forte entre usuários Linux/UNIX e a descontração, quando alguém comete um erro, sempre fez parte da comunidade.
O comando sudo, como comportamento padrão, admite até 3 tentativas de senhas erradas.
Depois disto, ele termina e envia uma mensagem ao root (administrador do sistema), informando sobre a “tentativa de obter privilégios” perpetrada pelo usuário em questão.
comando sudo insultos
As piadas ou “insultos”, são variados.
Veja alguns exemplos (com a minha tradução livre):

  1. You speak an infinite deal of nothing — “Você diz um amontoado de besteiras”
  2. Take a stress pill and think things over — “Tome um calmante e pare para pensar”
  3. That’s something I cannot allow to happen — “Taí uma coisa que eu não posso deixar acontecer”
  4. You silly, twisted boy you — “Seu tolo, você é um menino confuso”
  5. I have been called worse — “Já me chamaram de coisa pior”

Sinta-se à vontade para sugerir uma tradução diferente, nos comentários, caso não concorde com alguma (sem ofensas!) Sua contribuição será bem vinda. 😉

Como configurar o sudoers para ofender os usuários

Abra o arquivo de configuração do sudo com o visudo:


sudo visudo

localize a seção que tem os Defaults e acrescente uma linha com o seguinte conteúdo:


Defaults	insults

Se não quiser acrescentar uma linha, é possível apenas adicionar uma vírgula, seguida do parâmetro ‘insults’ a qualquer uma das linhas já existentes.
Veja como está esta sessão no meu arquivo de configuração sudoers:


Defaults        env_reset,timestamp_timeout=5,pwfeedback, insults
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin$
Defaults        insults

A depender do seu sistema, pode ser necessário se reautenticar para poder ver os efeitos da alteração.

Como obter a lista de insultos, ofensas e piadas do sudo

No Debian 9, a lista completa de insultos pode ser obtida no arquivo binário ‘/usr/lib/sudo/sudoers.so’.
Ele pode ser encontrado com o comando find, caso não esteja lá:


find /usr/lib/sudo -type f | xargs grep "fallen in the water"

Arquivo binário /usr/lib/sudo/sudoers.so coincide com o padrão

Por ser um arquivo binário, se você usar o comando cat nele, vai obter um monte “lixo” na sua tela.
Tente encontrar as frases com o seguinte comando, no terminal:


strings /usr/lib/sudo/sudoers.so | less

Agora digite ‘/dumber’ e as frases irão aparecer na tela.
No Askubuntu (link no final), é possível encontrar as várias listas de insultos, separadas por arquivos.
Minhas preferidas são as que usam falas do filme 2001: A Space Odissey (2001: Uma Odisseia no Espaço).
Veja algumas:

  • “Just what do you think you’re doing Dave?”
  • “It can only be attributed to human error.”
  • “That’s something I cannot allow to happen.”
  • “My mind is going. I can feel it.”
  • “Sorry about this, I know it’s a bit silly.”
  • “This mission is too important for me to allow you to jeopardize it.”
  • “I feel much better now.”

Desta vez, vai sem tradução…

sudo insults list
Sudo insults list.

Acho, ainda, importante frisar que certas frases, desta “brincadeira”, induzem a erro de interpretação, como os exemplos abaixo:

  • invalid authentication methods.
  • Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication.
  • There are no authentication methods compiled into sudo! If you want to turn off authentication, use the –disable-authentication configure option.
  • Unable to initialize authentication methods.

As mensagens acima podem levar um usuário desavisado a “entrar em parafuso” (se ele souber algum inglês, claro). Além disso, elas não fazem sentido algum para os propósitos do sudo.
Se você, como sysadmin, se incomoda com perguntas “inocentes” de usuários, ativar os insults pode não ser uma boa ideia.
Na dúvida, para não ter problemas, use uma mensagem personalizada para o sudo.

Referências

https://askubuntu.com/questions/837558/where-are-sudos-insults-stored/837562.

Como exibir asteriscos ao digitar a senha do SUDO

Tradicionalmente, na linha de comando do Linux/UNIX, a linha de autenticação, onde digitamos nossa senha, não exibe qualquer feedback.
Como recurso de segurança, este comportamento impede que alguém veja, por sobre o seu ombro, quantos caracteres a sua senha possui.
Os ambientes gráficos, contudo, têm comportamento padrão diferente.
Quase todos, exibem uma bola, um ponto ou um asterisco para cada caractere digitado.
O KDE Plasma permite configurar facilmente a tela de autenticação (KDM) para exibir 3 símbolos para cada caractere digitado — o que dá à sua senha a aparência de ser bem maior do que realmente é.
Vale tudo para enganar os bisbilhoteiros.
Se você prefere obter uma visualização da quantidade de caracteres digitados no seu campo de senha, na autenticação do sudo, pode fazer este ajuste no arquivo sudoers.
O procedimento é simples. Acompanhe os passos, abaixo:
Abra o arquivo de configuração:


sudo visudo

Em seguida, encontre a linha


Defaults		env_reset

e acrescente o parâmetro ,pwfeedback.
A linha deve ficar assim:


Defaults		env_reset,pwfeedback

Se você preferir, pode criar uma linha Defaults adicional com o novo parâmetro, assim:


Defaults		pwfeedback

Fica a seu critério.
sudo visudo password


Leia mais dicas de configuração e uso do comando sudo em ambientes Linux e UNIX.