ESPACE-GROUPWARE.COM
Accueil arrow Linux Divers arrow Sécurisation de base d'un serveur Linux
Menu Principal
Accueil
Téléchargements
Liens
Contacts
Administration
Services
Compétences
Tarifs
Documentations
RadicalSpam
SpamAssassin
Postfix
Tutoriels
Nagios
Tomcat
Linux RPM
Linux Redhat Fedora
Linux Divers
Sécurisation de base d'un serveur Linux Convertir en PDF Version imprimable Suggérer par mail

Méthodologie :

Dans la plupart de cas, même en installation minimal, le service SSH est prêt à fonctionner dès la fin de l'installation de votre distribution.

Pour ma part, j'effectue les opérations suivantes à l'aide d'un client SSH installé sur mon poste de travail.

Ce type de fonctionnement me permet en autre d'effectuer des copier/coller de lignes de commandes et de paramètres que j'ai stocké dans des fichiers textes.

Remarques :

  • Pour toutes ces opérations, il faut être logué avec le compte root

  • Si vous ne connaissez pas bien l'éditeur "vi", reportez-vous à la rubrique sur ce sujet

  • Le répertoire /etc/security contient beaucoup d'éléments concernant la sécurité mais je n'ai pas encore eu le temps de tous les etudier.

Sauvegarde avant toutes modifications :

 

<strong># Inventaire</strong>
 
<strong># Création d'un répertoire de stockage pour les sauvegardes et inventaires</strong>
[root@linux /]$ <span class="commande">mkdir /var/sauvegarde</span>
 
<strong># Remarque : Remplacer ddmmaaaa-hhmm par les valeurs correspondantes</strong>
 
<strong># Tracer tous les fichiers présents avec attributs et propriétaire</strong>
[root@linux /]$ <span class="commande">ls -aRl / > /var/sauvegarde/ls-aRl-ddmmaaaa-hhmm.log</span>
 
<strong># Liste des rpm trié installé actuellement sur le système</strong>
[root@linux /]$ <span class="commande">rpm -qa | sort > /var/sauvegarde/rpm-qa-ddmmaaaa-hhmm.log</span>
 
<strong># Organisation actuel des files System</strong>
[root@linux /]$ <span class="commande">df -ah > /var/sauvegarde/df-ah-ddmmaaaa-hhmm.log</span>
 
<strong># Il est important de sauvegarder les fichiers qui nous seront amenés à modifier.</strong>
<strong># Normalement, tous se trouve dans l'arborescence du répertoire /etc</strong>
[root@linux /]$ <span class="commande">cd /</span>
[root@linux /]$ <span class="commande">tar -czvf /var/sauvegarde/sav-av-securisation-etc.tar.gz etc</span>
 

Mise à l'heure et Internationalisation :

Il est important pour la traçabilité des opérations, que le serveur soit à l'heure et que les paramètres d'affichage horaires soit parfaitement définies. Même chose pour les paramètres d'internationalisation.

Un conseil : Laissez ces valeurs car cela à des conséquences sur la compilation ou d'autres opérations

<strong># Editez le fichier /etc/sysconfig/i18n :</strong>
<strong># Le "fr_FR.UTF-8" utilisé par défaut pose des problèmes d'affichage et de compilation</strong>
[root@linux /]$ <span class="commande">vi /etc/sysconfig/i18n</span>
LANG="en_US"
SUPPORTED="en_US:fr_FR:fr"
LANGUAGE="en_US"
# LC_ALL="C" (à vérifier)
 
<strong># Editez le fichier /etc/sysconfig/clock :</strong>
[root@linux /]$ <span class="commande">vi /etc/sysconfig/clock</span>
ZONE="Europe/Paris"
UTC=true
# Europe/Paris correspond au fichier :/usr/share/zoneinfo/Europe/Paris

Vérifiez et remplacez si nécessaire le fichier /etc/localtime

Ce fichier définit, les paramètres d'affichage de l'horloge. Il est une copie d'un des fichiers que l'on trouve dans /usr/share/zoneinfo. Faites différents essai pour voir le fonctionnement et les changements apportés

<strong># Affichage de la date avec un localtime /usr/share/zoneinfo/UTC :</strong>
[root@linux /]$ <span class="commande">date</span>
<span style="color: #ff0000">Mon Feb  2 15:07:28 UTC 2004</span>
 
<strong># Affichage de la date avec un localtime /usr/share/zoneinfo/Europe/Paris :</strong>
[root@linux /]$ <span class="commande">date</span>
<span style="color: #ff0000">Mon Feb  2 16:10:19 CET 2004</span>

Vous remarquerez, le décalage horaire ainsi que le libellé CET au lieu du UTC. L'affichage des jours et mois en Français n'est pas lié au localtime utilisé mais à la langue dans la variable d'environnement "LANG"

<strong># Exemple, si vous changer cette variable :</strong>
[root@linux /]$ <span class="commande">export LANG=fr_FR</span>
[root@linux /]$ <span class="commande">date</span>
<span style="color: #ff0000">lun fév  2 16:14:11 CET 2004</span>
 
<strong># Pour éviter de relancer la session à chaque modification :</strong>
[root@linux /]$ <span class="commande">source /etc/sysconfig/i18n</span>
[root@linux /]$ <span class="commande">source /etc/sysconfig/clock</span>
 
<strong># Vérifier si le fichier /etc/localtime actuel correspond à celui vous voulez utiliser :</strong>
[root@linux /]$ <span class="commande">diff /etc/localtime /usr/share/zoneinfo/UTC</span>
<span style="color: #ff0000">Binary files /etc/localtime and /usr/share/zoneinfo/UTC differ</span>
 
[root@linux /]$ <span class="commande">diff /etc/localtime /usr/share/zoneinfo/Europe/Paris</span>
<span style="color: #ff0000">Vous ne devriez n'avoir aucune réponse</span>  

Quelques soit le localtime utilisé au final, le principal est qu'il soit le même sur toutes vos machines.

<strong># Pour changer le localtime</strong>
[root@linux /]$ <span class="commande">cd /etc</span>
[root@linux /]$ <span class="commande">rm -f localtime</span>
[root@linux /]$ <span class="commande">ln -s /usr/share/zoneinfo/Europe/Paris localtime</span>

Paramétrage de la synchronisation automatique avec un serveur de temps. Si vous avez un serveur NTP en interne, utilisez-le à la place de celui proprosé.

<strong># Vérifications du DNS (doit répondre IP 134.214.100.6) : </strong>
[root@linux /]$ <span class="commande">ping ntp.univ-lyon1.fr</span>
<span style="color: #ff0000">PING dns.univ-lyon1.fr (134.214.100.6) 56(84) bytes of data.</span>
<span style="color: #ff0000">64 bytes from dns.univ-lyon1.fr (134.214.100.6): icmp_seq=0 ttl=50 time=173 ms</span>

Si ça ne fonctionne pas, vérifier le DNS dans /etc/resolv.conf. Ce fichier doit au moins contenir une entrée nameserver xxx.xxx.xxx.xxx. Sinon vérifier vos paramètres réseaux.

NTP se trouve sur le CD 2 de Redhat Entreprise, fichier ntp-4.xxx.rpm. Le package NTP réclame la présence du package "libcap-1.10-15.i386.rpm" que vous trouverez sur le même cd

<strong># Synchronisation horaire avec NTP.</strong>
 
<strong># Installation du package "libcap" dont à besoin le package NTP :</strong>
[root@linux /]$ <span class="commande">rpm -Uvh /mnt/cdrom/RedHat/RPMS/libcap-1.10-15.i386.rpm</span>
 
<strong># Installation du package NTP :</strong>
[root@linux /]$ <span class="commande">rpm -Uvh /mnt/cdrom/RedHat/RPMS/ntp-4.1.2-4.i386.rpm</span>
 
<strong># Modification du fichier de config /etc/ntp.conf :</strong>
[root@linux /]$ <span class="commande">vi /etc/ntp.conf</span>
# Ajoutez la ligne suivante, (a mettre avant le premier "server  127.127.1.0")
server  ntp.univ-lyon1.fr prefer
 
<strong># Ajouter ce serveur dans /etc/ntp/step-tickers</strong>
[root@linux /]$ <span class="commande">echo 'ntp.univ-lyon1.fr' >> /etc/ntp/step-tickers</span>
 
<strong># Vérifiez la date et l'heure actuel :</strong>
[root@linux /]$ <span class="commande">date</span>
<span style="color: #ff0000">Mon Feb  2 15:51:15 UTC 2004</span>
 
<strong># Lancer la commande une première fois à la main :</strong>
[root@linux /]$ <span class="commande">/usr/sbin/ntpdate -s -b -p 8 -u `cat /etc/ntp/step-tickers`</span>
 
<strong># Vérifiez la date et l'heure après la synchronisation :</strong>
[root@linux /]$ <span class="commande">date</span>
<span style="color: #ff0000">Mon Feb  2 15:00:51 UTC 2004</span>

Ajoutez une tâche cron pour la mise à jour horaire, directement dans /etc/crontab ou créez un fichier ntp.cron dans /etc/cron.daily

[root@linux /]$ <span class="commande">echo "02 4 * * * root nice -n 19 /usr/sbin/ntpdate \ 
                  -s -b -p 8 -u `cat /etc/ntp/step-tickers`" >> /etc/crontab</span>

Sécurisation de base pour SSH

Dans la section réservé à SSH, nous aborderons en profondeur sa sécurisation mais il s'agit pour le moment du minimum requis.

<strong># Editer /etc/ssh/sshd_config et mettre PermitRootLogin no</strong>
[root@linux /]$ <span class="commande">vi /etc/ssh/sshd_config</span>
PermitRootLogin no
 
<strong># Relancer le service SSH</strong>
[root@linux /]$ <span class="commande">/etc/init.d/sshd restart</span>

Désactivation des services :

Vous pouvez trouvez plus ou moins de services que ceux exposés ci-après. La liste suivante correspond à l'installation d'une Redhat Entreprise ES 9.0 en mode minimal.

<strong># Pour désactiver un service au niveau d'exécution 3 :</strong>
[root@linux /]$ <span class="commande">chkconfig --level 3 nom_service off</span>
 
<strong># Pour activer un service au niveau d'exécution 3 :</strong>
[root@linux /]$ <span class="commande">chkconfig --level 3 nom_service on</span>
 
<strong># Pour supprimer un service (sans supprimer l'application) :</strong>
[root@linux /]$ <span class="commande">chkconfig --del nom_service</span>
 
<strong># Pour ajouter un service :</strong>
[root@linux /]$ <span class="commande">chkconfig --add nom_service</span>
 
/etc/init.d/atd ................. : OFF - Tâches programmés par la commande "at"
/etc/init.d/autofs .............. : OFF - Montage automatique de périphérique amovible (fdd, cdrom, jazz, etc...)
/etc/init.d/crond ............... : ON  - Programmateur de tâches
/etc/init.d/functions ........... : N/A - Ce n'est pas un service mais une bibliothèque de scrips bash
/etc/init.d/gpm ................. : OFF - Gestionnaire de souris pour Vim et MC
/etc/init.d/halt ................ : N/A - Ce n'est pas un service mais le scripts utilisé pour arrêter la machine
/etc/init.d/ip6tables ........... : OFF - Firewall iptable (version ipv6)
/etc/init.d/iptables ............ : OFF - Firewall iptable (version ipv4)
/etc/init.d/irqbalance .......... : ?   - ???
/etc/init.d/kdcrotate ........... : OFF - Kerberos (execution des scripts du fichier /etc/krb5.conf)
/etc/init.d/keytable ............ : ON  - Outils de configuration de la console, clavier, etc...
/etc/init.d/killall ............. : N/A - Ce n'est pas un service.
/etc/init.d/kudzu ............... : OFF - Utilitaire pour découvrir et configurer les périphériques PNP
/etc/init.d/mdmonitor ........... : ON  - Moniteur pour les systèmes RAID
/etc/init.d/microcode_ctl ....... : ?   - Microcode pour le CPU ???
/etc/init.d/netdump ............. : OFF - ???
/etc/init.d/netfs ............... : OFF - Pour monter des FS réseau comme (SMB, NCP)
/etc/init.d/network ............. : ON  - Activation des fonctions réseaux
/etc/init.d/nfs ................. : OFF - Services NFS
/etc/init.d/nfslock ............. : OFF - Service de vérrouillage NFS
/etc/init.d/nscd ................ : OFF - Service de cache pour les recherches NIS, DNS, ???
/etc/init.d/portmap ............. : OFF - Gestionnaire de sécurité pour NFS, NIS (RPC)
/etc/init.d/psacct .............. : OFF - Moniteur d'activité
/etc/init.d/random .............. : ON  - Garantie un bon niveau d'entropie pour les valeurs aléatoires
/etc/init.d/rawdevices .......... : OFF - Assignation de RawDevices à des périphériques bloc ???
/etc/init.d/rhnsd ............... : OFF - Service de mise à jour automatique Redhat Network
/etc/init.d/saslauthd ........... : OFF - Serveur d'authentification SASL
/etc/init.d/single .............. : N/A - A priori, remplace l'ancien fichier /etc/init.d/local ???
/etc/init.d/smartd .............. : OFF - SMART Disk Monitoring Daemon ???
/etc/init.d/sshd ................ : ON  - Serveur SSH
/etc/init.d/syslog .............. : ON  - Gestionnaire des logs
/etc/init.d/xinetd .............. : OFF - Services Xinetd
/etc/init.d/ypbind .............. : OFF - Services NIS ???
 
<strong># D'autres services que vous pourriez trouver :</strong>
 
/etc/init.d/anacron ............. : OFF - Ordonnanceur de tâches (ne l'activez que si vous l'utilisez)
 

Login root via SU :

Un serveur peut avoir plusieurs personnes chargés de son administration. Si chacune se logue directement en tant que "root", vous perdrez toutes traçabilités.

L'objectif de cette opération, est d'obliger les administrateurs à ouvrir d'abord un login sous leur compte puis de passer en compte "root" par la commande "su -"

 

Cette méthode permet également de retirer les droits d'administration à une personne sans avoir à changer le mot de passe du compte "root"

<strong># Création d'un compte administrateur - A faire pour chaque administrateur</strong>
<strong># Evitez les noms génériques comme "admin1", ce n'est qu'un exemple</strong>
[root@linux /]$ <span class="commande">useradd -G wheel,adm admin1</span>
 
<strong># Mettre le fichier /etc/pam.d/su dans l'état suivant :</strong>
<strong># Cela permet ne n'autoriser que les membres du groupe "wheel" à utiliser "su"</strong>
 
[root@linux /]$ <span class="commande">vi /etc/pam.d/su</span>
auth       sufficient   /lib/security/$ISA/pam_rootok.so
#auth      sufficient   /lib/security/$ISA/pam_wheel.so trust use_uid
auth       required     /lib/security/$ISA/pam_wheel.so use_uid
auth       required     /lib/security/$ISA/pam_stack.so service=system-auth
account    required     /lib/security/$ISA/pam_stack.so service=system-auth
password   required     /lib/security/$ISA/pam_stack.so service=system-auth
session    required     /lib/security/$ISA/pam_stack.so service=system-auth
session    optional     /lib/security/$ISA/pam_xauth.so
 
<strong># Remarque : D'autres options sont possibles mais elles sortent des limites de ce chapitre.</strong>  

Modification du fichier /etc/inittab :

<strong># Editez le fichier /etc/inittab</strong>
[root@linux /]$ <span class="commande">vi /etc/inittab</span>
 
<strong># Si vous avez suivi mes conseils et n'avez pas installé X-Windows vous devriez trouvez</strong>
<strong># la ligne suivant qui correspond au niveau d'initialisation par défaut.</strong>
id:3:initdefault:
 
<strong># Désactivez le shutdown par les touches CTRL-ALT-SUPP en commentant la ligne</strong>
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
 
<strong># Désactivez les consoles inutilisés en commentant les lignes</strong>
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
#3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6
 
<strong># Remarque : La console tty2 sera utilisée pour redirigé les sorties de syslog</strong>  

Modification du fichier /etc/syslog.conf :

<strong># Editez le fichier /etc/syslog.conf</strong>
[root@linux /]$ <span class="commande">vi /etc/syslog.conf</span>
 
<strong># Ajouter une entrée dans /etc/syslog pour rediriger toutes les sorties vers une des consoles :</strong>
[root@linux /]$ <span class="commande">echo "*.*        /dev/tty2" >> /etc/syslog.conf</span>
 
<strong># Ajouter une entrée dans /etc/syslog pour rediriger toutes les sorties vers un fichier unique :</strong>
[root@linux /]$ <span class="commande">echo "*.*        /var/log/full.log" >> /etc/syslog.conf</span>
 
<strong># Relancez syslog :</strong>
[root@linux /]$ <span class="commande">/etc/init.d/syslog restart</span>

Modification du fichier /etc/securetty :

Ce fichier permet de définir sur quels consoles, l'utilisateur "root" est autorisé à se connecter à distances. Ayant définit que l'utilisateur ne pouvait jamais se connecter directement, il est normal d'enlever toutes les entrées de ce fichier.

<strong># Editez le fichier /etc/securetty</strong>
[root@linux /]$ <span class="commande">vi /etc/securetty</span>
 
<strong># Commentez avec "#" ou supprimez toutes les entrées.</strong>
#tty1
#tty2
#tty3
#tty4
#tty5
#tty6

Modification du fichier /etc/fstab :

Les fonctions d'auto-montage sont parfaites pour une station de travail mais doivents être désactivés dans le cas d'un serveur.

<strong># Editez le fichier /etc/fstab</strong>
[root@linux /]$ <span class="commande">vi /etc/fstab</span>
 
<strong># Commentez avec "#" les lignes concernant les périphériques amovibles</strong>
#/dev/cdrom             /mnt/cdrom              udf,iso9660 noauto,owner,kudzu,ro 0 0
#/dev/fd0               /mnt/floppy             auto   noauto,owner,kudzu 0 0
 
<strong># Remarque : Si vous ne désactivez pas le service "kudzu", ces entrées seront ajoutées à chaque démarrage</strong>  

Les règles PAM (Pluggable Authentication Modules) :

 

<strong># Les fichiers PAM principaux sont :</strong>
 
/etc/pam.d/other
/etc/pam.d/su
/etc/pam.d/system-auth
/etc/pam.d/login
/etc/pam.d/passwd
/etc/pam.d/halt
/etc/pam.d/poweroff
/etc/pam.d/reboot
/etc/pam.d/sudo
/etc/pam.d/sshd
 
<strong># Les autres fichiers PAM :</strong>
/etc/pam.d/redhat-config-mouse
/etc/pam.d/authconfig
/etc/pam.d/chfn
/etc/pam.d/chsh
/etc/pam.d/kbdrate
/etc/pam.d/rhn_register
/etc/pam.d/setup
/etc/pam.d/up2date-config
/etc/pam.d/up2date
/etc/pam.d/up2date-nox
/etc/pam.d/webmin
 
 

Les services XINETD :

En cours...

 
< Précédent   Suivant >
 

(c) Espace-Groupware.com (2006) - Stéphane RAULT
Joomla 1.0.10 - http://www.joomla.org