Come autenticare gli account Linux su Active Directory e montare una condivisione Windows all'accesso?


18

Sto usando Ubuntu 10.04 Server.


Questo avrebbe dovuto essere pubblicato come risposta a una domanda. Modifica questo in modo che sia una domanda e sposta ciò che hai pubblicato sopra per rispondere. Dalle FAQ : "Va anche bene porre e rispondere alla tua domanda, ma fai finta di essere su Jeopardy: esprimilo sotto forma di una domanda".
In pausa fino a nuovo avviso.

Risposte:


27

[Modifica] Da allora ho provato questa versione completa di Ubuntu 10.04 Server (21 / May / 2010) .

Ho configurato il mio server Ubuntu 10.04 LTS residente su una rete Windows per autenticare gli accessi usando active directory, quindi montare una condivisione Windows per servire come home directory.

Ecco cosa ho fatto a partire dall'installazione iniziale di Ubuntu.

  1. Scarica e installa Ubuntu Server 10.04 LTS
  2. Ricevi aggiornamenti

    # sudo apt-get update && sudo apt-get upgrade

  3. Installa un server SSH ( sshd)

    # sudo apt-get install openssh-server

    Alcuni sosterrebbero che dovresti "bloccare sshd" disabilitando gli accessi root. Immagino che se il vostro abbastanza intelligente per hackerare una sessione ssh per una password di root, probabilmente non state andando ad essere contrastato con l'aggiunta di PermitRootLogin nonel /etc/ssh/sshd_configfile. Se il tuo paranoico o semplicemente non sei convinto, modifica il file o fai un giro:

    # (grep PermitRootLogin /etc/ssh/sshd_config && sudo sed -ri 's/PermitRootLogin ).+/\1no/' /etc/ssh/sshd_conifg) || echo "PermitRootLogin not found. Add it manually."

  4. Installa i pacchetti richiesti

    # sudo apt-get install winbind samba smbfs smbclient ntp krb5-user

  5. Fare alcune pulizie di base della rete domestica in preparazione per le configurazioni di pacchetto specifiche a venire.

    1. Determina il nome di dominio di Windows, il nome del server DNS e l'indirizzo IP per il server di directory attiva (per samba). Per convenzione ho impostato le variabili di ambiente per il dominio Windows e il server DNS. Per me lo era (il mio indirizzo IP AD era 192.168.20.11):

      # WINDOMAIN=mydomain.local && WINDNS=srv1.$WINDOMAIN && WINDNS_IP=192.168.20.11

      Se vuoi capire qual è il tuo dominio e server DNS (ero un appaltatore e non conoscevo la rete) dai un'occhiata a questo utile riferimento .

    2. Dobbiamo battezzare il box Linux sulla nuova rete, questo avviene modificando il file host (sostituisci il DNS di con il FQDN del DNS di Windows):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. Dovremmo anche dire ai prossimi servizi installati dove possono trovare leader: alcune reti avranno servizi di ricerca dei nomi netbios, ma per ogni evenienza, aggiungi una voce esplicita nel tuo /etc/hostsfile, nella mia configurazione ho aggiunto la voce sul terzo (3) linea:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. I processi di autenticazione e condivisione dei file per le caselle Windows e Linux devono concordare sui loro orologi. Fallo con un servizio NTP e sulla versione server di Ubuntu il servizio NTP viene installato e configurato con un (1) server NTP. Aggiungi il tuo prima di quello di Ubuntu (o sostituiscilo interamente). La rete a cui mi stavo unendo aveva anche il server DNS che serviva il servizio NTP.
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      Riavvia il demone NTP:
      # sudo /etc/init.d/ntp restart

  6. Configurazione Kerberos.
    Le istruzioni che seguono qui non devono essere prese alla lettera: i valori per MYDOMAIN.LOCALe srv1.mydomain.localdevono essere sostituiti con ciò che è appropriato per la tua rete quando modifichi i file, ma tieni presente che dove viene utilizzato MAIUSCOLO, MAIUSCOLO .
    Se durante apt-get installKerberos hai avuto l'intuizione di rispondere correttamente alla domanda "dominio predefinito", allora, grazie per te, altrimenti dovrai fare quanto segue.

    1. Modifica il file (precedentemente installato sopra) /etc/krb5.conf.

      1. Trova la [libdefaults]sezione e modifica la coppia di valori chiave:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. Aggiungi quanto segue alla [realms]sezione del file:

        MYDOMAIN.LOCAL = {
        kdc = srv1.mydomain.local
        admin_server = srv1.mydomain.local
        default_domain = MYDOMAIN.LOCAL
        }

      3. Aggiungi quanto segue alla [domain_realm]sezione del file:
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. Un bel test a questo punto è vedere se il tuo controller AD ti emetterà un ticket Kerberos. Questo non è necessario ma può farti venire le vertigini:
        # kinit <some_windows_domain_user>
        Quindi per vedere il biglietto:
        # klist
        vedrai cose sulla cache dei biglietti, scadenze e rinnovi. Una volta che la vertigine si è attenuata, puoi anche rilasciare / distruggere il biglietto:
        # kdestroy

  7. Configura samba.
    Secondo quanto segue: Ci sono momenti in cui CIFS non può essere usato o un'altra scelta del filesystem di rete è migliore. Se è necessario il supporto dell'autenticazione Kerberos (krb5 / SPNEGO) per una maggiore sicurezza, allora è necessario utilizzare smbclient o smbfs di Samba invece di cifs
    Alas, il cifssupporto nel kernel per ubuntu 10.04 (basato sulla versione 2.6.32.9 del kernel) è alla versione 1.61 e secondo la documentazione del kernel, l'implementazione sperimentale di Kerberos è presente dalla versione 1.54.
    Quindi eccoti. Non ho idea se cifsfunzionerebbe, quindi ti do la configurazione di samba:

    1. Sostituisci /etc/samba/smb.conf(ricorda che stavo lavorando da una distro pulita di Ubuntu, quindi non ero preoccupato di rompere qualcosa):
      [global]
      security = ads
      realm = MYDOMAIN.LOCAL
      password server = 192.168.20.11
      workgroup = MYDOMAIN
      idmap uid = 10000-20000
      idmap gid = 10000-20000
      winbind enum users = yes
      winbind enum groups = yes
      template homedir = /home/%U
      template shell = /bin/bash
      client use spnego = yes
      client ntlmv2 auth = yes
      encrypt passwords = yes
      winbind use default domain = yes
      restrict anonymous = 2

    2. Avvia e ferma vari servizi.

      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  8. Imposta l'autenticazione.

    1. Modifica il /etc/nsswitch.conf. Sono stato in grado di eseguire il comando seguente per ottenere ciò di cui avevo bisogno:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      Ecco i contenuti del mio /etc/nsswitch.conffile:
      passwd: compat winbind
      group: compat winbind
      shadow: compat winbind
      hosts: files dns
      networks: files
      protocols: db files
      services: db files
      ethers: db files
      rpc: db files

    2. Avvia e ferma vari servizi.
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. Unisciti al computer al dominio. Non sono convinto che ciò sia necessario; in particolare a causa dell'opzione di sicurezza nel smb.conffile ( security = ads). Forse qualcuno può pesare su questo ...
    # sudo net ads join -U any_domain_user_account
    Potresti ricevere un errore DNS update failed!, ma che ti unirai al dominio. Se viene visualizzato un errore per non essere in grado di trovare il server, è necessario modificare i record DNS. Durante l'installazione di Ubuntu, il nameserver punta spesso al gateway: la maggior parte dei router eseguirà un servizio DNS. Le migliori pratiche per l'amministrazione di Windows Server è che ADC dovrebbe eseguire anche DNS. Nel mio caso il mio /etc/resolve.confsimile a questa:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    Il 8.8.8.8è un google DNS, un backup abbastanza affidabile nel caso in cui le finestre si va giù.

A questo punto potrei accedere (forse dopo un riavvio), le home directory non esistevano, ma potevo accedere.

  1. CIFS Montaggio all'accesso
    Questo passaggio successivo è stato per me la ciliegina sulla torta; Non volevo la responsabilità di eseguire il backup delle directory di lavoro di tutti, e la scatola che Ubuntu doveva utilizzare era sospetta in termini di affidabilità. Facendo i seguenti utenti possono accedere e vedere la loro directory utente di Windows automagicamente .

    1. Scarica il pam_mountmodulo:
      # sudo apt-get install libpam-mount
      volevo che il mount point puntasse nella /home/<user>posizione tradizionale : questa parte è configurata dal /etc/samba/smb.conffile ( template homedir = /home/%U). Ma ne avevo bisogno per esplorare la condivisione e puntare alla propria directory di Windows. Ciò si ottiene modificando il /etc/security/pam_mount.conf.xmlfile (che nonostante la sua intenzione, XML non è leggibile dall'uomo):

    2. Aggiungi quanto segue /etc/security/pam_mount.conf.xmle modifica per adattarlo:
      <volume
      user="*"
      server="srv1.mydomain.local"
      path="UserShares"
      mountpoint="home"
      fstype="cifs"
      />

      <cifsmount>mount -t cifs //%(SERVER)/%(VOLUME)/%(USER) %(MNTPT)/%(USER) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</cifsmount>

      A causa del mio sciocco mount point ho dovuto aggiungere anche questa linea:

      <umount>umount %(MNTPT)/%(USER)</umount>

      E in modo che le directory utente (per il punto di montaggio) vengano create automaticamente, trova la linea e la rende così:

      <mkmountpoint enable="1" remove="false" />

      Il remove="false"bit è piuttosto importante: se è impostato su true, pam_mount.sotenta di eliminare il punto di montaggio della directory che non può fare se un utente ha effettuato l'accesso più volte. Ciò che si ottiene in quel caso è un sacco di supporti vaganti sul sistema.

      pam_mount.socontinua a non funzionare come promesso. Nella sua forma attuale, i mount continuano ad accumularsi e le home directory non vengono create. Da qualche parte tra qui e la precedente versione Beta 2 del server 10.04, funzionava. Non riesco a ricreare questo però.
      Nel frattempo per la creazione della directory mi affido pam_mkhomedir.soe ho bloccato una riga immediatamente prima della pam_mount.soriga per adattarla.
      Non ho ancora risolto il problema del montaggio multiplo. Ma fino a quando non pam_mount.soviene risolto, questo è ciò che ho nel mio /etc/pam.d/common-sessionfile:

      session [default=1]     pam_permit.so  
      session requisite       pam_deny.so  
      session required        pam_permit.so  
      session required        pam_unix.so  
      session optional        pam_winbind.so  
      session required        pam_mkhomedir.so skel=/etc/skel/ umask=0022  
      session optional        pam_mount.so
      

Questo è tutto. Ha funzionato per me e spero che lo trovi utile.

Sono state prese in considerazione numerose risorse per poterlo capire. Ecco un breve elenco (alcuni di questi link indicano le mie stesse domande sull'argomento):


1
La disattivazione dell'accesso ssh root remoto è un must. Gli attacchi di forza bruta / dizionario a volte riescono. Se il root è compromesso, saluta tutto ciò di cui ti fidi sulla macchina.
JR Lawhorne,

1
ubuntu non attiva l'account di root però ... tutto è sudod, o mi sto perdendo qualcosa?
Jamie,

'tutto è sudo' - E questo è meglio ... in che modo? (Se un account utente che ha diritto a sudo è compromesso, è sostanzialmente la stessa cosa. Ed è fondamentalmente altrettanto semplice [o no] per eseguire il bruteforce degli account root o utente. La cosa migliore è configurare solo l'accesso con chiave pub e disabilitare tutte le password- accesso basato.)
Kurt Pfeifle

Lo capisco, ma considero: "La cosa migliore è configurare solo l'accesso alla chiave pub" , che annullerebbe completamente lo scopo di questo post.
Jamie,

1
puoi anche usare un account sudoed o root e cambiare il nome dell'utente root in modo che non sia root linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.