Usando o comando sudo e arquivo sudoers no Linux
Linux e Unix

Usando o comando sudo e arquivo sudoers no Linux




Podemos rodar aplicações com privilégios administrativos de duas formas no Linux: usando o comando su para efetuar logon como usuário root, ou usando o sistema sudo. Neste artigo vamos trabalhar com o sudo. Caso queira mais informações sobre o comando su, acesse o link a seguir:
http://www.planetaunix.com.br/2014/08/comando-su-o-comando-su-substitute-user.html


A palavra sudo significa "substitute user do". O sudo permite que um usuário rode programas como se fosse um outro usuário os rodando - geralmente como usuário root. Desta forma podemos atingir um nível de segurança muito maior no sistema - evitando que seja necessário efetuar logon como root para realizar tarefas administrativas, além é claro de poder especificar exatamente o que os usuários podem, ou não, fazer no sistema.


Vantagens do sudo


Segurança do sudo
Tanto o sudo quanto o comando su são baseados em segurança por senha, compartilhando os mesmos pontos fortes e fracos nesse quesito. Se a senha for comprometida, o sistema estará comprometido. Porém, se a senha de um usuário do sudo for comprometida, pode ser que não tenhamos um problema geral em nosso servidor - tudo vai depender do que exatamente o usuário era capaz de realizar no sistema com o sudo.
Além disso, usando o sudo para executar um comando único é muito mais seguro do que efetuar logon como root para realizar esse tipo de tarefa - podemos simplesmente esquecer de voltar para nossa conta de usuário comum, deixando o sistema vulnerável.


Vamos ver agora como utilizar o sudo.


Usando o sudo
Primeiramente, verifique se o pacote sudo está instalado em seu sistema com o comando a seguir:
$ which sudo


Caso não esteja instalado, instale-o com um dos comandos a seguir (tem de ser root):
apt-get install sudo # sistemas Debian / Ubuntu
ou
yum install sudo # sistemas Red Hat / CentOS / Fedora


Para usar o sudo basta digitá-lo antes do comando que queremos executar. Por exemplo, quero executar o comando ifconfig no sistema com privilégios de usuário root usando o sudo:
$ sudo ifconfig


Opções do sudo
O comando sudo possui diversas opções que podem ser usadas, sendo as mais comuns as seguintes:


-u usuário Faz com que o sudo rode o comando especificado na sequência como o usuário listado, e não o root.
-b Faz com que o comando listado seja executado em background.
-l Sem especificar comandos para execução, a opção -l lista os comandos permitidos e proibidos para o usuário atual.
-v “validate”. Atualiza o timestamp do usuário, estendendo o timeout do sudo por mais 5 minutos (ou o valor especificado no arquivo sudoers) sem rodar nenhum comando.
-k “kill”. Invalida o timestamp do usuário de modo que da próxima vez que o sudo for usado, a senha será requerida. Essa opção não requer senha. Se for seguida de um comando, pedirá sempre a senha para executá-lo.


O sudo é configurado pela edição do arquivo de configuração /etc/sudoers, para que possamos dar aos usuários as permissões adequadas para rodar programas. Porém, não iremos editar diretamente esse arquivo - iremos usar o comando visudo para isso. O utilitário visudo trava, edita e verifica a gramática do arquivo sudoers; Por padrão, o visudo chama o editor vi (ou o nano, dependendo do sistema). Podemos alterar o editor de textos que será usado configurando as variáveis de ambiente SUDO_EDITOR, VISUAL ou EDITOR. Por exemplo, vamos ajustar o editor padrão da máquina para que seja usado o vi com o comando a seguir (tem de ser root):


$ export EDITOR=$(which vi)


Caso queira usar o nano:
$ export EDITOR=$(which nano)


Sempre use o visudo para efetuar alterações no arquivo /etc/sudoers. Se houver algum erro neste arquivo você poderá ter problemas graves em seu sistema, e talvez tenha até de usar um cd de recuperação para conseguir se logar novamente.


Os comentários neste arquivo se iniciam sempre com o caractere #, como é comum nos arquivos de configuração do Linux.


Especificando Privilégios de Usuários


O formato básico de uma linha no arquivo sudoers que especifica os privilégios de usuários é o seguinte:
lista_usuários lista_hosts = (lista_runas) lista_comandos


Onde:

Usando Aliases


Um alias nos permite renomear ou agrupar usuários, hosts ou comandos. O formato de uma definição de alias no arquivo sudoers é como segue:
tipo_alias  nome_alias = lista_alias
Onde
tipo_alias é o tipo do alias, o qual pode ser User_Alias, Runas_Alias, Host_Alias ou Cmnd_Alias;
nome_alias é o nome dado ao alias - por convenção, todo em letras maiúsculas;
lista_alias é uma lista de itens separados por vírgulas dos elementos que formam o alias. Precedendo um elemento com o símbolo ! o nega.


Tipos de aliases
User_Alias: a lista de alias para um User_Alias é o mesmo que a lista de usuários em uma especificação de privilégios. Por exemplo, as linhas a seguir definem três aliases de usuários: RH, ADMIN e ENGENHEIROS. O alias RH define três usuários (maria, rita e jorge); o alias ADMIN define o usuário fabio e os membros do grupo admins, e o alias ENGENHEIROS define o usuário fabio, membros do grupo admins exceto o usuário marcos:


User_Alias RH = maria, rita, jorge
User_Alias ADMIN = fabio, %admins
User_Alias ENGENHEIROS = fabio, %admins, !marcos


Runas_Alias: Alias para a lista de usuários como os quais rodamos os comandos especificados. Por exemplo, a seguinte linha especifica o alias FORMATAR que inclui os usuários fabio e ana, ambos com permissão de formatar discos:


Runas_Alias FORMATAR = fabio, ana


Host_Alias: Trata-se de uma lista de hosts onde os comandos poderão ser executados (desde que esses hosts referenciem o mesmo arquivo sudoers). Por exemplo, vamos definir um alias de host para as máquinas servidor01 e servidor02, de nome SERVIDORES:


Host_Alias SERVIDORES = servidor01, servidor02


Cmnd_Alias: Lista de comandos específicos. Por exemplo, a linha a seguir cria um alias de comandos para os comandos mount e umount, de nome MONTAGEM:


Cmnd_Alias MONTAGEM = /bin/mount, /bin/umount

Trabalhando com opções padrão: DEFAULTS


Podemos alterar algumas opções de configuração padrão usando a palavra chave Defaults. A maior parte dos valores nesta lista são flags booleanas (ligado/desligado) ou strings de texto. Para ligar uma flag basta nomeá-la em uma das linhas Defaults, e podemos desligar um flag precedendo-o com o símbolo !. Por exemplo, podemos ligar o flag tty_tickets e desligar o flag fqdn usando a seguinte linha:


Defaults tty_tickets,!fqdn


A tabela abaixo lista alguns flags comuns. A lista completa pode ser consultada nas páginas de manual do arquivo sudoers.

Flag
Significado
env_reset
Faz com que o sudo reconfigure as variáveis de ambiente para conter apenas as variáveis LOGNAME, SHELL, USER, USERNAME, MAIL e SUDO_*
fqdn
Realiza lookups DNS em FQDNs (Fully Qualified Domain Names). Quando esta flag está ativa, podemos usar FQDNs no arquivo de sudoers. Porém, isso pode afetar negativamente a performance do sudo - principalmente se o servidor DNS não estiver funcionando corretamente.
insults
Mostra “insultos” leves e humorísticos quando um usuário digita uma senha errada. Por padrão está desligado.
lecture=freq
Controla quando o sudo mostra uma mensagem de aviso antes do prompt de senha. Os valores de freq podem ser never, once e always. O padrão é once.
mail_always
Envia um email para o usuário listado em mailto toda vez que um usuário usar o sudo. Por padrão está desligada.
mail_badpass
Envia um email para o usuário listado em mailto quando um usuário digita uma senha incorreta ao usar o sudo.
mailto=endereço
Envia as mensagens de erro e avisos para o endereço (email, cujo padrão é o do root). Endereços de email que possuam caracteres especiais devem ser digitados entre aspas.
passwd_timeout=minutos
Número de minutos antes que um prompt de senha do sudo dê time out (expire). O valor zero indica que a senha não expira. O padrão é 5 minutos.
passwd_tries=num
Número (num) de vezes que um usuário pode digitar uma senha incorreta antes que o sudo feche. O padrão é 3 vezes.
tty_tickets
Faz com que o sudo autentique os usuários com base em tty (terminal), e não com base em suas contas de usuário. O padrão é ligado.

Vamos ver agora alguns exemplos de configuração do arquivo /etc/sudoers:


Exemplos
1. Vamos dar à usuária ana permissão de executar qualquer comando, em qualquer computador, como se fosse qualquer usuário. Para isso, adicionamos a linha abaixo ao arquivo /etc/sudoers:
ana ALL=(ALL) ALL


2. Vamos dar ao usuário jorge o privilégio de executar qualquer programa em qualquer computador como se fosse o usuário root:
jorge ALL=(root) ALL


3. Agora, a usuária renata poderá apenas montar e desmontar partições usando os comandos mount e umount, em qualquer sistema, como usuário root:
renata ALL=(root) /bin/mount, /bin/umount


Testando: vamos tentar montar e desmontar a partição /dev/sdb1 no diretório /backup com o usuário marcos (não está no sudoers), usando o sudo:
$ su marcos
$ sudo mount -t ext 4 /dev/sdb1 /backup
Veja que não foi possível montar a partição. Vamos tentar então com a usuária renata:
$ exit
$ su renata
$ sudo mount -t ext 4 /dev/sdb1 /backup
Parece ter funcionado. Vamos ver se a partição foi realmente montada:
S df -h | grep /backup
Perfeito! Partição montada com sucesso!
Vamos desmontá-la agora (ainda como renata):
$ sudo umount -t ext4 /backup
Perfeito também - sem nenhum erro. Se desejar, verifique com df -h.


Vamos tentar também executar o comando apt-get update com o usuário renata (ela não tem essa permissão de acordo com o sudoers):
$ sudo apt-get update
Esse comando ela não pode executar, pois não foi dada permissão no /etc/sudoers. Portanto, nossa configuração funcionou perfeitamente.


4. Trabalhando com grupos: vamos permitir que os usuários de um grupo chamado “redes” sejam capazes de executar o comando ifconfig, que por padrão só pode ser executado pelo root. Veja a usuária renata tentando executar o ifconfig, sem e com o sudo:
$ ifconfig
$ sudo ifconfig
Ela não consegue. Vamos então criar o grupo redes e adicionar a renata a esse grupo:
$ su
$ groupadd redes
$ adduser renata redes


E agora vamos editar o arquivo /etc/sudoers para dar permissão de execução do ifconfig a esse grupo. Para isso, edite o arquivo com visudo e acrescente a linha a seguir:
%redes ALL=(root)  /sbin/ifconfig


Salve e saia do arquivo.
Agora vamos testar novamente o comando com a usuária renata e o sudo (será necessário efetuar logout e login no sistema novamente, ou reiniciá-lo, pois os membros dos grupos são avaliados durante o processo de login):
exit
su renata
sudo ifconfig
Agora ela conseguiu executar o ifconfig. Todos os usuários que forem membros do grupo redes também o conseguirão.


5. Vamos ver um exemplo com aliases agora. Criaremos um alias de comandos (Cmnd_Alias) chamado MONTAGEM para os comandos mount e umount, e aplicaremos esse alias ao usuário marcos. Acrescente as linhas a seguir ao arquivo /etc/sudoers (use o visudo):
Cmnd_Alias MONTAGEM = /bin/mount, /bin/umount
marcos ALL=(root) MONTAGEM


Após salvar e sair do arquivo de sudoers, faça logoff e logon no sistema, e vamos testar para ver se o marcos consegue montar e desmontar a partição /dev/sdb1 no ponto de montagem /backup:
$ su marcos
$ sudo mount -t ext4 /dev/sdb1  /backup
$ mount | grep sdb1
Agora o usuário marcos consegue montar e desmontar partições como se fosse root.


Para saber mais sobre o utilitário sudo e o arquivo sudoers, consulte as páginas de manual correspondentes.
Até a próxima!




Eu
Sobre Fábio dos Reis

Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Astronomia, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.



loading...

- Comando Sudo - 02 - Atribuindo Privilégios Aos Usuários Com Visudo No Linux
Comando sudo - Atribuindo privilégios aos usuários com visudo no Linux Neste vídeo vamos mostrar como atribuir privilégios de acesso aos usuários do Linux no arquivo sudoers, com o comando visudo. Este vídeo é parte integrante do Curso de Linux...

- Comando Sudo - 03 - Usando Aliases E Grupos Com O Visudo No Linux
Comando sudo - Usando aliases e grupos com o visudo no Linux Vamos aprender neste vídeo a usar aliases (nomes alternativos) e grupos no arquivo de sudoers, com o comando visudo. Este vídeo é parte integrante do Curso de Linux Completo / Certificação...

- Criando E Excluindo Usuários No Mac Os X Pelo Terminal (linha De Comandos)
Vamos aprender a criar um usuário e seus atributos usando o Terminal no Mac OS X. Primeiramente, precisamos descobrir os uids dos usuários do sistema. Os UIDs dos usuários comuns começam a ser contados a partir de 501. Precisamos descobrir o uid...

- Comando At - Agendamento De Comandos - Linux
O utilitário at lê comandos a partir da entrada padrão ou de um arquivo especificado, os quais serão executados em um período futuro, usando-se /bin/sh. A configuração é feita em um prompt interativo. Sintaxe:at hora_do_dia hora_do_dia pode...

- Montando Partições Formatadas No Linux
Na terceira parte de nosso tutorial sobre instalação de discos no Linux, veremos o processo de montagem de partições. No tutorial Formatação de Partições no Linux nós preparamos as partições que serão montadas nesse tutorial.Montar uma partição,...



Linux e Unix








.