Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
utilisateurs:quentin:samba_active_directory_domain_controller [Le 03/03/2014, 22:39] Qedinux Modification styles, forme, fonds - Troisième partie |
utilisateurs:quentin:samba_active_directory_domain_controller [Le 11/09/2022, 13:12] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag>BROUILLON}} | ||
====== Samba - Active Directory Domain Controller (AD DC) ====== | ====== Samba - Active Directory Domain Controller (AD DC) ====== | ||
- | Le projet Samba est surtout connu pour le partage de fichiers selon le protocol SMB dévellopé par Microsoft. La version 4 de ce logiciel apporte la fonctionnalité supplémentaire d'un contrôleur de domaine Active Directory (Active Directory Domain Controller - AD DC). Cette fonctionnalité inclue en natif les services [[:likn wikipédia|DNS]], [[:link wikipedia|LDAP]], [[http://fr.wikipedia.org/wiki/Kerberos_%28protocole%29|Kerberos]], [[http://fr.wikipedia.org/wiki/Remote_procedure_call|RPC]] et [[http://fr.wikipedia.org/wiki/Server_Message_Block|SMB 3.0]] + distribution des GPO. | + | Brouillon avant de compléter ou créer un nouvelle page concernant l'authentification d'un utilisateur avec Samba AD DC |
- | <note importante>Une connaissance préalable de AD DC de Microsoft et des fonctionnalités et protocols tels que DNS, LDAP, Kerberos, RPC, GPO, SMB, ... est un atout pour la bonne compréhension et mise en oeuvre de Samba AD DC. Cette documentation s'adresse donc principalement aux administrateurs réseau.</note> | + | La version actuelle se trouve ici [[:samba-active-directory|Samba - Active Directory Domain Controller (AD DC)]] |
- | + | ... | |
- | Samba AD DC permet de créer un DC compatible avec les produits de Microsoft Windows Server allant de 2000 à 2012. Cependant, toutes les fonctionnalitées avancées ne sont pas encore implémentées. Selon les cas, probablement au sein des PME, Samba AD DC pourrait parfaitement remplacer ces produits. | + | |
===== Versions ===== | ===== Versions ===== | ||
- | + | ... | |
- | Samba en version 4 fut premièrement disponible via le paquet **samba4**. Ce paquet est disponible pour toutes les versions d'Ubuntu allant de Lucid (10.04) à Trusty (14.04 LTS). Cependant, il s'agit là d'un paquet de transition.qui ne sera pas conservé sur le long terme. Samba en version 4 devient la version de base du paquet **samba** à partir de Trusty (14.04 LTS). Il est donc conseillé aux utilisateurs de Trusty et des versions qui suiveront de ne plus utiliser le paquet //samba4// mais bien le paquet **samba**. Sous Trusty, samba est fourni en version 4.1.3. | + | |
- | <note>Remarque : Sous Trusty, les paquets samba4 et samba co-existent. Le premier sert de transistion. Son seul rôle est d'installer par le mécanisme de dépendance le paquet samba.</note> | + | |
- | + | ||
- | Samba en version 3 et 4 ne devraient pas co-exister sur une même machine. Si Samba est déjà installé, vous pouvez en vérifier sa version en tapant : | + | |
- | <code>samba -V</code> | + | |
- | + | ||
- | La documentation qui suit est basée sur Ubuntu Trusty avec samba en version 4.1.3. L'ensemble des manipulations qui suivent requiert des droits administrateurs (local sur la machine ou domaine). | + | |
===== Installation de Samba===== | ===== Installation de Samba===== | ||
==== Paramètres généraux ==== | ==== Paramètres généraux ==== | ||
- | Avant toute installation, il est nécessaire de definir son environnement. Ainsi, il sera possible de configurer correctement son serveur. Le reste de cette documentation se basera sur les paramètres suivants : | + | Avant toute installation, il est nécessaire de définir son environnement. Ainsi, il sera possible de configurer correctement son serveur. Le reste de cette documentation se basera sur les paramètres suivants : |
- | |Nom du serveur |ubndc01 | | ||
|Nom de domaine |example.com | \\ RFC 2606 | |Nom de domaine |example.com | \\ RFC 2606 | ||
|Royaume (realm) |EXAMPLE.COM | | |Royaume (realm) |EXAMPLE.COM | | ||
|Nom de NetBIOS |example | | |Nom de NetBIOS |example | | ||
+ | |Nom du serveur |ubndc01 | | ||
|Adresse IP du serveur |192.168.1.11 | | |Adresse IP du serveur |192.168.1.11 | | ||
|Rôle du serveur |DC (contrôleur de domaine) | | |Rôle du serveur |DC (contrôleur de domaine) | | ||
==== Pré-requis ==== | ==== Pré-requis ==== | ||
- | Quelques paquets hors des dépendances du paquet //samba// sont nécessaires afin de bénéficier de l'ensemble des fonctionalités et des outils de test. | + | ... |
- | <code>sudo apt-get install acl attr dnsutils krb5-user</code> | + | |
- | ? Indispensable ou uniquement pour compilation à partir des sources ? | + | |
- | <code>sudo apt-get install build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev \ | + | |
- | libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev \ | + | |
- | dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev</code> | + | |
- | + | ||
- | Le paquet //acl// va, entre autre, installer les commandes //setfacl// et //getfacl// afin de définir et lire les ACL sur un fichier. | + | |
- | + | ||
- | Le paquet //attr// va, entre autre, installer les commandes //setfattr// et //getfattr// afin de définir et lire les attributs étendu d'un fichier. | + | |
- | + | ||
- | Le paquet //dnsutils// va, entre autre, installer les commandes //dig//, //nslookup// et //nsupdate// afin d'interroger et mettre à jour le serveur DNS. Ce paquet n'installe pas un serveur DNS. | + | |
- | + | ||
- | L'installation de //krb5-user// va installer via le mécanisme de dépendance //krb5-config//. Ce paquet va demander d'introduire premièrement le nom du royaume : EXAMPLE.COM, et deuxièmement, si nécessaire, d'introduire les informations relatives aux serveurs kerberos (ubndc01.example.com) du royaume ainsi qu'au serveur d'administration de kerberos (ubndc01.example.com). | + | |
- | + | ||
- | Le paquet //krb5-user// va, entre autre, installer les commandes //kinit// et //klist// qui permettent d'interroger et tester un serveur kerberos. Ce paquet n'installe pas un serveur kerberos. | + | |
- | + | ||
- | Afin de bénéficier de l'ensemble des fonctionnalités de Samba, il est nécessaire d'activer les [[:acl|ACL]] et les attributs étendus (user_xattr) sur les partitions concernées par Samba. Pour ce faire, il faut ajouter dans le fichier /etc/fstab les options acl et user_xattr aux partitions en question. L'ajout de l'option barrier=1 protège les transactions tdb contre la corruption des fichiers (notamment sam.ldb) lors les coupure d'électricité (ou autre crash système). Celle-ci est fortement recommandée sur un DC. | + | |
- | + | ||
- | Exemple d'une partition dans le ficher /etc/fstab | + | |
- | <code>UUID=8059560e-4a78-445b-a363-b3c197b4c7ea / ext4 defaults,acl,user_xattr,barrier=1 0 1</code> | + | |
- | + | ||
- | Après avoir modifié le fichier /etc/fstab, il faut redémarrer la machine ou remonter la partition pour que la modification soit effective | + | |
- | <code>sudo reboot</code> | + | |
- | ou | + | |
- | <code>sudo mount -o remount /</code> | + | |
- | + | ||
- | Le noyau d'Ubuntu Trusty provenant des dépôts a bien les options XATTR, SECURITY et POSIX_ACL pour les systèmes de fichier ext3 et ext4. Toute autre situation nécessitera de vérifier que ces options aient bien été activées pour le système de fichier choisi lors de la compilation du noyau. | + | |
==== Installation à partir des dépôts ==== | ==== Installation à partir des dépôts ==== | ||
- | Cette solution a l'avantage d'être très simple à mettre en oeuvre. | + | ... |
- | <code>sudo apt-get install samba</code> | + | |
==== Installation à partir des sources ==== | ==== Installation à partir des sources ==== | ||
- | En plus des paquets cités dans les pré-requis, le projet Samba recommande d'installer quelques paquets avant d'installer Samba 4 (cfr [[https://wiki.samba.org/index.php/Samba_4/OS_Requirements#Debian_or_Ubuntu|OS Requirements]]) : | + | ... |
- | <code>sudo apt-get install build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev \ | + | |
- | libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev \ | + | |
- | dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev</code> | + | |
- | Cette solution s'adresse aux personnes qui connaissent déjà bien le sujet et qui savent ce qu'apporte une version plus récente que celle disponible dans les dépôts. N'hésitez pas à vous reporter à la page suivante : [[https://wiki.samba.org/index.php/Build_Samba]] | + | |
- | <code>wget http://www.samba.org/samba/stable/samba-4.1.4.tar.gz | + | |
- | tar xvzf samba-4.1.4.tar.gz | + | |
- | cd samba-4.1.4 | + | |
- | ./configure | + | |
- | make && make install | + | |
- | </code> | + | |
- | En résumé, ces quelques lignes permettent de télécharger, décompresser, compiler et installer samba à partir des sources. | + | |
- | <note important>Si vous installez Samba à partir des sources, les chemins pour accéder aux différents fichiers seront certainement différents de ceux utilisés par la distribution. | + | |
- | + | ||
- | Il sera également nécessaire d'installer //samba-tool// à partir des dépôts (cfr **[[apt>samba-common-bin]]** ou **[[apt>samba4-common-bin]]**) ou à partir des sources</note> | + | |
===== Création d'un premier DC dans une nouvelle forêt ===== | ===== Création d'un premier DC dans une nouvelle forêt ===== | ||
- | Ceci constitue l'étape unique qui va créer le premier domaine dans la forêt. Cette étape est indispensable si vous n'avez pas d'autres DC (Samba ou Microsoft). | + | ... |
==== Initialisation de Samba ==== | ==== Initialisation de Samba ==== | ||
- | Préalablement à l'iniatilisation de Samba, il faut supprimer ou renommer le fichier smb.conf | + | ... |
- | <code>sudo mv --backup=t /etc/samba/smb.conf /etc/samba/smb.conf.old</code> | + | ==== Démarrer Samba AD DC ==== |
+ | ... | ||
+ | ===== Test de Samba AD DC ===== | ||
+ | ... | ||
+ | ==== Tests des ACL ==== | ||
+ | ... | ||
+ | ==== Tests des attributs étendus ==== | ||
+ | ... | ||
+ | ==== Tests du DNS ==== | ||
+ | ... | ||
+ | ==== Tests de Kerberos ==== | ||
+ | ... | ||
+ | ==== Tests de SMB ==== | ||
+ | ... | ||
+ | ===== Mise à jour depuis un domaine Samba de type NT4 vers un AD===== | ||
+ | ... | ||
+ | ===== Authentification avec Samba AD DC ===== | ||
+ | Afin de réaliser l'authentification des utilisateurs d'AD, plusieurs méthodes existent : | ||
+ | * [[https://wiki.samba.org/index.php/Local_user_management_and_authentication/sssd|sssd et pam_sss]] | ||
+ | * [[https://wiki.samba.org/index.php/Local_user_management_and_authentication/nslcd|nslcd et pam_ldap]] | ||
+ | * [[https://wiki.samba.org/index.php/Samba4/Winbind|winbind et pam_winbind]] | ||
+ | Seule cette dernière méthode est expliquée dans cette documentation. | ||
- | L'initialisation va créer plusieurs fichiers type base de données stocké dans /var/lib/samba/private/ ainsi que le fichier /etc/samba/smb.conf | + | ==== Authentification des utilisateurs sur le DC avec //winbind// ==== |
- | <code> sudo samba-tool domain provision --use-rfc2307 --interactive</code> | + | === Installation et configuration pour utiliser //winbind// === |
+ | Les paquets suivants sont requis pour la mise en œuvre de cette authentification. | ||
+ | <code>sudo apt-get install libnss-winbind libpam-winbind winbind</code> | ||
- | L'option //--use-rfc2307// active les attributs Posix et crée les informations NIS dans l'AD. Ceci permet d'administrer les UIDs/GIDs et autres paramètres UNIX (visibles sous l'onglet "Unix attributes" de l'[[http://technet.microsoft.com/en-us/library/cc754217.aspx|ADUC]]). Il est plus simple de l'activer durant l'initialisation plutôt que par la suite. De plus, même si vous n'en avez pas (encore) besoin, ceci n'impacte pas votre installation. | + | Il faut configurer le Name Service Switch (nsswitch) par l'ajout de winbind comme méthode pour les sections //passwd// et //group//. |
+ | Par exemple avec la commande : | ||
+ | <code>sudo sed -i '/^passwd:\|^group:/{ s/$/ winbind/; };' /etc/nsswitch.conf</code> | ||
+ | <file - /etc/nsswitch.conf>... | ||
+ | passwd: compat winbind | ||
+ | group: compat winbind | ||
+ | ... | ||
+ | </file> | ||
- | L'option //--interactive// va poser quelques questions pour la création du domaine. Pour connaître, l'ensemble des options relatives à l'initialisation, il est recommandé d'exécuter | + | Ceci permet de chercher et utiliser les utilisateurs, leurs mots de passes et les groupes venant de AD au travers de //winbind//. |
- | <code>samba-tool domain provision --help </code> | + | Par défaut sur un DC, les commandes ci-dessous retourne la liste de tous les utilisateurs et groupes (y compris ceux d'AD). Ce comportement peut être modifié avec l'option //...// dans la partie global du fichier de configuration de samba (/etc/samba/smb.conf) |
- | Si les valeurs satisfont, il ne faut alors que les valider par ENTER | + | <code>getent passwd |
- | <code>Realm [EXAMPLE.COM]: | + | getent group</code> |
- | Domain [EXAMPLE]: | + | |
- | Server Role (dc, member, standalone) [dc]: | + | |
- | DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: | + | |
- | DNS forwarder IP address (write 'none' to disable forwarding) [192.168.10.1]: | + | |
- | Administrator password: | + | |
- | Retype password:</code> | + | |
- | Notes importantes sur cette initialisation : | + | Les UID et GID, s'ils n'existent pas dans l'AD, sont automatiquement généré (par winbind / idmap) mais ils ne sont pas écrits dans AD par winbind. Cette remarque est importante car d'autres machines récupérant ces même informations de l'AD génèreront d'autres UID et GID pour un même utilisateur. Ceci crée une incohérance dans le domaine. |
- | * Par défaut, l'initialisation propose le serveur DNS interne de Samba (SAMBA_INTERNAL) comme serveur DNS. Il est possible d'utiliser Bind comme serveur DNS d'arrière-plan (backend). Si vous choisissez [[http://bind-dlz.sourceforge.net/|BIND9_DLZ]] lors de l'initialisation, référez-vous au wiki [[http://wiki.samba.org/index.php/Samba_AD_DC_HOWTO#BIND_as_DNS_backend|the Bind as DNS backend HowTo]]. A tout moment, il sera possible de changer de serveur DNS d'arrière-plan (([[http://wiki.samba.org/index.php/DNS#Changing_from_Internal_DNS_to_BIND|Basculer de Internal DNS vers BIND]])). Pour plus d'information sur la configuration du serveur DNS et trouver celle qui répond à vos besoins, consultez la page [[https://wiki.samba.org/index.php/DNS#Which_DNS_backend_should_I_choose.3F|Which DNS backend should I choose]] | + | |
- | * Le mot de passe du compte Administrator du domaine doit respecter les règles de complexité, à savoir : au moins une majuscule, un chiffre et 8 caractères de long (par exemple : P@ssw0rd). | + | |
- | * Dans le cas d'une ré-initialisation, en plus des mesures déjà décrites ci-dessus, il sera nécessaire de préallablement supprimer les fichiers de base de données privés de Samba | + | |
- | <code>rm -rf /var/lib/samba/private/*</code> | + | |
- | ==== Démarrer Samba AD DC ==== | + | Idmap écrit les données dans le fichier /var/lib/samba/private/idmap.ldb. Le range prévu pour la création automatique des id's est définit dans dn: CN=CONFIG avec les valeurs lower et upperBound. |
- | Avant de démarrer Samba AD DC, il est important de vérifier la bonne configuration du DNS. | + | <code>sudo ldbsearch -H /var/lib/samba/private/idmap.ldb 'cn=config' |
- | Le fichier /etc/resolv.conf devrait contenir | + | # record 1 |
- | <file - /etc/resolv.conf>search example.com | + | dn: CN=CONFIG |
- | nameserver 127.0.0.1</file> | + | cn: CONFIG |
- | Si ce fichier est géré par //resolvconf//, il faut soit le configurer correctement ou soit supprimer ce paquet. | + | lowerBound: 3000000 |
- | Redémarer la machine. | + | upperBound: 4000000 |
- | <code>sudo reboot</code> | + | xidNumber: 3000017 |
- | <note fixme>Il est certainement possible de redémarrer uniquement les bons services. Lesquels ?</note> | + | distinguishedName: CN=CONFIG |
- | Le service Samba se gère via [[:upstart|Upstart]] ou via la commande //service//. Par exemple, pour connaître son status : | + | </code> |
- | <code>sudo initctl status samba-ad-dc | + | |
- | samba-ad-dc start/running, process 1129</code> | + | |
- | <code>service samba-ad-dc status | + | |
- | samba-ad-dc start/running, process 1129</code> | + | |
- | Pour connaître l'ensemble des services démarrés par samba : | + | |
- | <code>sudo samba-tool processes | + | |
- | Service: PID | + | |
- | ----------------------------- | + | |
- | dnsupdate 959 | + | |
- | nbt_server 933 | + | |
- | rpc_server 932 | + | |
- | cldap_server 942 | + | |
- | winbind_server 949 | + | |
- | kdc_server 943 | + | |
- | samba 0 | + | |
- | dreplsrv 948 | + | |
- | kccsrv 956 | + | |
- | ldap_server 938</code> | + | |
- | On y voit, dans l'ordre, les services suivants DNS, NetBIOS, RPC, Connection-less LDAP (CLDAP), WinBind, KDC (Kerberos Distribution Center), Replication (d?), KCC (Knowledge Consistency Checker), LDAP. Tous ces services sont configurés soit dans /etc/samba/smb.conf, soit dans les fichiers /var/lib/samba/private/*. | + | |
- | ===== Test de Samba AD DC ===== | + | Le fichier //idmap.ldb// n'est présent que sur les DC et pas sur les //member server//. Est-il bon de copier les valeurs des xidNumber vers les uidNumber et gidNumber des utilisateurs et groupes d'AD ? |
- | Samba AD DC est composé de beaucoup de services différents qui interagissent. Les test qui suivent se focaliseront sur l'un ou l'autre point. | + | |
- | ==== Test du DNS ==== | + | En tout cas, afin d'éviter ce type de problème, il est préférable de définir ces valeurs dans AD. Pour ce faire, il faut définir un range d'identifiant réservé uniquement pour AD, par exemple de 100000 à 999999. De plus, afin de garantir que seuls les utilisateurs et groupes possèdant un UID et GID dans AD puissent s'authentifier sur une machine Linux du domaine, il faut ajouter les options suivantes dans la partie globale du fichier de configuration de samba. |
- | Une configuration fonctionnelle du [[:dns|DNS]] est essentielle pour assurer le bon fonctionnement de Samba et de l'AD. Sans les bons paramètres, Kerberos ne fonctionnera pas, entraînant le non-fonctionnement des services de base ! Afin d'éviter de perdre son temps à cause d'un problème DNS, il faut attraper le réflexe de systématiquement vérifier le bon fonctionnement du DNS. La connaissance des requêtes adéquates pour identifier chaque problème est également nécessaire. Pour plus d'information, consulter [[https://wiki.samba.org/index.php/DNS_Administration|DNS Administration ]] et [[https://wiki.samba.org/index.php/Samba_AD_management_from_windows | administrer Samba AD depuis windows ]]. | + | <file - /etc/samba/smb.conf> |
- | + | ||
- | Pour que le serveur DNS interne puisse fonctionner, le port 53 udp/tcp ne doit pas être utilisé par d'autres programmes (tel qu'un autre serveur DNS, Dnsmasq, etc...). Vous aurez des erreurs dans le logfile (quel fichier ?) si Samba ne peut utiliser le port 53, telle que : | + | |
- | <code> Failed to bind to 0.0.0.0:53 TCP - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED </code> | + | |
- | Pour vérifier quel programme est sur le port 53 | + | |
- | <code>sudo netstat -tunpe | grep ":53" </code> | + | |
- | + | ||
- | Voici quelque requêtes de base : | + | |
- | * Vérification du fonctionnement du service DNS par une résolution simple. | + | |
- | <code>dig ubndc01.example.com | + | |
... | ... | ||
- | ubndc01.example.com. 900 IN A 192.168.1.11 | + | # Pas nécessaire sur un DC car les valeurs sont prises dans idmap.ldb si elles n'existent pas dans AD |
+ | idmap config EXAMPLE:backend = ad | ||
+ | idmap config EXAMPLE:schema_mode = rfc2307 | ||
+ | idmap config EXAMPLE:range = 100000-999999 | ||
+ | |||
+ | # A ajouter sur les member servers mais pas sur les DC | ||
+ | #winbind nss info = rfc2307 | ||
... | ... | ||
- | ;; SERVER: 127.0.0.1#53(127.0.0.1) | + | </file> |
- | ...</code> | + | |
- | On voit sur la dernière ligne mise en évidence ici, quel serveur a répondu à la requête. Si ce n'est pas le bon serveur, il faut vérifier /etc/resolv.conf. | + | |
- | * Résolution d'une requête spécifique pour l'utilisation de Kerberos | + | == Création du home directory de l'utilisateur == |
- | <code>dig -t SRV _kerberos._tcp.example.com | + | |
- | ... | + | |
- | _kerberos._tcp.example.com. 900 IN SRV 0 100 88 ubndc01.example.com. | + | |
- | ...</code> | + | |
- | * Résolution d'une requête spécifique pour l'utilisation de LDAP | + | * Cette première méthode est très générique et s'applique à tous les utilisateurs de la machine (pas uniquement ceux d'AD) |
- | <code>dig -t SRV _ldap._tcp.example.com | + | <file - /usr/share/pam-configs/mkhomedir> |
- | ... | + | Default: no |
- | _ldap._tcp.example.com. 900 IN SRV 0 100 389 ubndc01.example.com. | + | Priority: 900 |
- | ...</code> | + | Session-Type: Additional |
+ | Session-Final: | ||
+ | required pam_mkhomedir.so skel=/etc/skel umask=0077 silent | ||
+ | </file> | ||
- | * Résolution d'une adresse externe au domaine | + | * Alternative en mofdifiant le fichier /usr/share/pam-config/winbind |
- | <code>dig doc.ubuntu-fr.org | + | <file - /usr/share/pam-configs/winbind>... |
- | ... | + | Session: |
- | doc.ubuntu-fr.org. 1276 IN A 86.65.39.28 | + | optional pam_winbind.so mkhomedir |
- | ...</code> | + | |
- | En cas d'absence de réponse, il faut vérifier qu'il y ait une ligne //dns forwarder// pointant vers l'IP d'un serveur DNS externe au domaine dans le fichier /etc/samba/smb.conf | + | |
- | <file conf /etc/samba/smb.conf> | + | |
- | ... | + | |
- | dns forwarder = 192.168.1.1 | + | |
...</file> | ...</file> | ||
- | Si tel est le cas, il faut vérifier qu'il s'agisse de la bonne IP et que la requête aboutisse correctement sur cet autre serveur DNS avec : | + | Cette alternative crée bien le home directory de l'utilisateur. Les droits sur ce répertoire sont correctement définis (700 avec owner: uidNumber et group: gidNumber) |
- | <code>dig doc.ubuntu-fr.org @192.168.1.1</code> | + | |
- | ==== Tests de Kerberos ==== | + | * Un autre alternative consiste à monter le home directory de l'utilisateur lors du login. Une option du fichier de configuration /etc/samba/smb.conf est //homedir map = auto.home//. Ceci fait référence à autofs. Développement Ult. |
+ | == Limitation de l'accès à un ou plusieurs SID == | ||
+ | Il est possible de limiter la possibilité l'accès à certains utilisateurs ou certains groupes sur base de leur SID. Il faut ajouter //require_membership_of=<SID>// à la fin de la ligne pam_winbind.so de la section //Auth:// du fichier /usr/share/pam-config/winbind | ||
+ | <file - /usr/share/pam-configs/winbind>... | ||
+ | Auth: | ||
+ | [success=end default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass required_membership_of=S-1-5-21-5555555555-555555555-5555555555-512 | ||
+ | ...</file> | ||
+ | Le RID 512 représente le groupe //Domain Admins// | ||
- | Lors de l'initialisation, le fichier de configuration du serveur Kerberos(([[http://irp.nain-t.net/doku.php/320kerberos:start|Documentation sur Kerberos et son fonctionnement]])) de Samba est automatiquement crée et se trouve sur /var/lib/samba/private/krb5.conf. Son contenu par défaut est : | + | == Appliquer les modifications des configurations PAM == |
- | <file - krb5.conf>[libdefaults] | + | Afin d'appliquer les modifications faites aux différents fichiers de configuration de pam (/usr/share/pam-configs/*), il faut exécuter : |
- | default_realm = EXAMPLE.COM | + | <code>sudo pam-auth-update</code> |
- | dns_lookup_realm = false | + | |
- | dns_lookup_kdc = true | + | |
- | </file> | + | |
- | Les commandes fournies par le paquet //krb5-user// (//kinit//, //klist//, ...) utilise le fichier de configuration /etc/krb5.conf. Celui-ci a été crée lors de l'installation du paquet //krb5-config//. Dans ce fichier, seuls 2 parties sont utiles : | + | ==== Générer les uidNumber et gidNumber dans l'AD ==== |
- | <file - /etc/krb5.conf>[libdefaults] | + | Le script suivant permet d'ajouter les uidNumber et gidNumber pour chaque utilisateur et chaque groupe de l'AD. |
- | default_realm = EXAMPLE.COM | + | <note important>Ce script nécessite des droits élevés permettant d'écrite dans l'AD (p.ex. : root via la commande //sudo//). Une mauvaise exécution de ce script pourrait endommager AD ou faire perdre des données.</note> |
- | ... | + | <file bash uid-gid_master.sh> |
- | [realms] | + | #!/bin/bash |
- | EXAMPLE.COM = { | + | |
- | kdc = ubndc01.example.com | + | |
- | admin_server = ubndc01.example.com | + | |
- | } | + | |
- | ...</file> | + | |
- | La seconde partie n'est même pas nécessaire si les record ont bien été crées dans le serveur DNS. | + | |
- | <note important>Le nom du "royaume" (realm) s'écrit toujours **lettres majuscules**</note> | + | |
- | * Demande d'un ticket-granting ticket (TGT) pour un utilisateur avec //kinit// | + | # Vérifier si ces valeurs existent dans smb.conf |
- | <code>kinit administrator@EXAMPLE.COM | + | # idmap config REALM:range = min-max |
- | password for administrator@EXAMPLE.COM: | + | rangeMin=100000 |
- | Warning: Your password will expire in x days on ... </code> | + | rangeMax=999999 |
- | La même commande en omettant le @ nom du royaume doit donner le même résultat. Dans ce cas, //kinit// prends la valeur du //default_realm// inscrite dans le fichier de configuration /etc/krb5.conf | + | |
- | * Pour voir le TGT reçu, il faut utiliser la commande //klist// | + | sam=/var/lib/samba/private/sam.ldb |
- | <code>klist | + | |
- | Ticket cache: FILE:/tmp/krb5cc_1000 | + | |
- | Default principal: administrator@EXAMPLE.COM | + | |
- | Valid starting Expires Service principal | + | createTmpDir() { |
- | 03/03/14 20:17:43 04/03/14 06:17:43 krbtgt/EXAMPLE.COM@EXAMPLE.COM | + | tmpDir=$(mktemp -d --tmpdir addGid.XXXXXX) || exit 1 |
- | renew until 04/03/14 20:17:35 | + | tmpRecord=$tmpDir/record_ |
- | </code> | + | tmpLdif=$tmpDir/ldif |
+ | } | ||
+ | cleanTmpDir() { | ||
+ | rm $tmpDir/* | ||
+ | } | ||
+ | removeTmpDir() { | ||
+ | rm -r $tmpDir | ||
+ | } | ||
+ | |||
+ | findMaxId() { | ||
+ | ldbsearch -H $sam "$regexp" $field | sed '/^# Referral/ { :loop; N; $! b loop; d; }; s/^\([a-zA-Z0-9]*\): \(.*\)$/\1="\2"/g; /^$/d;' | awk '/^# record/{n++}{print > f n}' f=$tmpRecord | ||
+ | |||
+ | maxID=$rangeMin | ||
+ | for file in `grep -l -E "^$field=" ${tmpRecord}*` | ||
+ | do | ||
+ | source $file | ||
+ | if [ ${!field} -gt $rangeMax ] | ||
+ | then | ||
+ | echo "Warning: $field ${!field} for $dn is bigger than max id $rangeMax" 1>&2 | ||
+ | elif [ ${!field} -lt $rangeMin ] | ||
+ | then | ||
+ | echo "Warning: $field ${!field} for $dn is lower than min id $rangeMin" 1>&2 | ||
+ | else | ||
+ | [ ${!field} -gt $maxID ] && maxID=${!field} | ||
+ | fi | ||
+ | done | ||
- | <note tip>Il est possible de changer le mot de passe du compte administrator avec les droits superutilisateur (root) avec la commande | + | echo "Max ID found for $field: $maxID" |
- | <code>sudo samba-tool user setpassword administrator</code></note> | + | } |
- | ==== Tests de SMB ==== | + | |
- | Pour cette partie, il est nécessaire d'installer //smbclient// | + | |
- | <code>sudo apt-get install smbclient</code> | + | |
- | Si //samba// a été installé à partir des sources, il faut veiller à avoir une //smbclient// en version 4 également. | + | |
- | * Lister les partages définis localement sur le DC : | + | addIdNumber() { |
- | <code>smbclient -L localhost -U% | + | for file in `grep -L -E "^$field=" ${tmpRecord}*` |
- | Domain=[EXAMPLE] OS=[Unix] Server=[Samba 4.1.3-Ubuntu] | + | do |
+ | ((maxID++)) | ||
+ | source $file | ||
+ | echo "Adding $field: $maxID for dn: $dn" | ||
+ | echo "dn: $dn | ||
+ | changetype: modify | ||
+ | add: $field | ||
+ | $field: $maxID" > $tmpLdif | ||
+ | ldbmodify -H $sam $tmpLdif | ||
+ | done | ||
+ | } | ||
- | Sharename Type Comment | + | umask 0077 |
- | --------- ---- ------- | + | createTmpDir |
- | netlogon Disk | + | |
- | sysvol Disk | + | |
- | IPC$ IPC IPC Service (Samba 4.1.3-Ubuntu) | + | |
- | Domain=[EXAMPLE] OS=[Unix] Server=[Samba 4.1.3-Ubuntu] | + | |
- | Server Comment | + | field=uidNumber |
- | --------- ------- | + | regexp="(&(objectclass=user)(!(objectclass=computer)))" |
+ | findMaxId | ||
+ | addIdNumber | ||
+ | cleanTmpDir | ||
- | Workgroup Master | + | field=gidNumber |
- | --------- ------- | + | regexp="(objectclass=group)" |
- | WORKGROUP</code> | + | findMaxId |
- | Un AD DC possède toujours les partages netlogon et sysvol. Ils sont nécessaires au fonctionnement d'AD. Ces partages doivent se retrouver dans le fichier de configuration de samba /etc/samba/smb.conf. | + | addIdNumber |
+ | cleanTmpDir | ||
- | * Vérifier de l'authentification d'un utilisateur avec la même commande mais en utilisant l'utilisateur administrator. | + | removeTmpDir |
- | <code>smbclient -L localhost -UAdministrator | + | |
- | Enter administrator's password: | + | |
- | ...</code> | + | |
- | Le résultat doit être identique au précédent si on introduit le bon mot de passe pour le compte administrator. | + | |
- | ==== Configuration NTP ==== | + | exit 0 |
+ | </file> | ||
- | ===== Mise à jour depuis un domaine Samba de type NT4 vers un AD===== | ||
- | Si vous prévoyez la migration depuis un domain Samba NT4 existant vers un domaine Samba AD, reportez-vous à Classicupgrade HowTo ([[http://wiki.samba.org/index.php/Samba4/samba-tool/domain/classicupgrade/HOWTO]]) | ||
+ | ===== Informations optionnelles et complémentaires ===== | ||
+ | ... | ||
===== Références ===== | ===== Références ===== | ||
- | * wiki Samba : [[http://wiki.samba.org/index.php/Samba_AD_DC_HOWTO]] | + | ... |
- | * articles dans linux pratique n°79 de sept/oct 2013 (pages 68 à 73) et linux pratique n°80 de nov/déc (pages 70 à 76) | + | |
//Contributeurs principaux : [[utilisateurs:bcag2|bcag2]], [[:utilisateurs:Qedinux|Qedinux]]// | //Contributeurs principaux : [[utilisateurs:bcag2|bcag2]], [[:utilisateurs:Qedinux|Qedinux]]// |