Installation d'un contrôleur de domaine sous FreeBsd 8.2

 

 

Le but de cette procédure est l'installation d'un contrôleur de domaine complet fonctionnant sous système d'exploitation FreeBsd 8.2. Il s'agit ici d'émuler les services systèmes des contrôleurs de domaines Windows 2003.

 
 

 Il disposera donc de :

 

 Il aura également les fonctionnalités suivantes :

 

 Nous partons ici d'une machine ou est installé un système d'exploitation FreeBsd 8.2 en configuration minimale.

 
Attention : Ne pas utiliser les paquets binaires fournis pour openldap, recompiler de préférence les application à partir des "ports" (le support bdb et hdb n'est pas fonctionnel pour openldap, ce qui entraînera une erreur de segmentation lors du lancement de daemon slapd).
 

 Les variables utilisées dans la documentation sont les suivantes :

 

<HOSTNAME>    Nom de la machine

<IP-SERVER>   Adresse Ip du contrôleur de domaine

<LAST-IP-SERVER>  Dernier chiffre de l'adresse Ip du serveur

<CARTE-1>   Carte réseau interne

<CARTE-2>   Carte réseau reliée au routeur

<IP-ROUTEUR>   Adresse Ip du routeur

<DOMAIN-NAME>  Nom FQDN de votre domaine

<IP-DOMAIN>   Plan d'adressage Ip du domaine

<SMALL-IP-DOMAIN>  Plan d'adressage Ip du domaine, sans le dernier chiffre (ex: 192.168.1)

<REVERSE-IP-DOMAIN>  Plan d'adressage Ip inversé du domaine (ex : 192.168.1.0 donnera REVERSE-IP-DOMAINE = 1.168.192)

<IP-SERVE-START>  Adresse de début de la zone DHCP

<IP-SERVE-STOP>  Adresse de fin de la zone DHCP

<BROADCAST-DOMAIN> Adresse de broadcast (par exemple, si  <IP-DOMAIN>=192.168.1.0 alors <BROADCAST-DOMAIN>=192.168.1.255)

<IP-FORWARD-1>  Adresse Ip d'un serveur DNS externe

<IP-FORWARD-2>  Adresse Ip d'un serveur DNS externe

<EXTERNAL-NTP>  Adresse de serveur NTP externe

<SECRET>   Mot de passe secret du Manager du serveur LDAP

<NOT-SO-SECRET>  Mot de passe Manager en texte clair  :-(

<DOMAIN-SID>  SID du domaine

<EXTERNAL-ADMIN>  Adresse Ip de la machine d'administration distante

 

 1) Installation des packages requis

 

Packages nécessaires :

 bash nano openldap24-server nss_ldap smbldap-tools samba35 cups-base cups-samba cups-smb-backend foomatic-db foomatic-db-engine foomatic-filters foomatic-db-hpijs ntp isc-dhcp42-server bind98 (packages optionnels : php5-extensions phpldapadmin)

 

Les options requises, à ajouter, lors de l'installation des paquetages et de leurs dépendances sont :

 

openldap24-server :

 [X] SASL              With (Cyrus) SASL2 support  

 [X] PASSWD            With Passwd backend

 [X] PERL              With Perl backend

 [X] SMBPWD            With Samba Password hashes overlay

 

perl :

 [X] PERL_MALLOC    Use Perl malloc

 [X] THREADS        Build threaded perl

 

cyrus-sasl :

 [X] BDB           Use Berkeley DB

 [X] KEEP_DB_OPEN  Keep handle to Berkeley DB open

 

smbldap-tools :

 [X] MIGRATION_SCRIPTS  Install migration scripts

 

samba35 :

 [X] ADS          With Active Directory support

 [X] FAM_SUPPORT  With File Alteration Monitor

 [X] SYSLOG       With Syslog support

 [X] DNSUPDATE    With dynamic DNS update(require ADS)

 

cups-base :

 [X] PHP          Build PHP support

 [X] PYTHON       Build PYTHON support

 [X] DBUS         Build with DBUS support

 [X] LIBUSB       Build with USB support

 

php5 :

 [X] APACHE     Build Apache module

 

ghostscript9 :

 [X] A4SIZE       Set A4 (not Letter) as a default paper size

 

php5-extensions :

 [X] LDAP        OpenLDAP support

 [X] MCRYPT      Encryption support

 

 2) Préparation de l'environnement

 

Changer le « shell » par défaut de l'utilisateur root :

 

chsh -s /usr/local/bin/bash

 

Ajouter la coloration syntaxique de la commande 'ls' :

 

echo 'alias ls="ls -G"' >> /etc/profile

 

Ajuster le hostname de la machine :

 

echo 'hostname="<HOSTNAME>"' >> /etc/rc.conf

perl -p -i -e 's/localhost.my.domain/localhost.my.domain <HOSTNAME>/' /etc/hosts

echo "<IP-SERVER> <HOSTNAME>"  >> /etc/hosts

 

Configuration du réseau :

 

echo 'ifconfig_<CARTE-1>="inet <IP-SERVER>  netmask 255.255.255.0"' >> /etc/rc.conf

echo 'defaultrouter="<IP-ROUTEUR>"' >> /etc/rc.conf

echo 'ifconfig_<CARTE-2>="DHCP"' >> /etc/rc.conf

cat > /etc/dhclient-enter-hooks << EOF

add_new_resolv_conf() {

 return 0

}

EOF

cat > /etc/resolv.conf << EOF

domain <DOMAIN-NAME>

nameserver 127.0.0.1

EOF

 

Activer l'accès au serveur via une console ssh et activer le serveur :

 

perl -p -i -e 's/#PermitRootLogin no/PermitRootLogin yes/' /etc/ssh/sshd_config

echo 'sshd_enable="YES"' >> /etc/rc.conf

 

 
L'utilisation de l'utilisateur root via un accès distant ssh n'est absolument pas recommandé. Cette configuration n'est mise en place que pour faciliter pour l'installation du serveur. A la fin de l'installation, l'accès direct en ssh en tant qu'utilisateur root doit être désactivé.
 

Il faut alors redémarrer la machine pour la prise en compte des paramètres réseau et l'utilisation du bash en tant qu'éditeur de commande.

 

Vous pouvez alors continuer la configuration de votre serveur via une session ssh.

 

 3) Installation du serveur DNS

 

Le serveur DNS installé ici permettra l'enregistrement et la résolution des noms des machines du domaine, cet enregistrement sera automatique pour les éléments bénéficiants du service DHCP. Il sera également capable de résoudre les adresses externes au domaine.

 

Le contrôleur de domaine sera lui renseigné manuellement dans les fichiers de configuration du DNS.

 

creer un fichier /etc/namedb/namedb.conf :

 

cat > /etc/namedb/namedb.conf << EOF

options {

 directory       "/etc/namedb/working";

 pid-file        "/var/run/named/pid";

 dump-file       "/var/dump/named_dump.db";

 statistics-file "/var/stats/named.stats";

 listen-on       { 127.0.0.1; <IP-SERVER>; };

 

 forwarders {

  <IP-FORWARD-1>;

  <IP-FORWARD-2>;

 };

};

 

controls {

 inet 127.0.0.1 port 953 allow { 127.0.0.1; <IP-SERVER>; };

 inet <IP-SERVER> port 953 allow { 127.0.0.1; <IP-SERVER>; };

};

 

zone "." { type hint; file "/etc/namedb/named.root"; };

 

zone "localhost" { type master; file "/etc/namedb/master/localhost-forward.db"; };

zone "127.in-addr.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; };

 

include "/etc/namedb/rndc.key";

 

zone "<DOMAIN-NAME>" {

 notify yes;

      type master;

      allow-update {

  key "key.<DOMAIN-NAME>";

      };

      file "/etc/namedb/dynamic/<DOMAIN-NAME>.dns";

};

 

zone "<REVERSE-IP-DOMAIN>.in-addr.arpa" {

 notify yes;

      type master;

      allow-update {

  key "key.<DOMAIN-NAME>";

      };

      file "/etc/namedb/dynamic/<REVERSE-IP-DOMAIN>.in-addr.arpa";

};

EOF

 

creer un fichier /etc/namedb/rndc.key et modifier le nom de la clé :

 

rndc-confgen -a

perl -p -i -e 's/rndc-key/key.<DOMAIN-NAME>/' /etc/namedb/rndc.key

 

Il faut ensuite créer les deux fichiers de zone de recherche, un pour la recherche directe et un pour la recherche inverse :

 

cat > /etc/namedb/dynamic/<DOMAIN-NAME>.dns << EOF

\$ORIGIN .

\$TTL 3600       ; 1 hour

<DOMAIN-NAME>. IN SOA ns.<DOMAIN-NAME>. root.<DOMAIN-NAME>. (

                                2007120730 ; serial

                                86400      ; refresh (1 day)

                                7200       ; retry (2 hours)

                                2419200    ; expire (4 weeks)

                                3600       ; minimum (1 hour)

                                )

                        NS      ns.<DOMAIN-NAME>.

 

\$ORIGIN <DOMAIN-NAME>.

\$TTL 3600       ; 1 hour

ns                      A       <IP-SERVER>

<HOSTNAME>              A       <IP-SERVER>

 

\$TTL 150        ; 2 minutes 30 seconds

EOF

 

cat > /etc/namedb/dynamic/<REVERSE-IP-DOMAIN>.in-addr.arpa << EOF

 

\$ORIGIN .

\$TTL 10800      ; 3 hours

<REVERSE-IP-DOMAIN>.in-addr.arpa. IN SOA ns.<DOMAIN-NAME>. root.<DOMAIN-NAME>. (

                                2007040313 ; serial

                                14400      ; refresh (4 hours)

                                3600       ; retry (1 hour)

                                604800     ; expire (1 week)

                                10800      ; minimum (3 hours)

                                )

                        NS      ns.<DOMAIN-NAME>.

 

\$ORIGIN <REVERSE-IP-DOMAIN>.in-addr.arpa.

<LAST-IP-SERVER>       PTR     ns.<DOMAIN-NAME>.

<LAST-IP-SERVER>       PTR     <HOSTNAME>.<DOMAIN-NAME>.

 

\$TTL 150        ; 2 minutes 30 seconds

EOF

 

mise a jour des permissions des fichiers de zone :

 

chown bind /etc/namedb/dynamic/*

 

Préparation du lancement automatique du daemon bind :

 

echo 'named_enable="YES"' >> /etc/rc.conf

 

 3) Installation du serveur DHCP

 

Le serveur DHCP fournira des adresses Ip dynamiquement aux machines membres du domaine.

 

Creer un fichier /etc/local/etc/dhcpd.conf :

 

cat > /usr/local/etc/dhcpd.conf << EOF

include                 "/etc/namedb/rndc.key";

server-identifier       <HOSTNAME>;

ddns-updates            on;

ddns-update-style       interim;

ddns-domainname         "<DOMAIN-NAME>";

include                 "/etc/namedb/rndc.key";

ddns-rev-domainname     "<REVERSE-IP-DOMAIN>.in-addr.arpa";

 

ignore                          client-updates;

authoritative;

 

default-lease-time              10;

max-lease-time                  7200;

log-facility local7;

 

zone <DOMAIN-NAME> {

    primary <IP-SERVER>;

    key "key.<DOMAIN-NAME>";

}

 

zone <REVERSE-IP-DOMAIN>.in-addr.arpa. {

        primary <IP-SERVER>;

   key "key.<DOMAIN-NAME>";

}

 

subnet <IP-DOMAIN> netmask 255.255.255.0 {

      range     <IP-SERVE-START> <IP-SERVE-STOP>;

      allow     unknown-clients;

 option domain-name  "<DOMAIN-NAME>";

 option domain-name-servers <IP-SERVER>;

 option ntp-servers  <IP-SERVER>;

      option routers   <IP-ROUTEUR>;

      option broadcast-address <BROADCAST-DOMAIN>;

 option ntp-servers  <EXTERNAL-NTP>;

 option ip-forwarding  off;

 option netbios-name-servers <IP-SERVER>;

  option netbios-node-type 8;

}

EOF

 

Préparation du lancement automatique du daemon isc-dhcp :

 

echo 'dhcpd_enable="YES"' >> /etc/rc.conf

 

 4) Installation du serveur LDAP

 

Le serveur LDAP servira de base de donnée des comptes et des groupes d'utilisateurs et de machines. Ce sera a partir de cette base que seront données les autorisations d'accès du serveur SAMBA.

 

Copier le fichier de schema SAMBA dans le répertoire de configuration de OpenLDAP:

 

cp /usr/local/share/examples/samba35/LDAP/samba.schema /usr/local/etc/openldap/schema/

 

Creer le fichier /usr/local/etc/openldap/slapd.conf :

 

cat > /usr/local/etc/openldap/slapd.conf << EOF

include        /usr/local/etc/openldap/schema/core.schema

include /usr/local/etc/openldap/schema/cosine.schema

include /usr/local/etc/openldap/schema/inetorgperson.schema

include /usr/local/etc/openldap/schema/nis.schema

include /usr/local/etc/openldap/schema/samba.schema

 

allow bind_v2

 

pidfile /var/run/openldap/slapd.pid

argsfile /var/run/openldap/slapd.args

 

modulepath /usr/local/libexec/openldap

moduleload back_bdb

 

database bdb

suffix "dc=<DOMAIN-NAME>"

rootdn "cn=Manager,dc=<DOMAIN-NAME>"

rootpw "<SECRET>"

 

directory /var/db/openldap-data

 

index   objectClass             eq

index   cn                      pres,sub,eq

index   sn                      pres,sub,eq

index   uid                     pres,sub,eq

index   displayName             pres,sub,eq

index   uidNumber               eq

index   gidNumber               eq

index   memberUid               eq

index   sambaSID                eq

index   sambaPrimaryGroupSID    eq

index   sambaDomainName         eq

index   default                 sub

 

access to attrs=userpassword,sambaLMPassword,sambaNTPassword

    by anonymous auth

    by self write

    by * none

 

access to *

    by self write

    by * read

EOF

 

le mot de passe secret de Manager se génère de la façon suivante :

 

slappasswd

New password:

Re-enter new password:

{SSHA} ??????????????????????????????

 

Copier le retour de la commande {SSHA}... et remplacer <SECRET> dans le fichier slapd.conf :

 

perl -p -i -e 's/<SECRET>/{SSHA} ??????????????????????????????/' /usr/local/etc/openldap/slapd.conf

 

Il faut ensuite configurer les permissions des fichiers :

 

chmod 640 /usr/local/etc/openldap/slapd.conf

chown ldap:ldap /etc/opiekeys

 

Creer le répertoire de stockage des données du serveur :

 

mkdir /var/db/openldap-data

chmod 700 /var/db/openldap-data/

chown ldap:ldap /var/db/openldap-data/

cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG

 

creer le fichier /usr/local/etc/openldap/ldap.conf :

 

cat >> /usr/local/etc/openldap/ldap.conf < EOF

bind_policy soft

uri ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://<IP-SERVER>/ ldap://127.0.0.1/

base dc=<DOMAIN-NAME>

bind_timelimit 10

host localhost

idle_timelimit 3600

ldap_version 3

rootbinddn cn=Manager,dc=<DOMAIN-NAME>

nss_base_group  ou=Groups,dc=<DOMAIN-NAME>?one

nss_base_passwd ou=Users,dc=<DOMAIN-NAME>?one

nss_base_passwd ou=Computers,dc=<DOMAIN-NAME>?one

nss_base_shadow ou=Users,dc=<DOMAIN-NAME>?one

 

pamlogin_attribute  uid

 

nss_connect_policy persist

nss_paged_results yes

pagesize 1000

port 389

scope one

timelimit 30

EOF

 

configurer les permissions et créer le lien symboliques :

 

chmod 400 /usr/local/etc/openldap/ldap.conf

mv /usr/local/etc/nss_ldap.conf /usr/local/etc/nss_ldap.conf.orig

ln -s /usr/local/etc/openldap/ldap.conf /usr/local/etc/ldap.conf

ln -s /usr/local/etc/openldap/ldap.conf /usr/local/etc/nss_ldap.conf

 

Préparer le démarrage automatique du daemon LDAP :

 

echo "slapd_enable=\"YES\" " >> /etc/rc.conf

echo "slapd_flags=' -h \"ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://<IP-SERVER>/\" ' " >> /etc/rc.conf

echo "slapd_sockets=\"/var/run/openldap/ldapi\" " >> /etc/rc.conf

 

Pour tracer le fonctionnement du serveur, ajouter ces lignes dans /etc/syslog.conf :

 

cat >> /etc/syslog.conf << EOF

!slapd

*.* /var/log/slapd.log

EOF

 

Démarrer le serveur, il est necessaire qu(il fonctionne pour la suite de la procédure. Redémarrez également le demon de log :

 

/usr/local/etc/rc.d/slapd start

touch /var/log/slapd.log

/etc/rc.d/syslogd restart

 

 5) Installation du serveur SAMBA

 

Le serveur samba sera celui qui rendra les services de partages de fichiers et d'autorisation d'accès au domaine.

 

Creer le fichier /usr/local/etc/smb.conf :

 

cat > /usr/local/etc/smb.conf << EOF

# Global parameters

[global]

      workgroup = <DOMAIN-NAME>

      server string = Samba File Server

      netbios name = <HOSTNAME>

      hosts allow = <SMALL-IP-DOMAIN>. 127. 10.0.1.

      interfaces = <CARTE-1>, lo

      bind interfaces only = Yes

 

# passwd backend

      encrypt passwords = yes

      passdb backend   = ldapsam:ldap://<IP-SERVER>/

      enable privileges = yes

      pam password change= Yes

      passwd program = /usr/bin/passwd %u

      passwd chat = *New*UNIX*password* %nn *ReType*new*UNIX*password*%nn * passwd:*all*authentication*tokens*updated*successfully*

      unix password sync = Yes

 

# Log options

      log level = 2

      log file = /var/log/samba/full.log

      max log size = 50

      syslog = 0

 

# Name resolution

      name resolve order = wins bcast host

 

# misc

      timeserver = Yes

      socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

      use sendfile = yes

      veto files = /*.eml/*.nws/*.{*}/

      veto oplock files = /*.doc/*.xls/*.mdb/

      deadtime         = 120

 

# Dos-Attribute

      map hidden = No

      map system = No

      map archive = No

      map read only = No

      store dos attributes = Yes

 

# printers - configured to use CUPS and automatically load them

      load printers = Yes

      printcap name = CUPS

      printing = cups

      cups options = Raw

      show add printer wizard = No

 

# scripts invoked by samba

      add user script = /usr/local/sbin/smbldap-useradd -m %u

      delete user script = /usr/local/sbin/smbldap-userdel %u

      add group script = /usr/local/sbin/smbldap-groupadd -p %g

      delete group script = /usr/local/sbin/smbldap-groupdel %g

      add user to group script = /usr/local/sbin/smbldap-groupmod -m %u %g

      delete user from group script = /usr/local/sbin/smbldap-groupmod -x %u %g

      set primary group script = /usr/local/sbin/smbldap-usermod -g %g %u

      add machine script = /usr/local/sbin/smbldap-useradd -w %m

 

# LDAP-Configuration

      ldap delete dn = Yes

      ldap ssl = off

      ldap passwd sync = Yes

      ldap suffix = dc=<DOMAIN-NAME>

      ldap machine suffix = ou=Computers

      ldap user suffix = ou=Users

      ldap group suffix = ou=Groups

      ldap idmap suffix = ou=Idmap

      ldap admin dn = cn=Manager,dc=<DOMAIN-NAME>

 idmap backend = ldap:ldap://<IP-SERVER>

      idmap uid = 10000-20000

      idmap gid = 10000-20000

 

# logon options

      logon script = logon.bat

      logon path = \%L\profiles\%u

      logon path =

      logon home = \%L\%U

      logon drive = H:

 

# setting up as domain controller

      username map = /usr/local/etc/samba/usermap

      preferred master = Yes

 security = user

      wins support = Yes

      domain logons = Yes

      domain master = Yes

      local master = Yes

      os level = 64

      map acl inherit = Yes

      unix charset     = UTF8

 

[netlogon]

  comment = Network Logon Service

  path = /srv/netlogon

  guest ok = yes

  writable = no

  browseable = no

 

[profiles]

  path = /srv/profiles/

  writable = yes

  create mask = 700

  directory mask = 700

  force create mode = 700

  force directory mode = 700

  browseable = yes

EOF

 

Creer les répertoires /srv/netlogon et /srv/profiles et mettre les droits d'accès appropriés :

 

mkdir /srv

mkdir /srv/netlogon

mkdir /srv/profiles

chown -R nobody:nobody /srv

chmod -R 777 /srv

 

Creer ensuite le fichier /usr/local/etc/samba/smbusers :

 

echo "root = administrator" > /usr/local/etc/samba/smbusers

 

Ajouter la ligne suivante à /boot/loader.conf

 

echo 'kern.maxfiles="20480"' >> /boot/loder.conf

 

Configurer le démarrage automatique du serveur samba et modifier fichier /usr/local/etc/rc.d/samba pour renseigner la position du fichier de configuration:

 

echo 'smbd_enable="YES"' >> /etc/rc.conf

perl -p -i -e 's/#samba_config/samba_config/' /usr/local/etc/rc.d/samba

perl -p -i -e 's/#nmbd_enable/nmbd_enable/' /usr/local/etc/rc.d/samba

perl -p -i -e 's/#smbd_enable/smbd_enable/' /usr/local/etc/rc.d/samba

perl -p -i -e 's/#winbindd_enable/winbindd_enable/' /usr/local/etc/rc.d/samba

 

Démarrer ensuite le serveur avec la commande :

 

/usr/local/etc/rc.d/samba start

 

 6) Installation des outils SMBLSAP-SAMBA

 

L'outil smbldap-samba est le paquetage faisant la liaison entre le serveur samba et le serveur ldap.

 

Creer le fichier /usr/local/etc/smbldap-tools/smbldap_bind.conf :

 

cat > /usr/local/etc/smbldap-tools/smbldap_bind.conf << EOF

masterDN="cn=Manager,dc=<DOMAIN-NAME>"

masterPw="<NOT-SO-SECRET>"

EOF

 

Creer le fichier /usr/local/etc/smbldap-tools/smbldap.conf :

 

cat > /usr/local/etc/smbldap-tools/smbldap.conf << EOF

sambaDomain="<DOMAIN-NAME>"

masterLDAP="<IP-SERVER>"

masterPort="389"

ldapTLS="0"

ldapSSL="0"

verify="require"

suffix="dc=<DOMAIN-NAME>"

 

usersdn="ou=Users,${suffix}"

computersdn="ou=Computers,${suffix}"

groupsdn="ou=Groups,${suffix}"

idmapdn="ou=Idmap,${suffix}"

sambaUnixIdPooldn="sambaDomainName=<DOMAIN-NAME>,${suffix}"

 

scope="sub"

hash_encrypt="SSHA"

crypt_salt_format="%s"

 

userLoginShell="/usr/local/bin/bash"

userHome="/home/%U"

userHomeDirectoryMode="700"

userGecos="System User"

defaultUserGid="513"

defaultComputerGid="515"

skeletonDir="/etc/skel"

defaultMaxPasswordAge="45"

userSmbHome="\\<HOSTNAME>\%U"

userProfile="\\<HOSTNAME>\profiles\%U"

userHomeDrive="H:"

userScript="netlogon.cmd"

mailDomain="<DOMAIN-NAME>"

 

with_smbpasswd="0"

smbpasswd="/usr/local/bin/smbpasswd"

with_slappasswd="0"

slappasswd="/usr/sbin/slappasswd"

 

sambaPwdCanChange="1"

SID="<DOMAIN-SID>"

EOF

 

Enregistrer le mot de passe du compte manager du serveur ldap dans samba :

 

smbpasswd -W

 

Le contenu de la variable SID est obtenu par le retour de la commande (cela ne fonctionnera que si le serveur LDAP fonctionne !) :

 

net getlocalsid

S-X-X-XX-XXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX

perl -p -i -e 's/<DOMAIN-SID>/S-X-X-XX-XXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX/' /usr/local/etc/smbldap-tools/smbldap.conf

 

Protéger le fichier contenant les mots de passes :

 

chmod 600 /usr/local/etc/smbldap-tools/smbldap_bind.conf

 

Charger ensuite la base de donnée avec les groupes utiles avec la commande :

 

smbldap-populate

 

Note : pour pouvoir utiliser le compte root comme administrateur du domaine, il faut modifier son SID, les comptes sont définis par le dernier chiffre du sid définit comme suit  :

<SID-DOMAINE>-<NUMBER-TYPE-ACCOUNT>

 

pour le compte root, ce sera donc <SID-DOMAIN>-500 :

 

pdbedit -U <SID-DOMAIN>-500 -u root -r

 

 7) Installation du serveur NTP

 

Le serveur NTP fournira le service de temps aux machines clients du domaine.

 

Le fichier de configuration /etc/ntp.conf :

 

cat > /etc/ntp.conf << EOF

server <EXTERNAL-NTP> prefer

driftfile /var/db/ntp.drift

restrict <IP-DOMAIN> mask 255.255.255.0 nomodify notrap

EOF

 

Démarrage automatique de ntp :

 

touch /var/db/ntp.drift

echo 'ntpd_enable="YES"' >> /etc/rc.conf

 

Vérifier que notre serveur est a la bonne heure avec la commande 'date'. Si tel n'est pas le cas, synchroniser l'horloge du serveur avec un serveur de temps externe :

 

ntpdate <EXTERNAL-NTP>

 

 8) Installation du serveur d'impression CUPS

 

Le serveur CUPS se charge de gérer les impressions réseau.

 

Ajouter la directivea suivante dans le fichiers /usr/local/etc/smb.conf :

cat >> /usr/local/etc/smb.conf << EOF

[print$]

    comment = Printer Drivers

    path = /usr/local/etc/samba/drivers

    browseable = no

    guest ok = no

    read only = yes

    write list = root

EOF

 

Changer les permissions :

 

mkdir /var/spool/samba/printing

chgrp 513 /var/spool/samba/printing

chmod 1770 /var/spool/samba/printing

Pour installer les drivers pour les clients microsoft, créer un répertoire :

 

mkdir /usr/local/share/cups/drivers/w32x86

mkdir /usr/local/share/cups/drivers/w32x86/3

Il faut installer les "Universal PostScript printer drivers for Windows" (télécharger depuis le site http://www.adobe.com/support/downloads/product.jsp?product=44&platform=Windows), les installer sur une machine microsoft et récupérer les fichiers du répertoire C:\WINDOWS\system32\spool\drivers\w32x86\3 . Ces fichiers sont : PS5UI.DLL, PSCRIPT.HLP, PSCRIPT.NTF et PSCRIPT5.DLL.

Copier ces fichiers (attention, les renomer en minuscule) dans le répertoire /usr/local/share/cups/drivers/w32x86/3

 

Activer le démarrage automatique de cups et lancer le serveur:

 

echo 'cupsd_enable="YES"' >> /etc/rc.conf

/usr/local/etc/rc.d/cupsd start

 

créer le répertoire /usr/local/etc/samba/drivers/ pour permettre au serveur SAMBA de stocker les drivers à distribuer :

 

mkdir /usr/local/etc/samba/drivers

 

Vous pourrez ensuite ajouter les imprimantes dans le serveur CUPS en utilisant l'URL :

http://<HOSTNAME>:631

 

Il faudra alors configurer le fichier /usr/local/etc/cups/cupsd.conf en remplaçant :

 

        Listen localhost:631  par  Listen <HOSTNAME>.<DOMAIN-NAME>:631

 

et ajouter la directive Allow from @LOCAL dans les sections :

 

        <Location /> , <Location /admin/conf> et <Location /admin>

La commande  cupsaddsmb -H localhost -U root -v -a devra être utilisée, depuis le serveur,  après chaque ajout d'imprimante dans le serveur CUPS afin de permettre le partage de l'imprimante et des drivers sur le réseau.

 

 8) Installation du serveur APACHE

 

Pour pouvoir administrer facilement le serveur LDAP, nous utilisons le logiciel web phpldapadmin.

 

Créer le lien symbolique suivant :

 

ln -s /usr/local/www/phpldapadmin /usr/local/www/apache22/data/

 

Modifier ensuite le fichier /usr/local/etc/apache22/httpd.conf en ajoutant les directives :

 

 <IfModule dir_module>

  DirectoryIndex index.html index.php

 </IfModule>

 

 LoadModule php5_module        libexec/apache22/libphp5.so

 AddHandler php5-script  .php

 

Activer le démarrage automatique d'apache et lancer l'exécution:

 

echo 'apache22_enable="YES"' >> /etc/rc.conf

 

Vous pourrez connecter phpldapadmin avec l'URL :

http://<HOSTNAME>/phpldapadmin

 

le login sera cn=Manager,dc=<DOMAIN-NAME> et le mot de passe, celui entré lors de la configuration d'OpenLdap.

 

      1. 10) Configuration des authentification

 

Pour pouvoir fonctionner, le système doit pouvoir authentifier les utilisateurs stockés dans le serveur LDAP.

 

Creer les liens symboliques suivants :

 

ln -s /usr/local/lib/pam_* /usr/lib/

 

Modifier le fichier /etc/nsswitch.conf pour qu'il soit conforme a celui-ci :

 

#

# nsswitch.conf(5) - name service switch configuration file

# $FreeBSD: src/etc/nsswitch.conf,v 1.1.10.1.6.1 2010/12/21 17:09:25 kensmith Exp $

#

group: files ldap

group_compat: nis

hosts: files dns

networks: files

passwd: files ldap

passwd_compat: nis

shells: files

services: compat

services_compat: nis

protocols: files

rpc: files

 

      1. 11) Devenir routeur et sécuriser le réseau

 

Pour sécuriser le réseau local, il est necessaire de protéger les services locaux des attaques éventuelles provenant de l'internet. Pour cela, il faut pouvoir empêcher les flux réseaux externes non autorisés d'atteindre les services du serveur et les machines du réseau local. Les machines du réseau local devront donc utiliser comme passerelle le serveur de domaine et non pas directement le routeur (cette configuration est faite à partir du serveur DHCP).

 

Un firewall va être mis en place sur le serveur, refusant toute connexion depuis l'extérieur (sauf pour l'administrateur distant sur le port 22 – ssh) mais en autorisant les flux entrants initiés depuis l'intérieur.

 

dans le fichier rc.conf, pour activer le firewall et le routage, ajouter :

 

cat >> /etc/rc.conf << EOF

gateway_enable="YES"

pf_enable="YES"

pf_rules="/etc/pf.conf"

pf_program="/sbin/pfctl"

pflog_enable="YES"

pf_logfile="/var/log/pflog"

pflog_program="/sbin/pflogd"

EOF

 

Attention cependant, le support NAT n'est pas activé dans le kernel Freebsd, il faut le recompiler si cela n'est pas fait, le serveur sera incapable de transférer les requêtes internes vers l'extérieur :

 

cd /usr/src/sys/<ARCH>/conf/

cp GENERIC ROUTEUR

cat >> ROUTEUR < EOF

options ALTQ

options ALTQ_CBQ

options ALTQ_RED

options ALTQ_RIO

options ALTQ_HFSC

options ALTQ_PRIQ

options ALTQ_NOPCC

device pf

device pflog

device pfsync

EOF

 

config ROUTEUR

cd ../compile/ROUTEUR

make cleandepend

make depend

make

make install

 

créer le fichier /etc/pf.conf, qui sera le fichiers de règles du firewall :

 

cat > /etc/pf.conf << EOF

ext_if="<CARTE-2>"

int_if="<CARTE-1>"

localnet=\$int_if:network

external_admin="<EXTERNAL-ADMIN>"

 

nat on \$ext_if from \$localnet to any -> (\$ext_if)

set skip on lo0

antispoof quick for {lo \$int_if}

antispoof for \$ext_if inet

pass from { lo0 , \$localnet } to any keep state

pass out quick on \$ext_if inet from (\$ext_if) to any flags S/SA modulate state

pass quick on \$ext_if proto tcp from \$external_admin to any port 22

pass quick on \$int_if proto any to any

 

block all

EOF

 

      1.