Rechercher sur ce site...

Catégorie : Contrôleur de domaine

Intégration d'un poste Linux dans un domaine

Objectif :

  • Permettre de se connecter sur un poste Linux grace à un couple Login/Mdp existant dans un AD.

Prérequis:

  • Un contrôleur de domaine fonctionnel (Windows Server 20XX ou Samba4)
  • Le serveur DNS des client Linux pointant sur le serveur AD.

Configuration du poste :

apt-get install samba winbind libpam-winbind krb5-user libnss-winbind
/etc/init.d/smbd stop
/etc/init.d/nmbd stop
/etc/init.d/winbind stop
mv /etc/krb5.conf /etc/krb5.conf.old
cat > /etc/krb5.conf << EOF
[libdefaults]
    default_realm = DOM.JBSKY.FR
    dns_lookup_realm = false
    dns_lookup_kdc = true
EOF
mv /etc/samba/smb.conf /etc/samba/smb.conf.old
cat > /etc/samba/smb.conf << EOF
[global]
       security = ADS
       workgroup = DOM
       realm = DOM.JBSKY.FR

       log file = /var/log/samba/%m.log
       log level = 1

       # Default ID mapping configuration for local BUILTIN accounts
       # and groups on a domain member. The default (*) domain:
       # - must not overlap with any domain ID mapping configuration!
       # - must use an read-write-enabled back end, such as tdb.
       idmap config * : backend = tdb
       idmap config * : range = 3000-7999
       
       winbind use default domain = yes
       winbind enum users = yes
       winbind enum groups = yes
       template shell = /bin/bash
EOF
cp /etc/nsswitch.conf /etc/nsswitch.conf.old
sed -i 's/^passwd:.*$/passwd:         compat winbind/g' /etc/nsswitch.conf
sed -i 's/^group:.*$/group:          compat winbind/g' /etc/nsswitch.conf
sed -i 's/^shadow:.*$/shadow:         compat winbind/g' /etc/nsswitch.conf

systemctl enable winbind
systemctl enable smbd
systemctl enable nmbd

/etc/init.d/smbd start
/etc/init.d/nmbd start
/etc/init.d/winbind start

net ads join -U Administrator

Si tout va bien :

#Using short domain name -- DOM
#Joined 'WKS' to dns domain 'dom.jbsky.fr' <= OK

Ne pas tenir compte de l'erreur, évitable si l'on fixe l'adresse IP et le FQDN de la machine.

No DNS domain configured for WKS. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER

Vérification

  • Ping du dc:
wbinfo --ping-dc
checking the NETLOGON for domain[DOM] dc connection to "dc1.dom.jbsky.fr" succeeded

  • Lister les utilisateurs
wbinfo -u
  • Lister les groupes
wbinfo -g

  • Tester si l'utilisateur se connecte bien en kerberos
kinit user
klist #pour voir les tickets

  • Pour voir la liste des utilisateurs
getent passwd
#julien:*:3000:3004:Julien:/home/DOM/julien:/bin/bash

  • Pour voir la liste des groupes :
getent group
#utilisateurs du domaine:x:3004:

  • Création des répertoires
mkdir /home/DOM
setfacl -m g:"utilisateurs du domaine":rwx -R /home/DOM
setfacl -m g:"DOM\utilisateurs du domaine":rwx -R /home/DOM

Sinon les utilisateurs ne pourront pas créer leur répertoires dès la premier connexion!

Pour que l'utilisateur du domaine récupère les droits de son anciens home/$USER

chown 3000:3004 /home/user/ -R
# possibilité de faire un lien
ln -s /home/julien/ /home/DOM/julien

adduser julien sudo

Plus qu'à tester le login d'un utilisateur sur un poste Linux dans un domaine

 

Samba 4

Samba 4 peut s'exécuter  comme un contrôleur de domaine (DC). Dans un environnement de production, il est recommandé d'exécuter plusieurs DC pour des raisons de "basculement". Samba 4 est administrable depuis un client Windows à l'aide des outils RSAT.

Prérequis

  • Une machine Linux debian de préférence.
  • Configurer le serveur DHCP en pointant l'adresse du serveur DNS primaire vers le futur DC.
  • Un serveur NTP opérationnel.
  • Un nom de domaine : dom.jbsky.fr

Comme Microsoft et Samba4 préconise d'utiliser un nom DNS réel, j'ai mis un nom de domaine réel en 3 parties (Active Directory Naming FAQ). Soit le contrôleur de domaine n°1 aura un FQND : dc1.dom.jbsky.fr.

Configurer le serveur

  • Configurer une adresse IP statique pour le DC À vérifier que le fichier /etc/hosts  résout correctement son FQND  :
127.0.0.1     localhost.localdomain      localhost
192.168.0.1   dc1.dom.jbsky.fr     dc1
  • Modification du fichier fstab, on ajoute dans les options pour chaque montage "acl,user_xattr,barrier=1".
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /               ext4    errors=remount-ro,user_xattr,acl,barrier=1    0       1
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /home           ext4    defaults,user_xattr,acl,barrier=1        0       2 
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /usr            ext4    defaults,user_xattr,acl,barrier=1        0       2 
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /var            ext4    defaults,user_xattr,acl,barrier=1        0       2 
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX none            swap    sw              0       0
  • On met à jour son système et on installe les paquets nécessaires :
apt-get update && apt-get upgrade
apt-get install ca-certificates build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls28-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr acl docbook-xsl libcups2-dev libpam0g-dev ntpdate ntp -y

Purge des précédentes installations

  • Attention, désinstallé aussi tous les serveur DNS comme unbound/dnsmasq!
apt-get remove krb5-config smbldap-tools libcrypt-smbhash-perl libnss3 \
libnss-mdns libnss-ldapd  libnss-ldap samba-libs samba-common samba-doc \
samba-libs:amd64 ldb-tools samba --purge --auto-remove

rm /usr/include/samba-4.0/ -R
rm /usr/lib/samba -R
rm /etc/samba/smb.conf
rm /usr/lib/python2.7/dist-packages/samba -R
rm /var/lib/samba/ -R

Compilation/Installation de samba 4:

cd /usr/src
wget http://ftp.samba.org/pub/samba/samba-latest.tar.gz
tar xvf samba-latest.tar.gz
  • A l'heure où j'écris, nous sommes à la version 4.5.5.
cd samba-4.5.5
./configure --enable-debug --enable-selftest --prefix=/usr --enable-fhs \
--sysconfdir=/etc \
--localstatedir=/var \
--with-lockdir=/var/run/samba \
--with-statedir=/var/lib/samba \
--with-cachedir=/var/cache/samba
make
make install

Création de l'AD

samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2

Vérifier que la ligne ci-dessous, dans le fichier smb.conf, pointe bien sur le serveur DNS habituel de votre réseau.

dns forwarder = 8.8.8.8

Il est possible d'ajouter un répertoire de partage dans le fichier smb.conf, par exemple :

echo "[home$]" >> /etc/samba/smb.conf
echo -e "\tpath = /home/%U" >> /etc/samba/smb.conf
echo -e "\tread only = No" >> /etc/samba/smb.conf

Le signe $ indique que le partage est caché.

On lance le service.

samba

On vérifie que samba écoute bien sur le port 53.

 netstat -aneptu |grep ":53 "
 tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      0          60722       16374/samba
 tcp6       0      0 :::53                   :::*                    LISTEN      0          60720       16374/samba
 udp        0      0 0.0.0.0:53              0.0.0.0:*                           0          60723       16374/samba
 udp6       0      0 :::53                   :::*                                0          60721       16374/samba

Test du DNS :

cat "nameserver 127.0.0.1" > /etc/resolv.conf
dhost -t SRV _ldap._tcp.dom.jbsky.fr
host -t SRV _kerberos._udp.dom.jbsky.fr 
host -t A dc1.dom.jbsky.fr

ajout de la zone de recherche inversé, évite une erreur 41 avec nslookup.

samba-tool dns zonecreate dc1 10.168.192.in-addr.arpa --username=administrator

Si tout est ok jusqu'ici et que les pares feux correctement ouvert, on peux maintenant joindre un Client au domaine.

/!\

*Suite a un duplication de profil (à force de test), j'ai du nettoyer dans le registre de la machine cliente:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-XXXXXXXX-XXXXXXXXX-XXXXXXX-XXXX

Mappage des Groupes

Scénario deluge

Deluge est un serveur de téléchargement de torrent.

Prérequis

  • J’ai ajouté dans le fichier smb.conf le partage deluge.
  • Enfin, j’ai un user/group Unix du nom de deluge qui possède les droits sur le répertoire. L’idéal est que l’uid correspond bien au gid sur les futurs répertoires partagé..
  • Créer un groupe deluge et un utilisateur appartenant au groupe deluge avec les outils RSAT.

Configuration

  • La base de donnée de mappage idmap.ldb se situe dans le répertoire /var/lib/samba/private/.
  • Elle est accessible par la commande ci-dessous:

 

ldbedit -e nano -H /var/lib/samba/private/idmap.ldb
  • La commande qui nous intéresse pour trouver les SID correspondant aux groupes et utilisateurs du domaine et wbinfo.
wbinfo --help
-n, --name-to-sid=NAME                             Converts name to sid
-u, --domain-users                                 Lists all domain users
-g, --domain-groups                                Lists all domain groups
-s, --sid-to-name=SID                              Converts sid to name
-S, --sid-to-uid=SID                               Converts sid to uid
-Y, --sid-to-gid=SID
  • La procédure est un peu lourde dans le sens où il faut d’abord obtenir le SID (option -n) grâce au nom soit du groupe (option -g) soit de l’utilisateur (option -u). * Ensuite, voir la correspondance (option -Y) et la créer si elle n’existe pas.
  • Enfin, il est possible de changer le numéro xid dans la base de donnée de mappage.
  • En dernier lieu, vérifier si le numéro correspond enfin au numéro unix.
wbinfo -g
DOM\deluge
  • Pour obtenir le numéro SID :
wbinfo -n "DOM\deluge"
# S-1-5-21-466102154-213423172-5412416656-1108 SID_DOM_GROUP (2)
wbinfo -Y S-1-5-21-466102154-213423172-5412416656-1108
# 3000012
ldbedit -e nano -H /var/lib/samba/private/idmap.ldb objectsid=S-1-5-21-466102154-213423172-5412416656-1108
# 0 adds  1 modifies  0 deletes

forcer la mise à jour du mappage

  • il faut nettoyer le cache.
net cache flush #Permet de mettre à jour le mapage
wbinfo -Y S-1-5-21-466102154-213423172-5412416656-1108
# 129

Personnellement, j’ai créée une fonction adedit dans /usr/local/sbin

#!/bin/bash
if [[ "$1" == "" ]] then
       ldbedit -e nano -H /var/lib/samba/private/idmap.ldb
else
       ldbedit -e nano -H /var/lib/samba/private/idmap.ldb objectsid=`wbinfo -n "$1" | cut -d" " -f1`;
fi

Dans mon cas, je souhaite que seulement le groupe DOM/deluge ait les droit rxw sur le repertoire /home/deluge

setfacl -b -R /home/deluge/ #nettoyage des ACL
setfacl -m g:deluge:rwx -R /home/deluge/ 
getfacl  /home/deluge
# file: home/deluge/
# owner: deluge
# group: deluge
user::rwx
group::rwx
group:deluge:rwx
mask::rwx
other::r-x
  • Quand ça ne mappe pas correctement, vérifier la base de donné pour voir s’il n’y a pas des doublons au niveau des SID ou des xid.
ldbedit -e nano -H /var/lib/samba/private/idmap.ldb

=> Cette commande affiche le fichier de base de donnée de mappage.

  • Avoir la liste complète des users/groupes
getent group
getent passwd

boot

  • Téléchargement
wget https://raw.githubusercontent.com/jbsky/jbsky/master/debian/rootfs/etc/init.d/samba
  • Rendre le script exécutable
chmod 755 /etc/init.d/samba
  • Activation du script au démarrage de la machine.
update-rc.d samba defaults

Changer le mot de passe

samba-tool user Julien --noexpiry
samba-tool user setpassword Julien

source

https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller
https://wiki.samba.org/index.php/Active_Directory_Naming_FAQ
Pour la compilation, je m’appuie essentiellement sur cet article.
http://www.bidouilleit.com/2014/02/06/installation-configuration-et-administration-samba-4-ad/