====== Guide de sécurité /référentiel LINUX ======

Download PDF : {{::guide_de_securite-referentiel.pdf|}}
===== install Debian =====


==== Partitionnement ====


Swap : double de la mémoire vive

/ : 2 go
/tmp : 500 Mo
/var : 1 go
/home : selon les besoins des utilisateurs

{{:securisation:partition2_debian.png|}}

<note important>Pas de serveur X</note>
<note tip>http://formation-debian.via.ecp.fr/partitionner.html</note>

===== BIOS =====

==== Sécurisation du BIOS ====

Désactivation de tous les boot sauf le disque système

Désactivation du boot menu

{{:securisation:bios_1.jpg?400|}}

Mot de passe d'administration sur BIOS

{{:securisation:bios.jpg?400|}}

===== Sécurisation de GRUB =====

==== Version du GRUB ====

{{:securisation:version_grub.png|}}

<code=basch>
grub-install --version
</code>

{{:securisation:version_grub.png|}}

==== Définition et cryptage mot de passe GRUB ====


* Cryptage du mot de passe

<code=basch>
grub-mkpasswd-pbkdf2 "user"
Enter password:
Reenter password:
Your PBKDF2 is "password crypté"
</code>

* Sécurisation

Editer /etc/grub.d/40_custom

<code=basch>
set superusers="user"
password_pbkdf2 user "password crypté

password romain insecure
</code>

* démarrage avec authentification crypté

Editer /etc/grub/10_linux


printf "menuentry --users <fc #FF0000>"user"</fc> ${title}' ${CLASS} {\n" "${os}" "${versi


<note tip>http://www.howtogeek.com/102009/how-to-password-protect-ubuntus-boot-loader/</note>


===== Système de fichiers /partitionnement =====

==== A qoui sert le fstab ? ====


Fichier de configuration qui contient les informations statiques sur le montage des systèmes de fichiers que vous utilisez régulièrement.

==== Option communes aux système de fichiers ====


{{:securisation:fstab_options.png|}}

==== Permissions Linux ====


r : read (permet de lire fichier)
w : write (permet d’écrire dans le fichier)
x : execute (permet d'exécuter le fichier ou d’ouvrir les dossiers)

==== Notion de propriété ====


le propriétaire (u) créateur du fichier ou dossier
le groupe propriétaire (g) groupe principal du créateur
les autres (o) tous les autres utilisateurs

Les droits s’articule donc entre des autorisations données à des personnes (absence d’autorisation = non autorisé ). Exemple obtenu avec la commande ls -lh

==== Le bit SUID ====


Il permet de faire en sorte de lancer un programme en tant que l'utilisateur qui possède le fichier et non en tant que celui qui lance le fichier. Ceci fonctionne de la même façon pour le propriétaire et pour le groupe.

Or les répertoires disposent aussi d'un bit exécutable. Il sert à autoriser quelqu'un à rentrer dans le répertoire (avec la commande cd). Hé bien le bit suid sert aussi. Il permet de faire en sorte que tout fichier créé dans ce répertoire n'appartienne pas à celui qui crée le fichier, mais à celui qui possède le répertoire parent.

<code=shell>
$ mkdir repertoire
$ stat repertoire
> Access: (0755/drwxr-xr-x) Uid: ( 1000/peck) Gid: ( 1000/peck)
$ chgrp group repertoire
$ chmod g+s test
$ stat repertoire
> Access: (2755/drwxr-sr-x) Uid: ( 1000/peck) Gid: ( 1001/group)
$ touch repertoire/fichier
$ stat repertoire/fichier
> Access: (0644/-rw-r--r--) Uid: ( 1000/peck) Gid: ( 1001/group)
</code>

Ceci est très pratique pour permettre à plusieurs personnes de travailler dans la même arborescence. Par exemple vous créez un groupe dans lequel vous mettez les utilisateurs concernés, puis vous mettez le bit sgid (bit de groupe) sur le répertoire de travail. Ainsi tous les fichiers créés sous ce répertoire appartiendront au même groupe et pourront dont être lu et/ou modifié (pensez à regarder votre umask) par tout le groupe. Notez que si c'est un sous répertoire qui est créé, il obtiendra lui aussi le bit suid.

==== chmod, chown et chgrg ====

**chmod** permet de modifier les permissions sur un fichier

* En octal, chaque « groupement » de droits (pour user, group et other) sera représenté par un chiffre et à chaque droit correspond une valeur :

//exemple ://
Pour rwx, on aura : 4+2+1 = 7
Pour rw-, on aura : 4+2+0 = 6
Pour r--, on aura : 4+0+0 = 4
<code=basch>
rwx r-x ---
7(4+2+1) 5(4+0+1) 0(0+0+0)

chmod 750 dossier
</code>

**chown** permet le changement de propriétaire, seul les super-utilisateur ou le propriétaire peut utiliser la commande
<code=basch>
sudo chown utilisateur:group fichier
</code>
** chgrp ** permet de changer le groupe actuel du fichier, Tous les membres de ce groupe seront concernés par les permissions du groupe de la 2ème série de rwx. Encore une fois, seuls le super-utilisateur ou le propriétaire actuel d'un fichier peut utiliser chgrp
<code=basch>
sudo chgrp group fichier
</code>


==== Sécurisation des points de montage ====


L'option noexec évite aux binaires d'être exécutés directement mais c'était facilement contournable dans les premières versions du noyau, de nombreux pirates en herbe utilisent des failles qui essayent de créer et d'exécuter des fichiers dans /tmp


<note tip>http://linux-attitude.fr/post/bit-suid</note>

<code=shell>
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda5 during installation
UUID=6f1e6d83-dc4b-43d5-859c-a0e4764b410b / ext4 defaults,rw,nodev 0 2
# /home was on /dev/sda8 during installation
UUID=f30103e8-d533-4f3e-87c5-022b5afd199b /home ext4 rw,nosuid,nodev,exec,auto,nouser,async 0 2
# /tmp was on /dev/sda6 during installation
UUID=5b026cb7-61ff-481f-8f86-0d11d8b7e761 /tmp ext4 defaults,nodev,nosuid,noexec 0 2
# /var was on /dev/sda7 during installation
UUID=122a0c3f-4016-45ec-8991-332355bba9d8 /var ext4 defaults,nodev 0 2
# swap was on /dev/sda1 during installation
UUID=9d529161-5606-4c4e-b941-e28ef53bc04a none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
</code>

<note warning>Mettre ro (read-only) après les étapes de sécurisation, sinon aucune modifications à la racine sera acceptée, au début de l'intreventio, paramétré / en rw (read-write) </note>

Si points de montage entièrement éclatés

{{:securisation:suid.png|}}


===== Limiter les terminaux utilisés par root (nombre et durée) =====

==== En nombre ====

On peut empêcher le login comme root sur la console et tous les terminaux que l’on désire.
Le fichier /etc/securetty contient la liste des terminaux depuis lesquels l’accès root est autorisé.

<code=shell>
nano /etc/securetty

# Virtual consoles
tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
tty8
</code>

==== En durée ====

Pour définir une variable d'environnement de manière à ce qu'elle affecte l'ensemble de la session d'un utilisateur, il suffit de placer une commande la définissant dans l'un des fichiers cachés de script présent dans le répertoire personnel de l'utilisateur. Voici les fichiers les plus courants qui peuvent être utilisés :

.profile, .bash_profile, .bashrc

<code=shell>nano .bashrc</code>

* rajouter un export d'environnement

<code=shell>export TMOUT=30</code>


<note tip>http://linuxfr.org/forums/astucesdivers/posts/terminal-d%C3%A9connexion-automatique</note>

==== Exclusion total ====

Modifier le script qui permet le démarrage des processus


<code=shell>

nano /etc/inittab

# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
</code>

===== Durcissements des comptes =====

PAM (Pluggable Authentication Modules) permet aux administrateurs système de choisir comment les applications authentifient les utilisateurs.

PAM vous offre la possibilité de passer en revue plusieurs étapes d'authentification en une seule fois, à l'insu de l'utilisateur.

Généralement, il devrait être paramétré sur requisite qui retourne un échec de connexion si un module échoue.


* retry : c'est le nombre de fois que l'utilisateur pourra réessayer s'il se trompe de mot de passe

* minlen : la longueur minimale du mot de passe

* difok : j'aime bien ce truc, c'est un peu vicieux, mais vu que certains utilisateurs le sont... ça permet qu'il se rappelle des anciens mots de passe que les utilisateurs ont mis. Ici un utilisateur ne pourra réutiliser un mot de passe qu'il avait précédemment mis qu'au bout de la 5ème fois.

* dcredit : si le chiffre est négatif, c'est qu'il faut au moins x fois de nombre décimal pour que le mot de passe soit validé. (ici il faut au moins un décimal)

* ucredit : si le chiffre est négatif, c'est qu'il faut au moins x fois de lettre majuscule pour que le mot de passe soit validé. (ici il faut au moins une majuscule)

* lcredit : si le chiffre est négatif, c'est qu'il faut au moins x fois de lettre minuscule pour que le mot de passe soit validé. (ici il faut au moins une minuscule)

==== Politique de mot de passe ====


réessaie du mot de passe : 3 fois

réutilisation du mot de passe : 3

nombre de chiffre dans le mot de passe : 1

nombre de majuscule : 1

nombre de minuscule : 1

installation du paquet : aptitude install libpam-cracklib

édition du /etc/pam.d/common-password

<code=shell>
# here are the per-package modules (the "Primary" block)
password requisite pam_cracklib.so retry=3 minlen=10 difok=3 dcredit=-1 ucredit=-1 lcredit=-1
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512
# here's the fallback if no module succeeds

</code>

<note tip>https://wiki.deimos.fr/Pam_cracklib_:_Choisir_la_complexit%C3%A9_des_mots_de_passe</note>

<note>Commande permettant de lister les librairies relatives à PAM : find / -name *.so | grep pam
</note>

==== Création de comptes automatisé ====
<code=bash>
#######################################################
# auteur : Romain Doiteau #
# #
# #
# 08/10/2014 #
# #
# LP ASUR #
# #
# Automatisation de la création ded'utilisateur #
# avce une condition de création de répertoire #
# #
#######################################################



#!/bin/sh

echo "Entrer le nom de l'utilisateur"
read nom
echo " Entrer le numéro de groupe de l'utilisateur"
echo " Root = 0"
echo " Utilisateurs = 1001"
read groupe
echo "Entrer le mot de passe"
read -s mdp
echo "Voulez vous créer un répaertoire home ? (yes/no) "
# -s cahe l'affichage
read home

if [ $home = 'yes' ]

then

useradd -m -g $groupe -p $mdp -s /bin/bash $nom


# -m créer le répertoire
# -g affcete l' utilisateur au group
# -p détermine le mot de passe
# -s assigne l'interpréteur

if [ $? -eq 0 ]

# sortie d erreur 0 = tous c'est bien passé

then
echo "Utilisateur créé"
else
echo "Utilisateur existe dèjà"

fi
else
useradd -g $groupe -p $mdp -s /bin/bash $nom

if [ $? -eq 0 ]

then
echo "Utilisateur créé sans dossier home"
else
echo "Utilisateur existe déja !"

fi
fi



</code>

==== PASSWD et SHADOW ====

La différence entre /etc/passwd et /etc/shadow

/etc/passwd est lisible par tout le monde, le X correspond au mot de passe, stocker dans /etc/shadow, qui lui est lisble que par root

Ainsi leurs structures est différente :

passwd : 7 champs

<code=basch>
nom d'utilisateur:mot de passe encrypté:uid:gid:nom complet:répertoire perso:shell par défaut
</code>

shadow : 9 champs

<code=basch>
Nom:mot de passe crypté:nombre de jours écoulés depuis le 1er janvier 1970 jusqu'à la dernière modification du mot de passe:nombre de jours durant lesquels le mot de passe reste valide:nombre de jours après lesquels le mot de passe doit être modifié:nombre de jours avant l'expiration du mot de passe nécessitant d'avertir l'utilisateur:nombre de jours après l'expiration qui amène la désactivation du compte:numéro du jour depuis le 1er janvier 1970 à partir duquel le compte a été désactivé:champ réservé
</code>

===== UMASK =====

==== système ====

On peut penser que par défaut le système ne met pas en place de bonnes restrictions car lors de la création d’un fichier ou d’un dossier, tout le monde a le droit de le lire. On voudrait par exemple que le groupe ait le droit de lecture du fichier ou du dossier et que les autres utilisateurs n’aient aucun droit dessus. L’umask à appliquer serait alors « 027 ». On peut paramétrer cet umask pour qu’il s’applique par défaut à tous les utilisateurs.

Par défaut, ce paramètre ce gère dans « /etc/profile » :

Mais nous voyons que le système nous dit que ce paramètre est maintenant géré par « pam_umask ». Nous allons alors aller dans le fichier « /etc/login.defs » pour aller modifier ce paramètre à la ligne 144:

<code=shell>
UMASK 027
</code>

On doit ensuite aller dire au fichier de configuration PAM « /etc/pam.d/common-session » d’utiliser la module « pam_umask.so » qui gérera l’umask par défaut en lui ajoutant cette ligne :

<code=shell>
#utilisation de la librairie umask

session optional pam_umask.so
</code>

* Explication :

{{:cours:activite1:droits.jpg|}}

{{:cours:activite1:droits_2.png|}}

Ainsi l'umask est le plus restrictif il enlève tous les droits au reste du monde

et laisse au groupe le droit de lecture et d’exécution

==== root ====

Les soucis et que l’umask par défaut s’applique aussi à root qui fait partie des utilisateurs. Nous pourrions penser que ce que root créé, seul root devrait pouvoir le relire par sécurité. On devrait donc définir un umask« 077 » pour root. Pour déjouer l’umask par défaut il faut modifier le .bashrc

<code=shell>
umask 077
</code>

Après redémarrage d’une session avec un utilisateur, nous pourrons vérifier que l’umask définie c’est bien appliqué avec la commande suivante :

<code=shell>
umask -p
</code>

<note tip>http://www.it-connect.fr/gestion-de-lumask-sous-linux/</note>

<note warning>Ainsi le masque le plus restrictif est 377, il ne laisse que le droit de lecture au propriétaire</note>

===== Packages et services =====

==== Paquets inutiles ====

* Repérage

<code=bash>
aptitude search ~c
</code>

* Suppression

Lors de la désinstallation d'un logiciel le comportement par défaut consiste à garder les fichiers de configuration afin de pouvoir les réutiliser en cas de réinstallation du logiciel en question. Pour nettoyer votre Debian de tout ces fichiers superflus une seule commande suffit :
<code=basch>
dpkg -P $(dpkg -l | awk '$1~/^rc$/{print $2}')
</code>
Ensuite si vous souhaitez que la suppression des fichiers de configuration se fasse automatiquement il suffit d'ajouter ceci au fichier /etc/apt/apt.conf :
<code=basch>
APT::Get::Purge "true"
</code>
Vous préfèrerez peut-être utiliser cette commande qui supprimera aussi les dépendances devenues non nécessaires :
<code=basch>
# aptitude purge ~c
</code>

==== Alléger sa distribution ====

* Liste les paquets installés

<code=basch>
dpkg --get-selections
</code>

===== SUDO =====

Permet à un utilisateur particulier ou un groupe d'utilisateurs particulier d'exécuter une ou des tâches bien précises, avec ou sans saisie du mot de passe

* sudoers

installation du paquet sudo

<code=basch>
aptitude install sudo
</code>

- édition de /etc/sudoers pour modification des droits
- //exemple pour un cas ou l'utilisateur lpro appartient au groupe Utilisateurs//

<code=basch>
%sudo ALL=(ALL:ALL) ALL


# si % indique un groupe

%Utilisateurs ALL=(ALL:ALL) /etc/init.d/networking restart #commande de redémarrage du service réseaux

# si % n'est précisé, un utilisateur est concerné

%sudo ALL=(ALL:ALL) ALL

lpro ALL=(ALL:ALL) /etc/init.d/networking restart


# PASSWD permet l’exécution sans mot de passe

lpro ALL=NOPASSWD: /etc/init.d/networking restart
</code>

<note tip>http://doc.ubuntu-fr.org/sudoers</note>

===== Utilisation de syslog (syslog-ng) =====

* Identification du fichier de conf

<code=basch>
nano /etc/syslog-ng/syslog-ng.conf
</code>

* Identification le fichier de log des authentifications

<code=basch>
cat /var/log/auth.log
</code>

* Listage des 5 derniers échecs de connexions

<code=bash>
cat /var/log/auth.log | grep failure | tail -n 5
</code>

<note tip>https://www.isalo.org/wiki.debian-fr/Nettoyer_sa_Debian</note>

===== Visibilité Réseaux =====

* Listage des ports ouverts

<code=basch>
netstat -laputen
</code>

* Durcissement de la pile IP

Afin de durcir la pile IP du système d’exploitation
Linux, il est nécessaire d’activer ou de
désactiver les fonctions suivantes :

* ignorer les broadcast ICMP.
(attaque smurf)

<code=shell>
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
</code>

* ignorer les erreurs ICMP bogus

<code=shell>
sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
</code>

* désactiver l’envoi et la réponse aux ICMP redirects
*
<code=shell>
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0
</code>

* activer les SYN Cookies
(attaque syn flood)

<code=shell>
sysctl -w net.ipv4.tcp_syncookies=1
</code>

* enregistrer les paquets martiens

<code=shell>
sysctl -w net.ipv4.conf.all.log_martians=1
</code>

* activer l’antispoofing niveau Noyau

<code=shell>
sysctl -w net.ipv4.conf.all.rp_filter=1
</code>

* ignorer le source routing

<code=shell>
sysctl -w net.ipv4.conf.all.accept_source_route=0
</code>

<note tip>{{:ressources:pdf:anssi-cspn_2009-04fr.pdf|}}Page14</note>

===== IPTABLES =====

==== Vidage des règles actuelles ====

<code=basch>
iptables -F # Retire les règles d'une chaîne
iptables -X # Efface une chaîne vide

#Autorisations des connexions sortantes et entrantes
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
</code>


==== Tout interdire en entrée, sauf ssh ====
<code=basch>
#Supresion régle

iptables -t filter -F
iptables -t filter -X

# Définition des blocages pour les entrées et le suivi et autorisation des sorties
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT

# Autorisation du port SSH (22)
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

# Conservations des connexions déjà établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

</code>
==== Chargement des règles au démarrage ====

<code=bash>

touch /etc/init.d/firewall



#!/bin/sh
case "$1" in
start)

echo - Initialisation du firewall :


#Supresion régle

iptables -t filter -F
iptables -t filter -X

# Définition des blocages pour les entrées et le suivi et autorisation des sorties
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT

# Autorisation du port SSH (22)
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

echo - Initialisation des regles : [OK]

;;
status)

echo - Liste des regles :
#affiche les iptables par interfaces
iptables -L -v

;;
stop)

# Vidage des tables et des regles personnelles
iptables -t filter -F
iptables -t filter -X
echo - Vidage des regles et des tables : [OK]

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo - Autoriser toutes les connexions entrantes et sortantes : [OK]

;;
esac
exit 0

#rendre le fichier exécutable

chmod u+x /etc/init.d/firewall


#rendre le service éxécutable de façon automatique

update-rc.d firewall defaults

</code>

===== SSHd =====

==== Empêcher l’accès en root ====

modifier vi /etc/ssh/sshd_config

remplacer <code=bash>PermitRootLogin yes</code>
par <code=basch>PermitRootLogin no</code>

==== Changer le port d'écoute de ssh ====

modifier /etc/ssh/sshd_config

changer le port d'écoute <code=basch>Port 35022</code>

modifier le firewall : port 35022 à la place du 22

==== Authentification par clés ====

Modification des paramètres ssh sur les deux serveurs

<code=bash>
nano /etc/ssh/sshd_config

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
</code>

S'authentifier sur chaque système avec un utilisateur autre que root

<code=bash>
ssh-keygen
</code>

permet de générer une clé

<code=bash>
cat /home/utilisateur/.ssh/id_rsa.pub
</code>

copier la clé publique

<code=bash>
nano /home/utilisateur/.ssh/authorized_keys
</code>

coller la clé publique sur l'autre serveur

<code=bash>
nano /home/utilisateur/.ssh/authorized_keys
</code>

Recommencer l'opération sur l'autre serveur

Test d'identification

<code=bash>
r.doiteau@yoda:~$ ssh r.doiteau@192.168.56.2 -p 35022
Linux modele 3.2.0-4-486 #1 Debian 3.2.60-1+deb7u3 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Oct 15 21:54:46 2014 from 192.168.56.3
</code>

Nous pouvons constater qu'aucun mot de passe n'ai demandé, un échange de clé est effectué



<note tip>http://doc.fedorafr.org/wiki/SSH_:_Authentification_par_cl%C3%A9#L.27authentification_par_cl.C3.A9</note>

===== CHROOT =====

==== Définition ====

Chrooter un programme consiste à le lancer en utilisant la commande chroot. Cette commande permet de changer l'emplacement de la racine (/).

L'intérêt de cette manipulation est donc d'enfermer un programme afin qu'il ne touche que à ce qu'on lui autorise de toucher.

==== Installation ====

Installer les paquets nécessaires

<code=basch>
apt-get install binutils debootstrap
</code>

Choisir un emplacement

<code=basch>
mkdir -p /srv/chroot/wheezy
</code>

Construire le chroot

<code=basch>
debootstrap --arch i386 wheezy /srv/chroot/wheezy http://http.debian.net/debian
</code>

<note important>Attention, si le fstab est configuré en nodev ou noexex, il faut supprimer cette partie afin de pouvoir exécuter des programmes à la racine /</note>

Nous constatons que le système est chroot, l'utilisateur est dans un autre shell
<code=basch>
root@modele:/lib# cd /home
root@modele:/home# ls
root@modele:/home# cd ..
root@modele:/# cd ..
root@modele:/# ls
bin dev home media opt root sbin srv tmp var
boot etc lib mnt proc run selinux sys usr
root@modele:/# pwd
/
root@modele:/#
</code>

==== Plusieurs utilisations sont envisageables, par exemple : ====

Recompilation d'application dans un contexte autre que la machine qui héberge le chroot (backport, cross-compilation, ...)

Mise à jour d'un service en production par basculement de l'ancien service (machine hôte) vers le nouveau (installé dans le chroot)

Sécurisation d'un service «chrooté» par rapport à la machine hôte (et vice-versa)

===== VSFTPD =====

On utilisera donc vsftpd, un serveur ftp simple, sécurisé et efficace qui permet de limiter l’accès au système d’exploitation avec chroot simplement en paramètrant son fichier de configuration.

==== Installation ====
<code=bash>
aptitude install vsftpd
</code>
Une fois installé, modifie les éléments suivants du fichier de configuration /etc/vsftpd.conf :
<code=bash>
# Empêcher les connexions anonymes
anonymous_enable=NO

# Activer les utilisateurs du système Linux (utilisateurs du fichier /etc/passwd)
local_enable=YES

# Activer la possibilité d'écriture de fichiers sur le ftp (et pas seulement de lecture)
write_enable=YES

# chrooter tous les utilisateurs qui utilisent vsftpd
chroot_local_user=YES

#Dossier de destion du ftp

local_root=/srv/ftp-chroot
</code>
Redémarrer le service vsftpd
<code=bash>
service vsftpd restart
</code>
==== Test ====
<note warning>Attention il faut rajouter une régle iptables (port 21) dans notre firewall </note>

Voilà, le serveur ftp est configuré. Après, on peut très bien faire des choses plus avancées comme par exemple limiter les utilisateurs autorisés à utiliser vsftpd :
<code=basch>
root@modele:/srv# ftp localhost
ftp: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
220 (vsFTPd 2.3.5)
Name (localhost:r.doiteau):
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-x--- 2 0 0 4096 Oct 15 23:05 test
drwxr-x--- 2 0 0 4096 Oct 15 23:05 tets
226 Directory send OK.
ftp> touch toto
?Invalid command
ftp> mkdir toto
550 Create directory operation failed.
ftp>
</code>
On constate que l'utilisateur peut voir les dossiers/fichiers, par contre il ne peut pas interagir

Si l'on souhaite autoriser la création de dossier il faut décommenter la ligne :
<code=bash>
anon_mkdir_write_enable=YES
</code>
Pour l'upload de fichier :
<code=bash>
anon_upload_enable=YES
</code>


===== Bibliographie =====


==== ANSSI ====

** Agence nationale de la sécurité des systèmes d'information **

les 10 commandements de la sécurité : http://www.securite-informatique.gouv.fr/gp_rubrique34.html

Recommandations "sécurité du poste de travail et des serveurs " : http://www.ssi.gouv.fr/fr/guides-et-bonnes-pratiques/recommandations-et-guides/#elem147

Durcissement de la pile IP : Rapport de certification ANSSI-CSPN-2009/04 page 14


==== NSA ====

** National Security Agency **

IAD’s Top 10 Information AssuranceMitigation Strategies : {{:securisation:slicksheet_top10iamitigationstrategies_web.pdf|}}

Vulnérabilité d'open SSL : {{:securisation:slicksheet_openssl_web.pdf|}}

Vulnérabilité du basch : https://www.nsa.gov/ia/mitigation_guidance/security_configuration_guides/bash_vulnerability.shtml


==== NIST ====

** National Institute of Standards and Technology **

Organisation traduite par "Institut national des normes et de la technologie"

==== Securing Debian Manual ====

https://www.debian.org/doc/manuals/securing-debian-howto/ch3.fr.html#s3.2

 
securisation/linux.txt · Dernière modification: 2019/05/11 14:35 (modification externe)     Haut de page