Wie authentifiziere ich Linux-Konten bei einem Active Directory und mounte eine Windows-Freigabe bei der Anmeldung?

18

Ich benutze Ubuntu 10.04 Server.

Jamie
quelle
Dies sollte als Antwort auf eine Frage gepostet worden sein. Bitte bearbeiten Sie dies, damit es sich um eine Frage handelt. Verschieben Sie das, was Sie oben gepostet haben, um eine Antwort darauf zu erhalten. Aus der FAQ : "Es ist auch vollkommen in Ordnung, Ihre eigene Frage zu stellen und zu beantworten, aber tun Sie so, als wären Sie in Gefahr: Formulieren Sie sie in Form einer Frage."
Bis auf weiteres angehalten.

Antworten:

27

[Bearbeiten] Ich habe seitdem die Vollversion von Ubuntu 10.04 Server (21. Mai 2010) getestet .

Ich habe meinen Ubuntu 10.04 Server LTS in einem Windows-Netzwerk so konfiguriert , dass Anmeldungen mit Active Directory authentifiziert werden. Anschließend habe ich eine Windows-Freigabe bereitgestellt, die als Basisverzeichnis dient.

Hier ist, was ich ausgehend von der Erstinstallation von Ubuntu gemacht habe.

  1. Laden Sie Ubuntu Server 10.04 LTS herunter und installieren Sie es
  2. Updates bekommen

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

  3. Installieren Sie einen SSH-Server ( sshd)

    # sudo apt-get install openssh-server

    Einige würden argumentieren, dass Sie "sshd down" sperren sollten, indem Sie Root-Logins deaktivieren. Ich denke, wenn Sie klug genug sind, eine SSH-Sitzung nach einem Root-Passwort zu hacken, werden Sie wahrscheinlich nicht durch das Hinzufügen von PermitRootLogin noin der /etc/ssh/sshd_configDatei vereitelt . Wenn Sie paranoid oder nicht einfach nicht überzeugt sind, bearbeiten Sie die Datei oder geben Sie den folgenden einen Dreh:

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

  4. Installieren Sie die erforderlichen Pakete

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

  5. Führen Sie eine grundlegende Netzwerk-Hausreinigung durch, um sich auf die bevorstehenden spezifischen Paketkonfigurationen vorzubereiten.

    1. Ermitteln Sie den Windows-Domänennamen, den DNS-Servernamen und die IP-Adresse für den Active Directory-Server (für Samba). Zur Vereinfachung habe ich Umgebungsvariablen für die Windows-Domäne und den DNS-Server festgelegt. Für mich war es (meine AD-IP-Adresse war 192.168.20.11):

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

      Wenn Sie herausfinden möchten, wie Ihre Domain und Ihr DNS-Server lauten (ich war Auftragnehmer und kannte das Netzwerk nicht), lesen Sie diese hilfreiche Referenz .

    2. Wir müssen die Linux-Box auf dem neuen Netzwerk taufen, dies geschieht durch Bearbeiten der Host-Datei (ersetzen Sie den DNS durch den FQDN des Windows-DNS):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. Wir sollten auch den kommenden installierten Diensten mitteilen, wo sie den Marktführer finden: Einige Netzwerke verfügen über NetBIOS-Namenssuchdienste. Fügen Sie jedoch /etc/hostsin meiner Konfiguration einen expliziten Eintrag in Ihre Datei ein. Linie:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. Die Authentifizierungs- und Dateifreigabeprozesse für die Windows- und Linux-Boxen müssen mit ihren Uhren übereinstimmen. Tun Sie dies mit einem NTP-Dienst und auf der Serverversion von Ubuntu wird der NTP-Dienst mit einem (1) NTP- Server installiert und konfiguriert . Füge deins vor dem Ubuntu hinzu (oder ersetze es komplett). In dem Netzwerk, dem ich beigetreten bin, hat der DNS-Server auch den NTP-Dienst bereitgestellt.
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      Starten Sie den NTP-Daemon neu:
      # sudo /etc/init.d/ntp restart

  6. Kerberos-Konfiguration.
    Die hier folgenden Anweisungen sind nicht wörtlich zu verstehen: Die Werte für MYDOMAIN.LOCALund srv1.mydomain.localmüssen durch die für Ihr Netzwerk geeigneten Werte ersetzt werden, wenn Sie die Dateien bearbeiten. Beachten Sie jedoch , dass bei Verwendung von UPPERCASE UPPERCASE erforderlich ist .
    Wenn Sie während der apt-get installvon Kerberos die Einsicht hatten, auf die Frage "Standarddomäne" richtig zu antworten, dann gut für Sie, sonst müssen Sie Folgendes tun.

    1. Bearbeiten Sie die (zuvor oben installierte) /etc/krb5.confDatei.

      1. Suchen Sie den [libdefaults]Abschnitt und ändern Sie das Schlüsselwertpaar:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. Fügen Sie dem [realms]Abschnitt der Datei Folgendes hinzu :

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

      3. Fügen Sie dem [domain_realm]Abschnitt der Datei Folgendes hinzu :
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. An dieser Stelle können Sie testen, ob Ihr AD-Controller Ihnen ein Kerberos-Ticket ausstellt. Dies ist nicht erforderlich, kann aber einige von Ihnen zum Schwindel verleiten :
        # kinit <some_windows_domain_user>
        Dann sehen Sie das Ticket:
        # klist
        Sie sehen Informationen zum Ticket-Cache sowie zu Ablauf- und Erneuerungszeiten. Sobald der Schwindel abgeklungen ist, können Sie das Ticket auch freigeben / zerstören:
        # kdestroy

  7. Konfigurieren Sie Samba.
    Folgendermaßen: Es gibt Zeiten, in denen CIFS nicht verwendet werden kann oder eine andere Wahl des Netzwerkdateisystems besser ist. Wenn kerberos (krb5 / SPNEGO) Authentifizierungsunterstützung für zusätzliche Sicherheit benötigt wird, dann Samba smbclient oder smbfs müssen statt CIFS verwendet werden
    Ach, cifsUnterstützung im Kernel für Ubuntu 10.04 (basierend auf Kernel - Version 2.6.32.9) ist in der Version 1.61 und Laut Kernel-Dokumentation gibt es seit Version 1.54 eine experimentelle Kerberos-Implementierung.
    Da bist du also. Ich habe keine Ahnung, ob cifsdas funktionieren würde, also gebe ich dir die Samba-Konfiguration:

    1. Ersetzen /etc/samba/smb.conf( Denken Sie daran, dass ich in einer sauberen Ubuntu-Distribution gearbeitet habe, sodass ich mir keine Sorgen machte, etwas zu beschädigen):
      [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. Starten und Beenden verschiedener Dienste.

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

  8. Richten Sie die Authentifizierung ein.

    1. Bearbeiten Sie die /etc/nsswitch.conf. Ich konnte den folgenden Befehl ausführen, um das zu erhalten, was ich brauchte:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      Hier ist der Inhalt meiner /etc/nsswitch.confDatei:
      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. Starten und Beenden verschiedener Dienste.
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. Verbinden Sie den Computer mit der Domäne. Ich bin nicht davon überzeugt, dass dies notwendig ist. vor allem wegen der Sicherheitsoption in der smb.confDatei ( security = ads). Vielleicht kann jemand das abwägen ...
    # sudo net ads join -U any_domain_user_account
    Möglicherweise wird eine Fehlermeldung angezeigt DNS update failed!, aber Sie werden der Domain hinzugefügt. Wenn Sie eine Fehlermeldung erhalten, dass der Server nicht gefunden werden kann, müssen Ihre DNS-Einträge geändert werden. Während der Ubuntu-Installation verweist der Nameserver häufig auf Ihr Gateway: Die meisten Router führen einen DNS-Dienst aus. Best Practices für die Windows Server-Verwaltung sind, dass der ADC auch DNS ausführen sollte. In meinem Fall /etc/resolve.confsieht mein so aus:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    Das 8.8.8.8ist ein Google DNS, ein ziemlich zuverlässiges Backup für den Fall, dass das Windows ausfällt.

Zu diesem Zeitpunkt konnte ich mich anmelden (möglicherweise nach einem Neustart), private Verzeichnisse existierten nicht, aber ich konnte mich anmelden.

  1. CIFS-Montage bei der Anmeldung
    Dieser nächste Schritt war die Kirsche für mich; Ich wollte nicht die Verantwortung übernehmen, die Arbeitsverzeichnisse aller zu sichern, und die Box, auf der Ubuntu laufen sollte, war in Bezug auf die Zuverlässigkeit verdächtig. Auf diese Weise können sich Benutzer anmelden und ihr Windows-Benutzerverzeichnis automatisch anzeigen lassen .

    1. Laden Sie das pam_mountModul herunter :
      # sudo apt-get install libpam-mount
      Ich wollte, dass sich der Mount-Punkt an der traditionellen /home/<user>Position befindet: Dieser Teil wird durch die /etc/samba/smb.confDatei ( template homedir = /home/%U) konfiguriert . Aber ich brauchte es, um die Freigabe zu durchsuchen und auf ihr eigenes Windows-Verzeichnis zu verweisen. Dies wird durch Bearbeiten der /etc/security/pam_mount.conf.xmlDatei erreicht (XML ist trotz seiner Absicht nicht für den Menschen lesbar):

    2. Fügen Sie Folgendes hinzu /etc/security/pam_mount.conf.xmlund passen Sie es an:
      <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>

      Wegen meines doof Mount Points musste ich auch diese Zeile hinzufügen:

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

      Und damit die Benutzerverzeichnisse (für den Einhängepunkt) automatisch erstellt werden, suchen Sie die Zeile und machen Sie es so:

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

      Das remove="false"Bit ist sehr wichtig: Wenn es auf true gesetzt ist, wird pam_mount.soversucht, den Verzeichnis-Mount-Punkt zu löschen, was nicht möglich ist, wenn sich ein Benutzer mehrmals angemeldet hat. Was Sie in diesem Fall am Ende haben, sind viele streunende Reittiere auf Ihrem System.

      pam_mount.soliefert immer noch nicht ganz wie versprochen. In der aktuellen Form häufen sich die Mounts und die Home-Verzeichnisse werden nicht erstellt. Irgendwo zwischen hier und der vorherigen Beta 2-Version des 10.04-Servers funktionierte es. Das kann ich aber nicht nachbauen.
      In der Zwischenzeit für die Verzeichniserstellung verlasse ich mich auf pam_mkhomedir.sound stecke eine Zeile unmittelbar vor die pam_mount.soZeile, um sie aufzunehmen.
      Ich habe das Problem mit der Mehrfachmontage immer noch nicht gelöst. Aber bis dies pam_mount.sobehoben ist, habe ich Folgendes in meiner /etc/pam.d/common-sessionDatei:

      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
      

Das ist es. Es hat bei mir funktioniert und ich hoffe, Sie finden es nützlich.

Es wurden zahlreiche Ressourcen in Betracht gezogen, um dies herauszufinden. Hier ist eine kurze Liste (einige dieser Links verweisen auf meine eigenen Fragen zum Thema):

Jamie
quelle
1
Das Deaktivieren der Remote-Root-SSH-Anmeldung ist ein Muss. Brute-Force- / Wörterbuchangriffe sind manchmal erfolgreich. Wenn root kompromittiert ist, verabschieden Sie sich von allem, dem Sie auf dem Computer vertraut haben.
JR Lawhorne
1
ubuntu aktiviert den root account aber nicht ... alles ist sudod, oder vermisse ich etwas?
Jamie
"alles ist sudo" - und das ist besser ... auf welche Weise? (Wenn ein Benutzerkonto, das zu sudo berechtigt ist, kompromittiert wird, ist es im Grunde dasselbe. Und es ist im Grunde gleich einfach, Root- oder Benutzerkonten zu bruteforce. Am besten ist es, nur die Anmeldung mit dem Pub-Schlüssel einzurichten und alle kennwortgeschützten Konten zu deaktivieren.) basierte Logins.)
Kurt Pfeifle
Ich verstehe das, aber überlege: "Am besten ist es, nur den Pub-Key-Login einzurichten" , was den Zweck dieses Beitrags völlig zunichte machen würde .
Jamie
1
Sie können auch ein sudoed- oder root-Konto verwenden und den Namen des root-Benutzers so ändern, dass er nicht root ist. linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData