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: 39.305 ]

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

Servidor Samba "Autoservice"

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

webCalendar: a agenda e o PAM

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

Cliente Linux no servidor LDAP

Leitura recomendada

Protegendo seu Linux de ataques de brute force via ssh

Ajustes finos no Bind (servidor DNS)

Bloqueio de usuários com página de aviso

Travando qualquer máquina Linux

Pen-Test com ênfase em WLAN

  
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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts