Partie 0 : Brève explication
Avant d’entrer dans le vif du sujet, nous devrons tout d’abord intégrer notre machine (ici Debian 6.0.3) dans l’Active Directory afin que les utilisateurs de celui-ci puissent également accéder au FTPS qui sera mis en place.
Le domaine sera : test.local
Le contrôleur de domaine : ldap.test.local
Le contrôleur intègre un serveur DNS.
Partie 1 : Intégration AD
Nous partirons du principe que notre Active directory est déjà présent et qu’il tourne parfaitement sur notre machine Windows 2008 R2.
Les paquets à installer sont les suivants : libkrb53 krb5-config krb5-user samba winbind ntpdate ntp
Etant donné que nous utiliserons le protocole Kerberos, nous devons nous assurer d’avoir une parfaite synchronisation des horloges systèmes.
# ntpdate ldap.test.local
Passons maintenant au fichier /etc/krb5.conf (il ne faut rien mettre d’autre dans ce fichier):
[logging]
default = FILE:/var/log/krb5.log
[libdefaults]
ticket_lifetime = 24000
clock_skew = 300
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
TEST.LOCAL = {
kdc = ldap.test.local:88
admin_server = ldap.test.local
default_domain = TEST.LOCAL
}
[domain_realm]
.test.local = TEST.LOCAL
test.local = TEST.LOCAL
Nous allons ouvrir un ticket kerberos avec ce compte en tapant la commande :
# kinit Administrator@TEST.LOCAL
La console affiche ce message : Password for Administrator@TEST.LOCAL:
On entre alors le password et si la console nous rend la main sans message d’erreur on peut s’assurer du succès de l’ouverture du ticket en tapant:
# klist
La console nous renvoie alors : Ticket cache: FILE:/tmp/krb5cc_0Default principal: Administrator@TEST.LOCAL avec la date de création et d’expiration.
Il faut maintenant se rendre dans le fichier de configuration de Samba.
Samba va permettre de faire communiquer une machine Windows et avec une machine Unix, Winbind permet de récupérer les utilisateurs et les groupes du domaine Windows.
# nano /etc/samba/smb.conf
On y copie EXACTEMENT les lignes suivantes :
[global]
security = ads
realm = TEST.LOCAL
password server = 172.16.10.1
# note that workgroup is the \'short\' domain name
workgroup = test
winbind separator = /
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
client ntlmv2 auth = yes
encrypt passwords = yes
winbind use default domain = yes
restrict anonymous = 2
# to avoid the workstation from
# trying to become a master browser
# on your windows network add the
# following lines
domain master = no
local master = no
preferred master = no
os level = 0
Maintenant que nous avons modifié le fichier, un redémarrage des différents services est nécessaire :
# /etc/init.d/samba stop
# /etc/init.d/winbind stop
# /etc/init.d/samba start
# /etc/init.d/winbind start
Il faut maintenant que nous configurions le système d’authentification.
- Rendons nous dans le fichier /etc/nsswitch.conf et ajoutons les lignes suivantes :
# nano /etc/nsswitch.conf
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat winbind
group: compat winbind
shadow: compat
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
bootparams: files
automount: files
aliases: mount
- Dans le fichier /etc/pam.d/common-account, nous devons rajouter la ligne suivante :
account sufficient pam_winbind.so
C’est-à-dire qu’au final, le fichier doit contenir ces 2 lignes :
account sufficient pam_winbind.so
account sufficient pam_unix.so
- Modifions maintenant le fichier /etc/pam.d/common-auth :
auth sufficient pam_winbind.so krb5_auth krb5_ccache_type=FILE
auth sufficient pam_unix.so nullok_secure use_first_pass
auth required pam_deny.so
- Dernier fichier à modifier, /etc/pam.d/common-session :
session required pam_unix.so
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
Nous allons à présent modifier les fichiers /etc/hostname, /etc/hosts et /etc/resolv.conf. Commençons par le premier :
# nano /etc/hostname
On ajoute dans ce fichier le nom de la machine suivi du suffixe :
ftps.test.local
Dans le fichier /etc/hosts, on rassemble l’ensemble des noms pouvant être utilisés pour identifier la machine :
127.0.0.1 localhost
127.0.0.1 ftps.test.local ftps
172.16.10.1 ldap.test.local ldap
172.16.10.42 ftps.test.local ftps
Dans /etc/resolv.conf :
nameserver 172.16.10.1
Nous allons à présent intégrer notre Debian au domaine, pour cela on utilise la commande suivante :
# net ads join -S LDAP.TEST.LOCAL -U Administrator
Le mot de passe nous est demandé, on le rentre. On obtient ceci en réponse :
Using short domain name – TEST
Joined 'ftps to realm 'TEST.LOCAL’
On peut tester que nous avons bien rejoint le domaine :
# wbinfo –u (liste des utilisateurs du domaine)
# wbinfo –g (liste des groupes du domaine)
# getent passwd (renvoi l’ensemble des utilisateurs utilisables)
# getent group (renvoi l’ensemble des groupes utilisables)
Partie 2 : FTPS
Pour une question d’affinité, j’ai décidé de travailer avec vsftpd.
vsFTPd, forme raccourcie de Very Secure FTP Daemon, est un serveur FTP libre simple et sécurisé.
Il a été développé dans l’optique de la meilleure sécurité possible afin de combler les failles des serveurs FTP classiques. Il bénéficie de toutes les options habituelles des serveurs FTP classiques (proFTPd, Pure-FTPd,…) et prend en charge l’IPv6 ainsi que SSL.
Afin d’installer vsftpd, nous allons utiliser le célèbre apt-get install :
# apt-get install vsftpd
On se rend maintenant dans le fichier de configuration :
# nano /etc/vsftpd.conf
On supprime l’entièreté du fichier et on copie :
#### GENERAL CONFIGURATION ####
listen=YES
connect_from_port_20=YES
pam_service_name=vsftpd
#ftpd_banner=Bienvenue sur le serveur ftp.
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
use_localtime=YES
#dirlist_enable=NO
idle_session_timeout=600
data_connection_timeout=12
#### RIGHTS CONFIGURATION #####
local_enable=YES
write_enable=YES
anonymous_enable=NO
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
chroot_local_user=YES
chroot_list_file=/etc/vsftpd/user_list
local_umask=077
#chown_uploads=YES
#chown_username=whoever
secure_chroot_dir=/var/run/vsftpd/empty
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ls_recurse_enable=YES
setproctitle_enable=YES
#### VIRTUAL USER CONFIGURATION #####
virtual_use_local_privs=YES
user_sub_token=$USER
local_root=/home/TEST/$USER
hide_ids=YES # SUPER IMPORTANT
#########
##### SECURE CONFIGURATION #####
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
# require_ssl_reuse=NO # Certains clients FTP necessitent cette ligne
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/ssl/private/vsftpd.cert.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key.pem
pasv_enable=YES
pasv_promiscuous=NO
pasv_min_port=40000
pasv_max_port=40100pasv_address=127.0.0.1
#ou domaine.com avec pasv_addr_resolve=YES
port_promiscuous=NO
#rsa_cert_file=/etc/ssl/private/vsftpd.pem
###########
Il faut maintenant sécuriser le protocole (car de base, il ne l’est pas). On va alors créer un certificat :
# apt-get install openssl
# openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem
Il nous est alors demandé de renseigner plusieurs champs, le plus important : Common Name (eg, YOUR name) []
On copie le fichier généré dans le répertoire /etc/ssl/certs/ :
# cp vsftpd.pem /etc/ssl/certs
On sécurise le certificat :
# chown root:root /etc/ssl/certs/vsftpd.pem
# chmod 600 /etc/ssl/certs/vsftpd.pem
Nous ajoutons les lignes suivantes dans notre fichier de configuration (déjà présente dans le fichier du dessus) :
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
On redémarre le service :
# /etc/init.d/vsftpd restart
Partie 3 : Répertoire personnel
Un problème se pose, pour que l’utilisateur de l’Active Directory ait un répertoire personnel créé automatique, il faut normalement se connecter avec celui-ci sur la Debian, nous ne pouvons procéder ainsi.
La solution trouvée est de créer un script qui va vérifier l’existence ou nom pour chaque utilisateur du domaine d’un répertoire personnel, si le répertoire n’existe pas il sera créé.
# nano script.sh
On rajoute :
#!/bin/sh
for user in $( wbinfo -u );
do
if [ ! -d /home/TEST/$user ]
then
/bin/mkdir /home/TEST/$user
/bin/chown -R $user:"domain users" /home/TEST/$user
fi
done
/etc/init.d/winbind restart
On sauvegarde et on rend exécutable le script :
# chmod +x (777) script.sh
Maintenant, nous devons faire en sorte que ce script soit automatisé toutes les minutes :
# nano /etc/crontab
On y ajoute :
*/1 * * * * root /root/script.sh
On redémarre le service avec un petit /etc/init.d/cron restart
Partie 4 : Bloquer SSH
Pour une question de sécurité, seul root sera autorisé à utiliser ssh. Nous allons rajouter une ligne dans le fichier /etc/ssh/sshd_config :
AllowUsers root
Partie 5 : Clé publique / Clé privée
Dans PuTTYGen, nous cliquons sur « Generate » puis on remue la souris dans l’encadré rouge afin de générer la clé.
On copie alors la clé publique et on la colle dans le fichier .ssh/authorized_key
# mkdir –p .ssh
# nano .ssh/authorized_keys
On clique ensuite sur “save private key”, nous répondons “oui” à la question « Are you sure you want to save this key without a passphrase to protect it ». On choisit alors un emplacement ou sauver la clé.
Dans PuTTY, on va dans “Connection” puis “Data”, on renseigne le champ « Auto-login username »
Dans « Connection » à « SSH » à « Auth », on clique sur « browse » et on va rechercher la clé privée.
Et pour une question de meilleure lisibilité, on peut se rendre dans « Window » puis « Translation » et choisir «UTF-8»
Pour terminer, on retourne dans « Session », on ajoute l’adresse IP (ou l’Host Name). On donne un nom à la session dans « Saved Sessions », on sauvegarde et on clique sur « Open ».
Partie 6: Client FTP
Le client FTP utilisé ici sera FileZilla. Quelques petites modifications sont à faire afin qu’il fonctionne correctement.
On clique sur « Ouvrir le gestionnaire des sites »
On crée un nouveau site et on y ajoute les champs suivants :


L’identifiant et le mot de passe correspondent à un utilisateur de l’Active Directory.