Jak uwierzytelnić konta Linux w Active Directory i zamontować udział Windows podczas logowania?

18

Używam serwera Ubuntu 10.04.

Jamie
źródło
To powinno być opublikowane jako odpowiedź na pytanie. Edytuj to, aby było to pytanie i przenieś to, co napisałeś powyżej, aby było na nie odpowiedzią. Z FAQ : „Można również zadawać własne pytania i odpowiadać na nie, ale udawać, że jesteś w Jeopardy: sformułuj je w formie pytania”.
Wstrzymano do odwołania.

Odpowiedzi:

27

[Edytuj] Od tego czasu przetestowałem to pełne wydanie Ubuntu 10.04 Server (21 maja 2010) .

Skonfigurowałem mój Ubuntu 10.04 Server LTS rezydujący w sieci Windows do uwierzytelniania logowania przy użyciu active directory, a następnie zamontowałem udział Windows, aby służył jako tam katalog domowy.

Oto, co zrobiłem, zaczynając od pierwszej instalacji Ubuntu.

  1. Pobierz i zainstaluj Ubuntu Server 10.04 LTS
  2. Pobierz uaktualnienia

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

  3. Zainstaluj serwer SSH ( sshd)

    # sudo apt-get install openssh-server

    Niektórzy twierdzą, że powinieneś „zablokować sshd” poprzez wyłączenie logowania root. Sądzę, że jeśli jesteś wystarczająco inteligentny, aby zhakować sesję ssh w celu uzyskania hasła roota, prawdopodobnie nie zostaniesz powstrzymany przez dodanie PermitRootLogin now /etc/ssh/sshd_configpliku. Jeśli twój paranoik lub po prostu nie jesteś przekonany, edytuj plik lub wykonaj następujące czynności:

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

  4. Zainstaluj wymagane pakiety

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

  5. Wykonaj podstawowe sprzątanie domu w sieci, przygotowując się do określonych konfiguracji pakietów.

    1. Określ nazwę domeny systemu Windows, nazwę serwera DNS i adres IP serwera Active Directory (dla samby). Dla wygody ustawiam zmienne środowiskowe dla domeny Windows i serwera DNS. Dla mnie to był (mój adres IP AD to 192.168.20.11):

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

      Jeśli chcesz dowiedzieć się, jaka jest twoja domena i serwer DNS (byłem kontrahentem i nie znałem sieci), zapoznaj się z tą pomocną informacją .

    2. Musimy ochrzcić okno Linuksa w nowej sieci, odbywa się to poprzez edycję pliku hosta (zamień DNS na FQDN DNS systemu Windows):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. Powinniśmy również powiedzieć przyszłym zainstalowanym usługom, gdzie mogą znaleźć lidera: niektóre sieci będą miały usługi wyszukiwania nazw Netbios, ale na wszelki wypadek dodaj wyraźny wpis w /etc/hostspliku, w mojej konfiguracji dodałem wpis na trzecim (3) linia:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. Procesy uwierzytelniania i udostępniania plików dla urządzeń Windows i Linux muszą mieć uzgodnione zegary. Zrób to z usługą NTP, a na serwerowej wersji Ubuntu usługa NTP jest instalowana i konfigurowana z jednym (1) serwerem NTP. Dodaj swój przed Ubuntu (lub całkowicie go zastąp). Sieć, do której się przyłączam, miała również serwer DNS obsługujący usługę NTP.
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      Uruchom ponownie demona NTP:
      # sudo /etc/init.d/ntp restart

  6. Konfiguracja Kerberos.
    Poniższych instrukcji nie należy traktować dosłownie: wartości MYDOMAIN.LOCALi srv1.mydomain.localnależy je zastąpić wartościami odpowiednimi dla sieci podczas edytowania plików, ale należy pamiętać, że tam, gdzie używana jest WIELKIE LITERY, potrzebna jest WIELKIE LICZBA .
    Jeśli podczas apt-get installKerberos miałeś wgląd, aby poprawnie odpowiedzieć na pytanie „domena domyślna”, to dobrze, w przeciwnym razie będziesz musiał wykonać następujące czynności.

    1. Edytuj /etc/krb5.confplik (wcześniej zainstalowany powyżej) .

      1. Znajdź [libdefaults]sekcję i zmień parę klucz-wartość:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. Dodaj następujący [realms]fragment do sekcji pliku:

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

      3. Dodaj następujący [domain_realm]fragment do sekcji pliku:
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. Dobrym testem w tym momencie jest sprawdzenie, czy kontroler AD wystawi ci bilet Kerberos. Nie jest to konieczne, ale może sprawić, że niektórzy z was będą się denerwować:
        # kinit <some_windows_domain_user>
        Następnie, aby zobaczyć bilet:
        # klist
        Zobaczysz rzeczy o pamięci podręcznej biletów oraz o wygaśnięciu i przedłużeniach. Gdy zawroty głowy opadną, równie dobrze możesz zwolnić / zniszczyć bilet:
        # kdestroy

  7. Skonfiguruj sambę.
    Zgodnie z tym, co następuje: Są chwile, kiedy nie można użyć CIFS lub lepiej wybrać inny sieciowy system plików. Jeśli dla zwiększenia bezpieczeństwa potrzebna jest obsługa uwierzytelniania kerberos (krb5 / SPNEGO), wówczas zamiast cifs należy użyć smbclient lub smbfs Samby
    , cifsobsługa jądra dla Ubuntu 10.04 (w oparciu o jądro w wersji 2.6.32.9) jest w wersji 1.61, i zgodnie z dokumentacją jądra eksperymentalna implementacja Kerberos istnieje od wersji 1.54.
    Więc jesteś. Nie mam pojęcia, czy cifsto działa, więc podaję konfigurację samby:

    1. Zastąp /etc/samba/smb.conf(pamiętaj, że pracowałem z czystej dystrybucji Ubuntu, więc nie martwiłem się o nic)
      [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. Uruchamiaj i zatrzymuj różne usługi.

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

  8. Skonfiguruj uwierzytelnianie.

    1. Edytuj /etc/nsswitch.conf. Udało mi się uruchomić następujące polecenie, aby uzyskać to, czego potrzebowałem:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      Oto zawartość mojego /etc/nsswitch.confpliku:
      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. Uruchamiaj i zatrzymuj różne usługi.
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. Dołącz komputer do domeny. Nie jestem przekonany, że jest to konieczne; szczególnie ze względu na opcję bezpieczeństwa w smb.confpliku ( security = ads). Być może ktoś może się nad tym zastanowić ...
    # sudo net ads join -U any_domain_user_account
    Może pojawić się błąd DNS update failed!, ale dołączenie do domeny. Jeśli pojawi się błąd związany z niemożnością znalezienia serwera, rekordy DNS należy zmodyfikować. Podczas instalacji Ubuntu serwer nazw często wskazuje twoją bramę: większość routerów wykonuje usługę DNS. Najlepszymi praktykami administrowania serwerem Windows jest to, że ADC powinien również uruchomić DNS. W moim przypadku mój /etc/resolve.confwygląda tak: jest google DNS, dość niezawodne tworzenie kopii zapasowych w przypadku okien jeden idzie w dół.
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    8.8.8.8

W tym momencie mogłem się zalogować (być może po ponownym uruchomieniu), katalogi domowe nie istniały, ale mogłem się zalogować.

  1. Montaż CIFS przy logowaniu
    Kolejnym krokiem była dla mnie wisienka; Nie chciałem ponosić odpowiedzialności za tworzenie kopii zapasowych wszystkich działających katalogów, a urządzenie, które miało działać Ubuntu, było podejrzane pod względem niezawodności. Wykonując następujące użytkownicy mogą się zalogować i zobaczyć ich oknami katalogu użytkownika automagicznie .

    1. Pobierz pam_mountmoduł:
      # sudo apt-get install libpam-mount
      Chciałem, aby punkt montowania wskazywał w tradycyjnej /home/<user>lokalizacji: ta część jest konfigurowana przez /etc/samba/smb.conffile ( template homedir = /home/%U). Ale potrzebowałem go, aby przejrzeć udział i wskazać własny katalog Windows. Odbywa się to poprzez edycję /etc/security/pam_mount.conf.xmlpliku (który pomimo swojej intencji XML nie jest czytelny dla człowieka):

    2. Dodaj /etc/security/pam_mount.conf.xmli zmień, aby dopasować:
      <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>

      Z powodu mojego głupiego punktu montowania musiałem również dodać tę linię:

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

      Aby katalogi użytkowników (dla punktu montowania) były tworzone automatycznie, znajdź linię i ustaw ją tak:

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

      remove="false"Bit jest bardzo ważne: jeśli jest to wartość true, pam_mount.sopróbuje usunąć katalog punkt, który nie może zrobić, jeśli użytkownik zalogowany wielokrotnie montować. W takim przypadku kończy się wiele bezpańskich mocowań w systemie.

      pam_mount.sowciąż nie zapewnia, jak obiecano. W obecnej formie wierzchowce wciąż się piętrzą, a katalogi domowe nie są tworzone. Gdzieś pomiędzy tym a poprzednią wersją Beta 2 serwera 10.04 działało. Nie mogę tego jednak odtworzyć.
      W międzyczasie polegam na tworzeniu katalogu pam_mkhomedir.so, na którym polegam , i utknąłem linię bezpośrednio przed pam_mount.solinią, aby ją pomieścić.
      Nadal nie rozwiązałem problemu wielokrotnego montażu. Ale dopóki nie pam_mount.sozostanie naprawione, oto co mam w swoim /etc/pam.d/common-sessionpliku:

      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
      

Otóż ​​to. To zadziałało dla mnie i mam nadzieję, że okażą się przydatne.

Rozważano wiele zasobów, więc mogłem to rozgryźć. Oto krótka lista (kilka z tych linków prowadzi do moich własnych pytań na ten temat):

Jamie
źródło
1
Wyłączanie zdalnego logowania root ssh jest koniecznością. Ataki typu brute force / słownik czasami się udają. Jeśli root zostanie naruszony, pożegnaj się z czymkolwiek zaufanym na komputerze.
JR Lawhorne
1
ubuntu nie aktywuje konta roota ... wszystko jest sudod, czy coś mi brakuje?
Jamie
„wszystko jest sudo - i to jest lepsze… w jaki sposób? (Jeśli każde konto użytkownika uprawnione do sudo zostanie przejęte, jest to w zasadzie to samo. I w zasadzie równie proste [lub nie] jest brutalne korzystanie z kont root lub użytkowników. Najlepszym rozwiązaniem jest skonfigurowanie loginu tylko do logowania i wyłączenie wszystkich haseł oparte na logowaniu.)
Kurt Pfeifle,
Rozumiem, ale zastanów się: „Najlepsze jest skonfigurowanie loginu tylko do klucza publicznego” , co całkowicie podważyłoby cel tego postu.
Jamie,
1
możesz także użyć konta sudoed lub root i zmienić nazwę użytkownika root, aby nie był to root linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData