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: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.debInstalaçã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 sudoConfigurando 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, wwwUser 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, elianaCommand 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: ALLPermite as usuários listados no alias 'ADM' executarem os comandos listados em 'STORAGE' nos host de 'FILESERVERS' sem a necessidade de senhas: ADM FILESERVERS = STORAGEPermite 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 rootConfiguraçã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/sbinVariá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 PATHVariá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
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!
:D