====== Différences ======

Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue comparative

securisation:linux [2014/10/15 22:43]
r.doiteau [CHROOT]
securisation:linux [2019/05/11 14:35] (Version actuelle)
Ligne 1: Ligne 1:
-====== Guide de sécurité /​référentiel ======+====== Guide de sécurité /​référentiel ​LINUX ======
  
 +Download PDF : {{::​guide_de_securite-referentiel.pdf|}}
 +===== install Debian =====
  
-==== install Debian ==== 
  
- +==== Partitionnement ​====
-=== Partitionnement ===+
  
  
Ligne 20: Ligne 20:
 <note tip>​http://​formation-debian.via.ecp.fr/​partitionner.html</​note>​ <note tip>​http://​formation-debian.via.ecp.fr/​partitionner.html</​note>​
  
-==== BIOS ====+===== BIOS =====
  
-=== Sécurisation du BIOS ===+==== Sécurisation du BIOS ====
  
  ​Désactivation de tous les boot sauf le disque système  ​Désactivation de tous les boot sauf le disque système
  
  ​Désactivation du boot menu  ​Désactivation du boot menu
 +
 +{{:​securisation:​bios_1.jpg?​400|}}
  
  Mot de passe d'​administration sur BIOS  Mot de passe d'​administration sur BIOS
  
 +{{:​securisation:​bios.jpg?​400|}}
  
-==== Sécurisation de GRUB ====+===== Sécurisation de GRUB =====
  
-=== Version du GRUB ===+==== Version du GRUB ====
  
 {{:​securisation:​version_grub.png|}} {{:​securisation:​version_grub.png|}}
Ligne 43: Ligne 46:
 {{:​securisation:​version_grub.png|}} {{:​securisation:​version_grub.png|}}
  
-=== Définition et cryptage mot de passe GRUB ===+==== Définition et cryptage mot de passe GRUB ====
  
    
Ligne 77: Ligne 80:
  
  
-==== Système de fichiers /​partitionnement ====+===== Système de fichiers /​partitionnement ​=====
  
-=== A qoui sert le fstab ? ===+==== 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. 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 ===+===Option communes aux système de fichiers ​====
  
  
 {{:​securisation:​fstab_options.png|}} {{:​securisation:​fstab_options.png|}}
  
-=== Permissions Linux ===+==== Permissions Linux ====
  
  
Ligne 96: Ligne 99:
 x : execute (permet d'​exécuter le fichier ou d’ouvrir les dossiers) x : execute (permet d'​exécuter le fichier ou d’ouvrir les dossiers)
  
-=== Notion de propriété ===+==== Notion de propriété ​====
  
  
Ligne 105: Ligne 108:
 Les droits s’articule donc entre des autorisations données à des personnes (absence d’autorisation = non autorisé ). Exemple obtenu avec la commande ls -lh 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 ===+==== Le bit SUID ====
  
  
Ligne 127: Ligne 130:
 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. 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.
  
-=== Sécurisation des points de montage ===+==== 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 ​====
  
  
Ligne 157: Ligne 187:
  
  
-==== Limiter les terminaux utilisés par root (nombre et durée) ====+===== Limiter les terminaux utilisés par root (nombre et durée) ​=====
  
-=== En nombre ===+==== En nombre ​====
  
 On peut empêcher le login comme root sur la console et tous les terminaux que l’on désire. On peut empêcher le login comme root sur la console et tous les terminaux que l’on désire.
Ligne 178: Ligne 208:
 </​code>​ </​code>​
  
-=== En durée ===+==== 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 : 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 :
Ligne 193: Ligne 223:
 <note tip>​http://​linuxfr.org/​forums/​astucesdivers/​posts/​terminal-d%C3%A9connexion-automatique</​note>​ <note tip>​http://​linuxfr.org/​forums/​astucesdivers/​posts/​terminal-d%C3%A9connexion-automatique</​note>​
  
-=== Exclusion total ===+==== Exclusion total ====
  
 Modifier le script qui permet le démarrage des processus Modifier le script qui permet le démarrage des processus
Ligne 213: Ligne 243:
 </​code>​ </​code>​
  
-==== Durcissements des comptes ====+===== Durcissements des comptes ​=====
  
 PAM (Pluggable Authentication Modules) permet aux administrateurs système de choisir comment les applications authentifient les utilisateurs. PAM (Pluggable Authentication Modules) permet aux administrateurs système de choisir comment les applications authentifient les utilisateurs.
Ligne 234: Ligne 264:
   * 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)   * 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 ===+==== Politique de mot de passe ====
  
  
Ligne 264: Ligne 294:
 </​note>​ </​note>​
  
-==== UMASK ====+==== 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 ===+==== 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. 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.
Ligne 296: Ligne 416:
 et laisse au groupe le droit de lecture et d’exécution ​ et laisse au groupe le droit de lecture et d’exécution ​
  
-=== root ===+==== 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 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
Ligne 314: Ligne 434:
 <note warning>​Ainsi le masque le plus restrictif est 377, il ne laisse que le droit de lecture au propriétaire</​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 ====+===== Packages et services ​=====
  
-=== Paquets inutiles ===+==== Paquets inutiles ​====
  
   * Repérage   * Repérage
Ligne 339: Ligne 459:
 </​code>​ </​code>​
  
-=== Alléger sa distribution ===+==== Alléger sa distribution ​====
  
   * Liste les paquets installés   * Liste les paquets installés
Ligne 347: Ligne 467:
 </​code>​ </​code>​
  
-==== SUDO ====+===== 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 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
Ligne 356: Ligne 476:
  
 <​code=basch>​ <​code=basch>​
-aptitude install+aptitude install ​sudo
 </​code>​ </​code>​
  
Ligne 384: Ligne 504:
 <note tip>​http://​doc.ubuntu-fr.org/​sudoers</​note>​ <note tip>​http://​doc.ubuntu-fr.org/​sudoers</​note>​
  
-==== Utilisation de syslog (syslog-ng) ====+===== Utilisation de syslog (syslog-ng) ​=====
  
   * Identification du fichier de conf   * Identification du fichier de conf
Ligne 406: Ligne 526:
 <note tip>​https://​www.isalo.org/​wiki.debian-fr/​Nettoyer_sa_Debian</​note>​ <note tip>​https://​www.isalo.org/​wiki.debian-fr/​Nettoyer_sa_Debian</​note>​
  
-==== Visibilité Réseaux ====+===== Visibilité Réseaux ​=====
  
   * Listage des ports ouverts   * Listage des ports ouverts
Ligne 467: Ligne 587:
 <note tip>​{{:​ressources:​pdf:​anssi-cspn_2009-04fr.pdf|}}Page14</​note>​ <note tip>​{{:​ressources:​pdf:​anssi-cspn_2009-04fr.pdf|}}Page14</​note>​
  
-==== IPTABLES ====+===== IPTABLES ​=====
  
-=== Vidage des règles actuelles ===+==== Vidage des règles actuelles ​====
  
 <​code=basch>​ <​code=basch>​
Ligne 482: Ligne 602:
  
  
-=== Tout interdire en entrée, sauf ssh === +==== Tout interdire en entrée, sauf ssh ==== 
 +<​code=basch>​
 #Supresion régle #Supresion régle
    
Ligne 498: Ligne 618:
 iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
  
-=== Chargement des règles au démarrage ===+# 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>​ <​code=bash>​
Ligne 564: Ligne 689:
 </​code>​ </​code>​
  
-==== SSHd ====+===== SSHd =====
  
-=== Empêcher l’accès en root ===+==== Empêcher l’accès en root ====
  
 modifier vi /​etc/​ssh/​sshd_config modifier vi /​etc/​ssh/​sshd_config
Ligne 573: Ligne 698:
 par <​code=basch>​PermitRootLogin no</​code>​ par <​code=basch>​PermitRootLogin no</​code>​
  
-=== Changer le port d'​écoute de ssh ===+==== Changer le port d'​écoute de ssh ====
  
 modifier /​etc/​ssh/​sshd_config modifier /​etc/​ssh/​sshd_config
Ligne 579: Ligne 704:
 changer le port d'​écoute <​code=basch>​Port 35022</​code>​ changer le port d'​écoute <​code=basch>​Port 35022</​code>​
  
-=== Authentification par clés ===+modifier le firewall : port 35022 à la place du 22 
 + 
 +==== Authentification par clés ====
  
 Modification des paramètres ssh sur les deux serveurs Modification des paramètres ssh sur les deux serveurs
Ligne 637: Ligne 764:
 <note tip>​http://​doc.fedorafr.org/​wiki/​SSH_:​_Authentification_par_cl%C3%A9#​L.27authentification_par_cl.C3.A9</​note>​ <note tip>​http://​doc.fedorafr.org/​wiki/​SSH_:​_Authentification_par_cl%C3%A9#​L.27authentification_par_cl.C3.A9</​note>​
  
-==== CHROOT ====+===== CHROOT ​=====
  
-=== Définition ===+==== Définition ​====
  
 Chrooter un programme consiste à le lancer en utilisant la commande chroot. Cette commande permet de changer l'​emplacement de la racine (/). Chrooter un programme consiste à le lancer en utilisant la commande chroot. Cette commande permet de changer l'​emplacement de la racine (/).
Ligne 645: Ligne 772:
 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. 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 ===+==== Installation ​====
  
 Installer les paquets nécessaires ​ Installer les paquets nécessaires ​
Ligne 681: Ligne 808:
 </​code>​ </​code>​
  
-=== Plusieurs utilisations sont envisageables,​ par exemple : ===+==== Plusieurs utilisations sont envisageables,​ par exemple : ====
  
 Recompilation d'​application dans un contexte autre que la machine qui héberge le chroot (backport, cross-compilation,​ ...) Recompilation d'​application dans un contexte autre que la machine qui héberge le chroot (backport, cross-compilation,​ ...)
Ligne 689: Ligne 816:
 Sécurisation d'un service «chrooté» par rapport à la machine hôte (et vice-versa) Sécurisation d'un service «chrooté» par rapport à la machine hôte (et vice-versa)
  
-==== Biblio ​====+===== 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>​
    
  
-ANSSI +===== Bibliographie ===== 
-NSA +  
-NIST+ 
 +==== 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 https://​www.debian.org/​doc/​manuals/​securing-debian-howto/​ch3.fr.html#​s3.2
 
securisation/linux.1413405792.txt.gz · Dernière modification: 2019/05/11 14:35 (modification externe)     Haut de page