Comment authentifier des comptes Linux par rapport à Active Directory et monter un partage Windows à la connexion?

18

J'utilise le serveur Ubuntu 10.04.

Jamie
la source
Cela aurait dû être affiché comme réponse à une question. Veuillez le modifier afin qu'il s'agisse d'une question et déplacer ce que vous avez publié ci-dessus pour y répondre. De la FAQ : "Il est également parfaitement bien de poser et de répondre à votre propre question, mais faites comme si vous étiez sur Jeopardy: formulez-le sous la forme d'une question."
pause jusqu'à nouvel ordre.

Réponses:

27

[Modifier] J'ai depuis testé cette version complète du serveur Ubuntu 10.04 (21 / mai / 2010) .

J'ai configuré mon serveur Ubuntu 10.04 LTS résidant sur un réseau Windows pour authentifier les connexions à l'aide du répertoire actif, puis monter un partage Windows pour servir de répertoire de base.

Voici ce que j'ai fait à partir de l'installation initiale d'Ubuntu.

  1. Téléchargez et installez Ubuntu Server 10.04 LTS
  2. Obtenir les mises à jour

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

  3. Installer un serveur SSH ( sshd)

    # sudo apt-get install openssh-server

    Certains diront que vous devez "verrouiller sshd down" en désactivant les connexions root. Je pense que si vous êtes assez intelligent pour pirater une session ssh pour un mot de passe root, vous ne serez probablement pas contrecarré par l'ajout de PermitRootLogin nodans le /etc/ssh/sshd_configfichier. Si votre paranoïaque ou pas tout simplement pas convaincu, modifiez le fichier ou faites le tour suivant:

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

  4. Installer les packages requis

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

  5. Effectuez un nettoyage de base du réseau en vue des configurations de package spécifiques à venir.

    1. Déterminez votre nom de domaine Windows, le nom du serveur DNS et l'adresse IP du serveur Active Directory (pour Samba). Pour des raisons de commodité, j'ai défini des variables d'environnement pour le domaine Windows et le serveur DNS. Pour moi, c'était (mon adresse IP AD était 192.168.20.11):

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

      Si vous voulez savoir quel est votre domaine et votre serveur DNS (j'étais entrepreneur et ne connaissais pas le réseau), consultez cette référence utile .

    2. Nous devons baptiser la boîte Linux sur le nouveau réseau, cela se fait en éditant le fichier hôte (remplacez le DNS de par le FQDN du Windows DNS):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. Nous devons également indiquer aux services installés à venir où ils peuvent trouver le leader: certains réseaux auront des services de recherche de nom netbios, mais juste au cas où, ajoutez une entrée explicite dans votre /etc/hostsfichier, dans ma configuration j'ai ajouté l'entrée sur le troisième (3) ligne:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. Les processus d'authentification et de partage de fichiers pour les boîtes Windows et Linux doivent avoir leurs horloges d'accord. Pour ce faire, avec un service NTP, et sur la version serveur d'Ubuntu, le service NTP est installé et configuré avec un (1) serveur NTP. Ajoutez le vôtre avant celui d'Ubuntu (ou remplacez-le entièrement). Le réseau que je rejoignais avait le serveur DNS servant également le service NTP.
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      Redémarrez le démon NTP:
      # sudo /etc/init.d/ntp restart

  6. Configuration Kerberos.
    Les instructions qui suivent ici ne doivent pas être prises à la lettre: les valeurs MYDOMAIN.LOCALet srv1.mydomain.localdoivent être remplacées par ce qui est approprié pour votre réseau lorsque vous modifiez les fichiers, mais notez que là où UPPERCASE est utilisé, UPPERCASE est nécessaire .
    Si, au cours apt-get installde Kerberos, vous avez eu la perspicacité de répondre correctement à la question "domaine par défaut", alors, bonjour pour vous, sinon vous devrez faire ce qui suit.

    1. Modifiez le /etc/krb5.conffichier (précédemment installé ci-dessus) .

      1. Recherchez la [libdefaults]section et modifiez la paire de valeurs clés:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. Ajoutez ce qui suit à la [realms]section du fichier:

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

      3. Ajoutez ce qui suit à la [domain_realm]section du fichier:
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. Un bon test à ce stade est de voir si votre contrôleur AD vous délivrera un ticket Kerberos. Ce n'est pas nécessaire, mais cela peut rendre certains d'entre vous étourdis:
        # kinit <some_windows_domain_user>
        Ensuite, pour voir le ticket:
        # klist
        vous verrez des informations sur le cache du ticket et les expirations et renouvellements. Une fois que le vertige s'estompe, vous pouvez également libérer / détruire le ticket:
        # kdestroy

  7. Configurez samba.
    Selon ce qui suit: Il y a des moments où CIFS ne peut pas être utilisé ou un autre choix de système de fichiers réseau est préférable. Si la prise en charge de l'authentification kerberos (krb5 / SPNEGO) est nécessaire pour plus de sécurité, alors smbclient ou smbfs de Samba doivent être utilisés à la place de cifs
    Hélas, la cifsprise en charge dans le noyau pour ubuntu 10.04 (basée sur la version 2.6.32.9 du noyau) est à la version 1.61, et selon la documentation du noyau, l'implémentation expérimentale de kerberos existe depuis la version 1.54.
    Vous voilà donc. Je ne sais pas si cifscela fonctionnerait donc je vous donne la configuration de samba:

    1. Remplacer /etc/samba/smb.conf(rappelez-vous que je travaillais à partir d'une distribution propre d'Ubuntu, donc je n'étais pas inquiet de casser quoi que ce soit):
      [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. Démarrez et arrêtez divers services.

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

  8. Configurez l'authentification.

    1. Modifiez le /etc/nsswitch.conf. J'ai pu exécuter la commande suivante pour obtenir ce dont j'avais besoin:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      Voici le contenu de mon /etc/nsswitch.conffichier:
      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. Démarrez et arrêtez divers services.
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. Joignez l'ordinateur au domaine. Je ne suis pas convaincu que cela soit nécessaire; notamment à cause de l'option de sécurité dans le smb.conffichier ( security = ads). Peut-être que quelqu'un peut peser là-dessus ...
    # sudo net ads join -U any_domain_user_account
    Vous pourriez obtenir une erreur DNS update failed!, mais que vous serez joint au domaine. Si vous obtenez une erreur de ne pas pouvoir trouver le serveur, vos enregistrements DNS doivent être modifiés. Pendant l'installation d'Ubuntu, le serveur de noms pointera souvent vers votre passerelle: la plupart des routeurs feront un service DNS. Les meilleures pratiques pour l'administration du serveur Windows sont que l'ADC doit également exécuter DNS. Dans mon cas , mes /etc/resolve.confressemble à ceci:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    Le 8.8.8.8est un Google DNS, une sauvegarde assez fiable dans le cas où les fenêtres on descend.

À ce stade, je pouvais me connecter (peut-être après un redémarrage), les répertoires personnels n'existaient pas, mais je pouvais me connecter.

  1. Montage CIFS lors de la connexion
    Cette étape suivante a été la cerise pour moi; Je ne voulais pas la responsabilité de sauvegarder les répertoires de travail de tout le monde, et la boîte qu'Ubuntu devait exécuter était suspecte en termes de fiabilité. En procédant comme suit, les utilisateurs peuvent se connecter et voir automatiquement leur répertoire d'utilisateurs Windows .

    1. Téléchargez le pam_mountmodule:
      # sudo apt-get install libpam-mount
      je voulais que le point de montage soit à l' /home/<user>emplacement traditionnel : cette partie est configurée par le /etc/samba/smb.conffichier ( template homedir = /home/%U). Mais j'en avais besoin pour explorer le partage et pointer vers leur propre répertoire Windows. Ceci est accompli en éditant le /etc/security/pam_mount.conf.xmlfichier (qui malgré son intention, XML n'est pas lisible par l'homme):

    2. Ajoutez les éléments suivants /etc/security/pam_mount.conf.xmlet modifiez-les en fonction:
      <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>

      À cause de mon point de montage maladroit, j'ai dû ajouter cette ligne aussi:

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

      Et pour que les répertoires utilisateur (pour le point de montage) soient créés, trouvez automatiquement la ligne et faites-la ainsi:

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

      Le remove="false"bit est assez important: s'il est défini sur true, pam_mount.soessaie de supprimer le point de montage du répertoire, ce qu'il ne peut pas faire si un utilisateur s'est connecté plusieurs fois. Dans ce cas, vous vous retrouvez avec beaucoup de montures parasites sur votre système.

      pam_mount.sone livre toujours pas tout à fait comme promis. Dans sa forme actuelle, les montures s'accumulent et les répertoires personnels ne sont pas créés. Quelque part entre ici et la version Beta 2 précédente du serveur 10.04, cela fonctionnait. Je ne peux pas recréer cela cependant.
      En attendant, pour la création du répertoire, je compte sur pam_mkhomedir.so, et j'ai collé une ligne juste avant la pam_mount.soligne pour l'adapter.
      Je n'ai toujours pas résolu le problème de montage multiple. Mais jusqu'à ce que ce pam_mount.sosoit corrigé, voici ce que j'ai dans mon /etc/pam.d/common-sessionfichier:

      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
      

C'est ça. Cela a fonctionné pour moi et j'espère que vous le trouverez utile.

De nombreuses ressources ont été envisagées afin que je puisse comprendre cela. Voici une courte liste (un certain nombre de ces liens pointent vers mes propres questions sur le sujet):

Jamie
la source
1
La désactivation de la connexion à distance root ssh est un must. Les attaques par force brute / dictionnaire réussissent parfois. Si root est compromis, dites au revoir à tout ce en quoi vous avez confiance sur la machine.
JR Lawhorne
1
ubuntu n'active cependant pas le compte root ... tout est sudod, ou ai-je raté quelque chose?
Jamie
'tout est sudo' - Et c'est mieux ... de quelle manière? (Si un compte utilisateur qui a droit à sudo est compromis, c'est essentiellement la même chose. Et il est tout aussi simple [ou pas] de forcer les comptes root ou utilisateur. Le mieux est de configurer la connexion pub-key uniquement et de désactiver tous les mots de passe- sur la base de connexions.)
Kurt Pfeifle
J'obtiens cela, mais considérez: "Le mieux est de configurer uniquement la connexion pub-key" , ce qui irait totalement à l' encontre du but de cet article.
Jamie
1
vous pouvez également utiliser un compte sudoed ou root et modifier le nom de l'utilisateur root afin qu'il ne soit pas root linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData