Comando sudo - instalação e configuração






Comando sudo - instalação e configuração

Ricardo Brito do Nascimento

http://brito.blog.incolume.com.br/2011/11/Comando sudo - instalação e configuracao.html

16 de abril de 2007

Resumo

O sudo permite um usuário em particular execute vários comandos como super usuário sem que possua sua senha, ou seja sem a senha do root.


Introdução

Sudo executa comandos como outro usuário, desde a sua implementação este programa foi projetado para permitir esta funcionalidade no sistema. Seu objetivo não é permitir uma execução de aplicativos em forma segura, mas simplesmente permite que o programador possa executar um programa como outro usuário (suid), usando as ferramentas sudo.



Este módulo não tornar o seu código ou a aplicação executada mais segura ou mais vulnerável, ele simplesmente permite um mecanismo de delegação que possibilita executar outros comandos como um usuário diferente. Isso requer um sistema configurado corretamente para obter os resutados adequados.



Descrição sobre o sudo

Há uma descrição completa do pacote em:

Instalação

Primeiramente devemos instalar o sudo para poder configurá-lo. Têm-se três possíveis maneira de instalar o sudo, pelos: fonte, binários e instaladores. Dependências: A instalação do sudo depende de outros módulos e bibliotecas que deverão ser instaladas anteriormente:
  • perl
  • make
  • Class::Accessor
  • IPC::Run

Instalação através de pacote fonte: O fonte do sudo pode ser obtido na URL abaixo. No pacote há os seguintes arquivos: Sudo-0.21/, Sudo-0.21/Changes, Sudo-0.21/lib/, Sudo-0.21/lib/Sudo.pm, Sudo-0.21/Makefile.PL, Sudo-0.21/MANIFEST, Sudo-0.21/README, Sudo-0.21/t/, Sudo-0.21/t/Sudo.t Como superusuário execute os passos seguintes: passo 1: baixar o pacote
# wget http://search.cpan.org/CPAN/authors/id/L/LA/LANDMAN/Sudo-0.21.tar.gz
passo 2: desempacotar
# tar -xvzf Sudo-0.21.tar.gz -C /tmp
passo 3: compilar
# perl Makefile.PL # make # make test
passo 4: instalar
# make install

Instalação através de pacote binário

Localize o binário referente a distro (FC6,Debian, ubuntu, slack, e outras) e plataforma (i386, amd64 e outras) utilizada.
Fedora: # rpm -Uvh sudo-1.6.8p12-10.i386.rpm
Debian: # dpkg -i sudo_1.6.8p7-1.4_i386.deb

Instalação através dos instaladores ou utilitários

Dentre os diversos instaladores, que sua função principal é calcular as dependências automaticamente, temos synaptic (fedora, mandriva, debian), aptitude (debian, ubuntu), yast (suse), apt (fedora, debian, e outros), yum (fedora). Existem inúmeras particularidades, iremos demonstrar os mais comuns.
APT: # apt-get install sudo
YUM: # yum install sudo

Configurando o sudo

O arquivo de configuração do sudo é o /etc/sudoers, onde se encontra as permissões e usuários que poderam executar algum comando. Geralmente, em algumas distros, este arquivo é protegido conta edição, existindo um comando exclusivo para manipulação, o comando visudo. O qual deve-se utilizar para edição do sudo. Com o comando sudo pode-se delegar autoridade para execução de comandos ou coleção de comandos exclusivos a um usuário especifico ou a um grupo de usuários.
OBS: O arquivo de configuração /etc/sudoers deve ser editado unicamente pelo comando visudo.
Com o sudo o administrador pode especificar que um determinado usuário só poderá executar um comando com status administrativo de um host específico.

Host Aliases

Pode definir alias para grupos de máquinas ou para host específico. Exemplos:
Host_Alias     FILESERVERS = fs1, fs2 # com dns local 
Host_Alias     MAILSERVERS = 10.0.0.1, 10.1.1.1 
Host_Alias     SERVERS = 10.0.0.2, dns, firewall, dhcp, www 

User Aliases

Pode definir alias para grupos de usuários ou para um usuário específico. Inclusive com informações oriundas de LDAP, NIS, AD e arquivos de configuração do Linux. Exemplos:
User_Alias ADM = %groupname %administradores 
User_Alias ADMINS = ricardobn, ricardo.brito 
User_Alias WEBMASTERS = pedro, rodrigo, eliana 

Command Aliases:

Pode definir alias para grupos de comandos ou para um comando específico.
Cmnd_Alias     DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\ 
                       /usr/sbin/restore, /usr/sbin/rrestore 
Cmnd_Alias     KILL = /usr/bin/kill 
Cmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprm 
Cmnd_Alias     SHUTDOWN = /usr/sbin/shutdown 
Cmnd_Alias     HALT = /usr/sbin/halt 
Cmnd_Alias     REBOOT = /usr/sbin/reboot 
Cmnd_Alias     SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \ 
               /usr/local/bin/tcsh, /usr/bin/rsh, \ 
               /usr/local/bin/zsh 
Cmnd_Alias     SU = /usr/bin/su 
Subgrupo para administração de rede:
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool 

Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum 
Subgrupo para administração de serviços:
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig 
Subgrupo para administração de atualização da base de dados local:
Cmnd_Alias LOCATE = /usr/sbin/updatedb 
Subgrupo para administração dos dispositivos de bloco:
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount 
Subgrupo para administração para Delegação de permissões:
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp 
Subgrupo para administração de Processos:
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall 
Subgrupo para administração de Drivers:
Cmnd_Alias DRIVERS = /sbin/modprobe 
Subgrupo para mantenedor:
Cmnd_Alias MAINTENANCE = /bin/*, /sbin/*, /usr/bin/*, /usr/sbin/*

Configurações avançadas

Delegação de autoridade: É aconselhável desabilitar o *"ssh hostname sudo <cmd>"*, porque executando o ssh desta maneira será apresentado a senha em claro. Em vez disto execute *"ssh -t hostname sudo <cmd>"* Esta é a parte principal, que habilita o que o usuário pode executar e em que máquina. O arquivo /etc/sudoers pode ser compartilhado entre múltiplos sistemas para que se tenha efeito. Sintaxe:
   user    MACHINE=COMMANDS
Seção de Comandos: Permite ao usuário root executar qualquer comando de qualquer lugar;
   root    ALL=(ALL)     ALL
Permite aos membros do grupo 'sys' executarem todos os comandos especificados neste alias:
   %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
Permite aos membros do grupos wheel executarem todos os comandos:
   %wheel    ALL=(ALL)    ALL
Permite aos membros do grupos wheel executarem todos os comandos sem a necessidade de senhas:
   %wheel    ALL=(ALL)    NOPASSWD: ALL
Permite a todos os membros do grupo 'users' executarem os comandos mount e umount sobre o cdrom como superusuário:
   %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
Permite a todos os membros do grupo 'users' executar o comando 'shutdown':
   %users  localhost=/sbin/shutdown -h now
Permite a todos os usuários listados no alias 'ADMINS' executem comandos como superusuários sem a necessidade de senhas.
   ADMINS  ALL=(ALL) NOPASSWD: ALL
Permite as usuários listados no alias 'ADM' executarem os comandos listados em 'STORAGE' nos host de 'FILESERVERS' sem a necessidade de senhas:
  ADM FILESERVERS = STORAGE
Permite ao usuário 'ricardo.brito' executar os comandos kill e iptables na máquina 10.1.1.1, entretanto o comando iptables ele pode executar sem senha:
   ricardo.brito    10.1.1.1 = NOPASSWD:/bin/iptables , PASSWD: /bin/kill
Permite ao usuário 'ricardo.brito' executar o comando 'passwd' nos MAILSERVERS, exceto para trocar a senha do root;
   ricardo.brito           MAILSERVERS = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root
Proíbe ao usuário 'john' executar o comando 'su -', 'su - root' ou 'su root' na máquina 'penta':
   john        penta = /usr/bin/su [!-]*, !/usr/bin/su *root*
Para qualquer máquina no Host_Alias SERVERS o usuário jill pode executar qualquer comando do diretórios /usr/bin/ exceto os comandos descritos nos Cmnd_Aliases 'SU' e 'SHELLS':
   jill        SERVERS = /usr/bin/, !SU, !SHELLS
No host www, qualquer usuário do User_Alias WEBMASTERS, pode qualquer comando como usuário (www) ou apenas o 'su www'.
WEBMASTERS     www = (www) ALL, (root) /usr/bin/su www
Os usuários do grupo de rede secretaries podem gerenciar as impressoras bem como adicionar e remover usuários em todos os hosts.
+secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
O usuário 'jen' pode executar qualquer comando, exceto nos servidores do Host_Alias SERVERS:
jen            ALL, !SERVERS = ALL
O usuários do grupo 'users' podem executar os comandos 'STORAGE' nos hosts 'FILESERVERS':
%users FILESERVERS=STORAGE
O usuário 'brito' podem executar todos os comandos dos diretórios /bin, /usr/bin, /sbin e /usr/bin, que não seja nos hosts SERVERS, exceto trocar a senha do 'root' e executar o 'su' para 'root':
brito ALL = MAINTENANCE, !/usr/bin/passwd root, /usr/bin/su [!-]*, !/usr/bin/su *root*, !SERVERS = ALL
O usuário 'brito' podem executar sem a utilização de senha, todos os comandos dos diretórios /bin, /usr/bin, /sbin e /usr/bin, exceto trocar a senha do 'root':
brito ALL = NOPASSWD:MAINTENANCE, !/usr/bin/passwd root


Configuração das variáveis de ambiente
Para que se tenha um bom resultado o diretório dos executáveis devem estar disponíveis no PATH, para os usuários que poderam executar os comando somente de root, os securetty. Geralmente são todos os diretórios que começam com 's' (/usr/kerberos/sbin:/usr/local/sbin:/sbin: /usr/sbin/usr/kerberos/sbin:/usr/local/sbin:/sbin:/usr/sbin). Se não for configurado o path, tem a necessidade de digitar o caminho absoluto do comando para conseguir executá-lo. ex: /sbin/iptables -L

Variáveis de seção (Volátil)

A configuração volátil é perdida sempre que o usuário finaliza a seção, desliga a máquina ou algo parecido. Em um terminal execute:
# PATH=/home/brito/bin:/usr/local/sbin:/usr/local/bin:\ /usr/sbin:/usr/bin:/sbin:/bin:/usr/games:\ /usr/kerberos/sbin:/usr/local/sbin:/sbin:\ /usr/sbin/usr/kerberos/sbin:/usr/local/sbin:\ /sbin:/usr/sbin

Variáveis de ambiente do usuário

Para configurar de maneira permanente, deve editar o arquivo '~/.bash_profile' para adicionar os diretórios no PATH como exemplo abaixo, a linha sublinhada, esta modificação é realizada para cada usuário que terá acesso aos comandos de root, indicada se forem poucos usuários.
# .bash_profile 
# Get the aliases and functions 
if [ -f ~/.bashrc ]; then
       . ~/.bashrc
fi 

# User specific environment and startup programs 
PATH=/home/brito/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/kerberos/sbin:/usr/local/sbin:/sbin:/usr/sbin
PATH=$PATH:/home/brito/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/brito/bin 
export PATH 

Variáveis de ambiente do sistema

Esta solução não é indicada para poucos usuários, e para máquinas que não são servidores*, pois dos os comandos de root ficaram disponíveis para todos os usuários do sistema, embora quem não tenha permissão de execução não possa fazer muita coisa não é aconselhável devido a prováveis bugs de alguns pacotes, que poderão ser acidentalmente executados. Em um terminal execute:
# echo 'PATH=/home/brito/bin:/usr/local/sbin:\ /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:\ /usr/kerberos/sbin:/usr/local/sbin:/sbin:\ /usr/sbin/usr/kerberos/sbin:/usr/local/sbin:\ /sbin:/usr/sbin' >> /etc/profile
Para se ter mais segurança do que se esta fazendo você pode usar o seu editor de texto predileto (vim, vi, nano, etc), e adicionar este trecho abaixo na última linha.
PATH=.:~/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/kerberos/sbin:/usr/local/sbin:/sbin:/usr/sbin/usr/kerberos/sbin:/usr/local/sbin:/sbin:/usr/sbin
Ponto!

Referências

  • man /etc/sudo
  • man /etc/sudoers
  • http://search.cpan.org/~landman/Sudo-0.21/lib/Sudo.pm
  • http://www.linuxtotal.com.mx/index.php?cont=info_admon_014

Atualizações

16/04/2007; 31/10/2011; 11/11/2011; 21/11/2011;
http://www.vivaolinux.com.br/artigo/Comando-sudo-instalacao-e-configuracao

Comentários

Unknown disse…
Olá,
Gostaria de tirar uma dúvida. Existe a possibilidade de adicionar usuários do AD com permissionamento para usar sudo, usando um grupo já existente?
Exemplo:
%DOMÍNIO@grupo_do_ad_Com_permissão_de_Administrador

Muito obrigado pela atenção!
Brito disse…
Desculpe a demora, mas há a possibilidade, entretanto nunca configurei, está em minhas metas futuras.
:D