Cliente "automágico" Linux logando no domínio NT/Samba

Buscamos, no presente artigo, realizar a configuração de clientes Linux em domínios gerenciados por servidores Windows ou PDC Samba. Trabalhamos com o processo de automatização das configurações necessárias aos clientes por meio da utilização de programação Shell Linux. Integramos os scripts necessários à configuração dos arquivos em uma interface modo texto de gerenciamento.

[ Hits: 37.393 ]

Por: lourival araujo da silva em 03/10/2008


Primeira exibição



A função que realiza a ligação do cliente ao servidor precisa configurar os arquivos já referidos do login (/etc/pam.d/login), da escolha da base de consulta (/etc/nsswitch.conf) e de configuração do samba no cliente (/etc/samba/smb.conf). Conforme observamos anteriormente. Além de utilizar o usuário root do domínio para incluir o cliente e consultar a base. Cabe ao administrador incluir no código funções de correção de erros.

#!/bin/bash
#PROGRAMA DE ATUALIZACAO DE SENHAS - SERVIDOR DE DOMINIO $HOSTNAME
#Programa ConSamba.sh liberado,em 20Set08, sob licensa GPL
#por LOURIVAL ARAUJO DA SILVA - 5º CTA - RECIFE - BRASIL

while true; do
   clear

   adiciona_usuario(){
      echo -n "Digite o nome do usuario a ser incluido: "
      read usuario
      cadastro="$(grep -i $usuario /etc/passwd|cut -d: -f1)"

      if [ -z "$cadastro" ];then
         echo "Usuario $usuario nao existe."
         echo -n "Digite o grupo do usuario: "
         read grupo
         GRP=$(grep $grupo /etc/group |cut -d: -f1)

         if [ ! $GRP ];then
            echo "O grupo $grupo nao existe."
            sleep 2
            continue
         fi

      sudo useradd -d /home/$usuario -s /bin/bash -g $grupo -m $usuario
      sudo passwd $usuario
      sleep 2
      fi
  
      echo -n "Deseja incluir outro usuario ? [sim/nao] "
      read resp

      while [ $resp = sim ];do
  
         echo -n "Digite o nome do novo usuario: "
         read nusuario
         cadastro="$(grep -i $nusuario /etc/passwd|cut -d: -f1)"
         if [ -z "$cadastro" ];then
            echo "Usuario $nusuario nao existe."
            echo -n "Digite o grupo do novo usuario: "
            read ngrupo
            GRP=$(grep $ngrupo /etc/group |cut -d: -f1)
  
            if [ ! $GRP ];then
               echo "O grupo $ngrupo nao existe."
               sleep 2
               continue
            fi
  
            sudo useradd -d /home/$nusuario -s /bin/bash -m -g $ngrupo $nusuario
            sudo passwd $nusuario
            sleep 2
         fi
  
         echo -n "Deseja incluir outro usuario ? [sim/nao] "
         read resp
  
         if [ $resp = nao ]; then
             echo "Adicao de usuario concluida."
         fi
         break
      done
      ;;
   }

   bloqueia_usuario(){
      echo -n "Digite o nome do usuario a ser bloqueado: "
      read usuario
      cadastro="$(grep -i $usuario /etc/passwd|cut -d: -f1)"

      if [ -z "$cadastro" ];then
         echo "Usuario $usuario nao existe."
         sleep 2
         continue
      else
         sudo passwd -l $usuario
         echo "Usuario $usuario bloqueado."
         sleep 2
         continue
      fi
   }

   desbloqueia_usuario(){
      echo -n "Digite o nome do usuario a ser desbloqueado: "
      read usuario
      cadastro="$(grep -i $usuario /etc/passwd|cut -d: -f1)"

      if [ -z "$cadastro" ];then
         echo "Usuario $usuario nao existe."
         sleep 2
         continue
      else
         sudo passwd -u $usuario
         echo "Usuario $usuario desbloqueado."
         sleep 2
         continue
      fi
   }

   atualiza_senha(){
      echo    "Atualizacao de senha."
      echo -n "Digite o nome do usuario: "
      read usuario
      cadastro="$(grep -i $usuario /etc/passwd|cut -d: -f1)"

      if [ -z "$cadastro" ];then
         echo "Usuario $usuario nao existe."
         sleep 2
         continue
      else
         sudo passwd $usuario
         echo "Senha do usuario $usuario atualizada."
         sleep 2
         continue
      fi
   }

   exclui_usuario(){
      echo -n "Digite o nome do usuario a ser excluido: "
      read usuario
      cadastro="$(grep -i $usuario /etc/passwd|cut -d: -f1)"

      if [ -z "$cadastro" ];then
         echo "Usuario $usuario nao existe."
         sleep 2
         continue
      else
         sudo userdel -r $usuario
         echo "Senha do usuario $usuario atualizada."
         sleep 2
         continue
      fi
   }

   inclui_dominio(){
      echo -n "Digite um nome do Dominio: "
      read dominio
      echo -n "Digite o nome do Servidor de Domínio: "
      read servidor
      
      echo -n "Digite o nome da Maquina a ser incluida no Dominio: "
      read maquina
      
      echo -n "Digite a conta do Administrador de Domínio (admin): "
      read admin
      
      echo "
[globals]

workgroup = $dominio
netbios name = $maquina

security = domain
encrypt passwords = yes
os level = 10

log file = /var/log/samba/log.%m
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
hosts allow = 127.0.0.0/8  $rede

obey pam restrictions = Yes
smb passwd file = /etc/samba/smbpasswd

winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
idmap uid = 10000-20000
idmap gid = 10000-20000

[home]
comment = Directorio Pessoal
create mask = 0700
directory mask = 0700
browseable = No

[printers]
path = /tmp
browseable = No
comment = Impressoras de Rede
guest ok = No
read only = No
print ok = Yes" >>/tmp/smb.conf

      sudo cp /etc/samba/smb.conf /tmp/smb.conf.old
      sudo mv /tmp/smb.conf /etc/samba/smb.conf
  
      sudo echo " ">/tmp/login
      sudo echo "
#PAM - 1.0
# Arquivo gerado pelo script ConSamba.sh Versao 0.3.5 - Setembro 2008 - $(date +%H:%M:%S-%d/%m/%Y)
#/etc/pam.d/login
auth       requisite  pam_securetty.so
auth       requisite  pam_nologin.so
auth       required   pam_unix.so
auth   required   pam_cracklib.so
auth       sufficient pam_winbind.so use_first_pass
auth       optional   pam_mount.so

account    required   pam_unix.so
account    sufficient pam_winbind.so use_first_pass

session    optional   pam_mount.so
session    optional   pam_mkhomedir.so skel=/etc/skel umask=0022
session    required   pam_limits.so
session    optional   pam_motd.so

password   required pam_unix.so
password   sufficient pam_winbind.so use_first_pass" >>/tmp/login

      sudo cp /etc/pam.d/login /tmp/login.old
      sudo mv /tmp/login /etc/pam.d/login
  
      sudo echo " ">/tmp/kdm
      sudo echo "
#PAM - 1.0
# Arquivo gerado pelo script ConSamba.sh Versao 0.3.5 - Setembro 2008 - $(date +%H:%M:%S-%d/%m/%Y)
#/etc/pam.d/kdm
auth       requisite  pam_nologin.so
auth       required   pam_unix.so
auth       required   pam_cracklib.so
auth       sufficient pam_winbind.so use_first_pass
auth       optional   pam_mount.so

account   required   pam_unix.so
account   sufficient pam_winbind.so use_first_pass

session    optional   pam_mount.so
session    optional   pam_mkhomedir.so skel=/etc/skel umask=0022
session    required   pam_limits.so
session    optional   pam_motd.so

password   required pam_unix.so
password   sufficient pam_winbind.so use_first_pass" >>/tmp/kdm

      cp /etc/pam.d/kdm /tmp/kdm.old
      sudo mv /tmp/kdm /etc/pam.d/kdm
  
      sudo echo " ">/tmp/nsswitch.conf
      sudo echo "
# Arquivo gerado pelo script ConSamba.sh Versao 0.3.5 - Setembro 2008 - $(date +%H:%M:%S-%d/%m/%Y)
#/etc/nsswitch.conf
passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind
hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis" >>/tmp/nsswitch.conf

      sudo cp /etc/nsswitch.conf /tmp/nsswitch.conf.old
      sudo mv /tmp/nsswitch.conf /etc/nsswitch.conf
  
      apt-get install libpam-modules libpam-mount libpam-cracklib winbind
  
      net rpc join   -W $dominio -S $servidor -U $admin 2>>/tmp/errodominio
      wbinfo -u 2>>/tmp/errodominio
      wbinfo -g 2>>/tmp/errodominio
      getent passwd 2>>/tmp/errorusiarios
      getent group 2>>/tmp/errousuarios
      sleep 2
      continue
   }

   sair(){
      clear
      exit 0
   }
  
   valor_errado(){
      clear
      tput cup 27 6;echo "Valor invalido. Digite um valor entre 1 e 7. "
      sleep 2
      continue
   }

   tput cup 10 6;echo "
====================================================
CADASTRO DE USUARIOS - CLIENTE PDC SAMBA/NT
VERSAO 0.2.0 - SET 2008
====================================================
CLIENTE DE DOMINIO $HOSTNAME
====================================================  
1) Adicionar usuario local
2) Bloquear usuario local
3) Desbloquear usuario local
4) Atualizar senha local
5) Excluir usuario local
6) Incluir a maquina no DOMINIO
7) Sair
==================================================== "
   tput cup 25 6; echo -n "Digite sua opcao [1-7]: "
   read opcao
   case $opcao in
      1) adiciona_usuario
         ;;
      2) bloqueia_usuario
         ;;
      3) desbloqueia_usuario
         ;;
      4) atualiza_senha
         ;;
      5) exclui_usuario
         ;;
      6) inclui_dominio
         ;;
      
      7) sair
         ;;
      
      *) valor_errado
         ;;
   esac
done

Copie o código do programa e salve sob a forma de arquivo sem formatação, utilize o vim ou o kwrite. Dê permissão de execução e execute o programa.

# vim cadastro_vol.sh
# chmod +x cadastro_vol.sh
# ./cadastro_vol.sh


Página anterior     Próxima página

Páginas do artigo
   1. Criando coragem!
   2. Ajustando arquivos
   3. Entrando no Samba
   4. Organizando a casa
   5. Primeira exibição
   6. Leia os logs
Outros artigos deste autor

Autenticação via hardware: o módulo pam_usb

Mudança de hábito: autenticando usuários em base de dados MySQL

webCalendar: a agenda e o PAM

Servidor Samba "Autoservice"

Configuração "automágica" de servidor Linux PDC Samba

Leitura recomendada

Quad9 - O que é e como usar

HoneyPots em Linux

Melhorando a segurança do seus servidores em FreeBSD

Gateway autenticado com Apache, Iptables e CGI em shell

Filtragem de vírus com pop3 transparente: pop3vscan

  
Comentários
[1] Comentário enviado por renato.leite em 04/10/2008 - 08:26h

ta muito bom o Artigo xD

[2] Comentário enviado por araujo_silva em 05/10/2008 - 10:18h

Valeu Xara
Agradecemos sugestões.
Abaços,
araujo_silva


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts