terça-feira, 9 de fevereiro de 2010

SUDO vindo lá de Recife

Olá pessoal!
Mais uma dica utilíssima enviada pelo amigo Jader Monte, de Recife. Dica para usuários Linux. Viva o pinguim!!! 

Configurando e usando o SUDO

A segurança é um dos aspectos mais discutidos no âmbito da administração de sistemas, isso é especialmente importante, porque é preciso proteger informações valiosas e manter um rígido controle sobre as permissões de acesso à essas informações.

Dentro desse paradigma, o usuário ROOT (administrador) dos sistemas *unix possui acesso incondicional e completo ao sistema, podendo acessar qualquer tipo de dados. Por isso, é extremamente aconselhável que o usuário root só seja utilizado para tarefas administrativas que realmente exijam os poderes deste usuário.
Contudo, é comum que em certas organizações haja mais de um administrador de sistemas, ou frequentemente haja a necessidade de que usuários comuns façam uso de uma ou algumas funções que somente o administrador poderia utilizar.

Ainda há uma outra necessidade, como controlar o uso e manter um controle rígido sobre a utilização dos poderes administrativos em um sistema, se até mesmo essas informações poderiam ser alteradas por um usuário com poderes de root?

Para resolver questões como essas, e para permitir um controle mais rígido e eficaz sobre o uso administrativo é que chegamos a ferramenta conhecida como SUDO.

De maneira resumida, o SUDO permite a um administrador de sistemas dar a usuários específicos a habilidade de executar alguns ou todos os comandos como root ou outro usuário do sistema, enquanto essas ações são completamente registradas em um relatório para posterior análise.

Isso também evita que vários usuários possuam a senha de root já que será através do sudo que os comandos serão executados.

Nesse artigo, estou utilizando o Centos 4.x. Em algumas distribuições o sudo pode vir instalado como padrão, ou você pode simplesmente utilizar um gerenciador de pacotes para instalá-lo, nesse artigo caso minha opção é compilá-lo pelo source code.

Instalação do Sudo

Se você possuir o wget instalado, poderá baixar o sudo para a pasta /usr/local executando:
[root@srv01 ~]# cd /usr/local; wget http://www.sudo.ws/sudo/dist/sudo.tar.gz

Agora nós iremos descompactá-lo:
[root@srv01 local]# tar zxvfp sudo.tar.gz

Acessamos seu diretório criado (o nome do diretório poderá variar de acordo com a versão do sudo instalado):
[root@srv01 local]# cd sudo-1.6.9p8/

Executamos o ./configure que irá checar se existem os pré-requisitos necessários à instalação e preparar para compilação:
[root@srv01 sudo-1.6.9p8]# ./configure

Em meu caso eu precisei instalar algumas bibliotecas do PAM para que a compilação fosse bem sucedida, fiz isso utilizando o YUM:
[root@srv01 sudo-1.6.9p8]#yum install pam*
Complete!
[root@srv01 sudo-1.6.9p8]#

Compilamos agora:
[root@srv01 sudo-1.6.9p8]# make

E finalmente instalamos sudo, visudo, as páginas man e um esqueleto do arquivo sudoers:
[root@srv01 sudo-1.6.9p8]# make install

Para testar o funcionamento do sudo, eu criei um usuário chamado teste:
[root@srv01 sudo-1.6.9p8]# useradd teste
[root@srv01 sudo-1.6.9p8]# passwd teste
passwd: all authentication tokens updated successfully.

[root@srv01 sudo-1.6.9p8]#

Agora eu loguei como o usuário teste em meu sistema, e tentei reiniciar o sistema, mas eu não possuo permissão para isso:
[teste@srv01 ~]$ /sbin/shutdown -r now
shutdown: you must be root to do that!
[teste@srv01 ~]$

Quero através do sudo reiniciar meu sistema, tento então:
[teste@srv01 ~]$ sudo /sbin/shutdown -r now
Password: (aqui é a minha própria senha – usuário teste)
teste is not in the sudoers file. This incident will be reported.
[teste@srv01 ~]$

Ele informa que o usuário teste não está no /etc/sudoers, ou seja, não possui permissões para fazer isso.

Como root novamente, eu irei agora adicionar permissão para que o usuário teste reinicie o sistema, utilizamos o software visudo para editar o arquivo /etc/sudoers:
[root@srv01 sudo-1.6.9p8]# visudo

No meu arquivo de configuração eu adicionei uma linha como essa:
teste ALL=/sbin/shutdown -r now

Salvo minhas alterações e volto para o meu terminal que está logado com o usuário teste, e faço:
[teste@srv01 ~]$ sudo /sbin/shutdown -r now

Broadcast message from root (pts/1) (Tue Nov 13 09:52:18 2007):

The system is going down for reboot NOW!
[teste@srv01 ~]$

Meu sistema acaba de ser reiniciado! Se você desejasse por exemplo, permitir que um grupo de usuários executasse todos os comandos, poderia definir assim:
%grupo ALL=(ALL) ALL

O sudo utiliza o syslogd para registrar os relatórios:
[root@srv01 ~]# tail -f /var/log/messages

Exemplo de comandos barrados:
Nov 13 09:55:39 srv01 sudo: teste : command not allowed ; TTY=pts/1 ; PWD=/home/teste ; USER=root ; COMMAND=shutdown
Nov 13 09:55:41 srv01 sudo: teste : command not allowed ; TTY=pts/1 ; PWD=/home/teste ; USER=root ; COMMAND=/sbin/shutdown

Exemplo de comandos permitidos:
Nov 13 09:56:43 srv01 sudo: teste : TTY=pts/1 ; PWD=/home/teste ; USER=root ; COMMAND=/sbin/shutdown -r now

Caso queira conhecer outras possibilidades, acesse a documentação oficial do sudo ou utilize as páginas man.

That's all. Dúvidas sobre qualquer assunto relacionado à tecnologia? É só perguntar.

Um comentário: