=============================================================================== Installation et securisation d'une station Debian 3.0 stable - v0.2.2 Simon Castro - Aout 2004 http://www.entreelibre.com/scastro/debian-secinst/ =============================================================================== Copyright (c) 2003,2004 Simon Castro, scastro [ at ] entreelibre.com. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. You must have received a copy of the license with this document and it should be present in the fdl.txt file. If you did not receive this file or if you don't think this fdl.txt license is correct, have a look on the official http://www.fsf.org/licenses/fdl.txt licence file. =============================================================================== Ce document presente l'installation et la securisation d'une station GNU Linux Debian 3.0 stable. Vous pouvez vous en servir comme aide-memoire, comme "guide" pour redaction d'une procedure, comme d'un exemple de que vous pourriez faire ou que vous ne feriez pas, etc... Notez que les versions systeme/outils/etc employees lors de la redaction de ce document importent peu en regard de la mentalite (qui a dit paranoiaque ?) sous-jacente qu'il convient de conserver. Tout ce qui est inscrit dans le document a ete teste. Je fais les manipulations et consigne les commandes dans le document quand le resultat me convient. Cependant, je vous rappelle que j'ai teste tout ceci sur mes stations et que, vous en ayant informe, je ne saurais etre tenu pour responsable de ce qui pourrait vous arriver si vous rencontriez des problemes. Ce document est decoupe en plusieurs parties. Les cinq premieres, numerotees de 1 a 5 et composees de plusieurs etapes, concernent l'installation et la securisation plus ou moins fine de la station : * La premiere partie commence au moment ou vous bootez sur le CD d'installation jusqu'au premier reboot. Rien de bien difficile. * La seconde partie commence apres le premier reboot jusqu'au moment ou le systeme vous propose le prompt. Toujours rien de bien complique. * La troisieme partie vous permet de proceder a la configuration initiale du systeme, a sa securisation minimale et a sa mise a jour. Vous obtenez en resultat une station stable avec le minimum de services actives et le firewall Ipchains active. * La quatrieme partie aborde une serie de procedures a suivre pour obtenir une securisation "moderee" de la station. Vous pouvez choisir d'ignorer des etapes. * La cinquieme partie presente diverses actions que vous pouvez suivre pour obtenir une securisation "approfondie" de la station. Libre a vous de vous y interesser ou non. Les parties finales du document numerotees "romaines" presentent des aide-memoire ou des procedures a suivre pour ajouter des elements sur la station. Quand des ajouts d'elements sont presentes, ils ont toujours ete effectues sur une station installee suivant les etapes decrites dans les parties 1 a 5. N'hesitez pas a me faire part de vos commentaires et/ou idees, surtout si : vous n'avez rien compris a ce que j'ai ecris :) ou si vous avez suivi une procedure qui n'a pas donne le resultat escompte. ================================================================================ REMERCIEMENTS ============= o Cedric B. pour ses remarques. o Damien Degorre pour son travail de mise en page qui m'a enfin decide a imprimer (oui oui, j'imprime encore ;>) ce document sur papier. Vous pouvez consultez sa version sur : http://www.u-admin.org/misc/secu-deb/ o Pierre C. de la redaction de developpez.com pour sa mise en page HTML et son offre de publication sur : http://linux.developpez.com/cours/securedeb/ o David pour toutes ses questions et pour avoir saute comme ca a pieds joints (en fermant les yeux ?) dans le monde GNU/Linux et principalement dans cette distrib... ================================================================================ CHANGEMENTS =========== v0.2.2 (22/08/2004) : --------------------- Un nombre consequent de modifications et de corrections a ete pris en compte pour cette version - je vous laisse consulter le sommaire et les annexes pour en avoir un apercu. Les commentaires de plusieurs lecteurs et un emploi frequent des procedures decrites ont permis, je l'espere, de corriger les fotes et de preciser certains points. Certaines questions m'ont egalement ammene a ajouter quelques commandes qu'il est ardu de garder en memoire sans employer le man... ================================================================================ REMERCIEMENTS CHANGEMENTS SOMMAIRE ======== 1. INSTALLATION DU SYSTEME 1.1. Booter sur le CD 1.2. Menu d'installation 1.3. Choisir la langue 'Francais (fr)' puis 'Francais (France)' 1.4. Configurer le clavier avec le mode 'azerty/fr latin1' 1.5. 'Partitionnez le disque dur' 1.6. 'Initialisez une partition d'echange' 1.7. 'Initialisez les partitions Linux' crees en 1.5. 1.8. 'Installez le noyau et les modules' 1.9. 'Configurez les modules et pilotes materiel' 1.10. 'Configurez le reseau' 1.11. 'Installez le systeme de base' 1.12. 'Rendez le systeme amorcable' 1.13. 'Creez une disquette d'amorcage' 1.14. Retirez la disquette et le CDROM et 'reamorcez le systeme' 2. CONFIGURATION INITIALE DU SYSTEME 2.1. GMT : Oui 2.2. Mots de passe 2.3. Creez un premier utilisateur 2.4. 'Retirer le package PCMCIA' => Oui, si vous ne l'avez pas deja supprime 2.5. 'Connexion PPP pour installer le systeme' => Non 2.6. 'Configuration APT' 2.7. 'Utiliser TaskSel' => Non 2.8. 'Utiliser Dselect' => Non 2.9. Si vous avez supprime le package PCMCIA en 2.4., repondez 'Oui' quand on vous demande de le retirer du systeme 2.10. 'Supprimer les .deb' => Oui 2.11. 'Configuration des Mails' 3. PREMIER ACCES AU SYSTEME ET SECURISATION MINIMALE 3.1. Logguez vous sous votre utilisateur puis en root 3.2. Lancez Dselect 3.3. Script de securisation minimale 3.4. Recompilation du noyau pour le support firewall ipchains 3.5. Configuration du firewall Ipchains 3.6. Mise a jour securite du systeme (super-utilisateur) 4. SECURISATION MODEREE 4.1. Notes sur le boot du systeme et sur le noyau 4.2. Securisation du systeme de fichiers 4.3. Securisation des comptes 4.4. Les administrateurs n'ont pas besoin de passer root 4.5. Synchronisation horaire avec un serveur NTP 4.6. Generation automatisee d'un rapport systeme 4.7. Installation et premiers pas avec Modular-Syslog 4.8. Verification des empreintes des packages a installer 4.9. Systeme de fichiers ext3 avec un noyau 2.4 : de ext2 a ext3 4.10. Backup du systeme sur une partition specifique 4.11. Preparation d'une restauration du systeme en cas d'incident 5. SECURISATION APPROFONDIE 5.1. Installation du patch OpenWall 5.2. Installation du wrapper libsafe 5.3. Conserver une empreinte de verification d'integrite du systeme 5.4. Gestion des quotas 5.5. Securisation PAM : Gestion des limites 5.6. Disquette de secours avec Tomsrtbt 5.7. Installation de Prelude-Lml pour une remontee de log securisee vers un serveur centralise 5.8. Securisation approfondie avec GrSecurity I. INFORMATIONS SUR LA GESTION DE PACKAGES DEBIAN I.a. Creation d'un package Debian II. COMPILATION DU NOYAU II.a. Compilation d'un noyau personnalise II.b. Installation du noyau III. ADMINISTRATION : QUELQUES CONSEILS III.a. J'ai oublie de preparer une partition ... III.b. Dselect ne parvient pas a configurer les packages a cause des permissions de /tmp III.c. SmartHost Exim III.d. Client Samba III.e. Graver CD et DVD III.f. Accents dans le shell IV. INSTALLATION ET SECURISATION D'UN SERVEUR APACHE MODSSL IV.a. Installation IV.b. Configuration initiale IV.c. Integration des quotas IV.d. Empreinte du systeme IV.e. Sauvegarde du systeme IV.f. Etapes de configuration supplementaires V. INSTALLATION ET SECURISATION D'UN SERVEUR D'APPLICATION WEBSPHERE V.a. Installation V.b. Configuration initiale : Restauration du 'read-only' sur /usr, deplacement vers /var/was, attribution de permissions restreintes et execution du service WAS sous une identite restreinte V.c. Recommandations V.d. Empreinte du systeme V.e. Sauvegarde du systeme VI. INTEGRATION DE NETFILTER / IPTABLES VI.a. Compilation du noyau VI.b. Scripts d'initialisation VII. INSTALLATION D'UN SERVEUR SAMBA POUR UNE GESTION DE BACKUP VII.a. Installation VII.b. Configuration VIII. INSTALLATION D'UN DEMON NAGIOS VIII.a Archives VIII.b Creation des groupes/utilisateurs VIII.c Compilation/Installation de Nagios VIII.d Deplacement des repertoires et attribution de permissions specifiques VIII.e Configuration d'Apache VIII.f Configuration des autorisations d'acces VIII.g Script d'initialisation et administrateurs Nagios VIII.h Et pour finir IX. GRAPHIQUES MRTG POUR LE SERVER-STATUS APACHE IX.a Archives IX.b Configuration X. INSTALLATION D'UN DEMON VSFTPD X.a. Installation X.b. Configuration initiale XI. LINUX-VSERVER + GRSECURITY XI.a Archives et installation du noyau patche XI.b Installation de l'interface linux-vserver utilisateur XI.c Configuration initiale et espace reserve aux serveurs virtuels XI.d Installation du serveur de reference XI.e Installation des serveurs virtuels XI.f Continuons quelque peu XI.g Mise a jour des vservers dedies XI.h Points de securisation supplementaires XI.i Notes finales XI.j Quelques informations sur le script DS_setup_vserver XII. SYSTEME DE COURRIER XII.a Postfix XII.b Popa3d XII.c Pop-before-smtp XII.d Installation dans un vserver dedie XII.e Configuration du systeme XIII. BIND9 WEBOGRAPHIE ANNEXE 1 - Parametrage du firewall Ipchains ANNEXE 2 - Generation automatisee de rapport systeme ANNEXE 3 - syslogd-listfiles.msyslog.patch ANNEXE 4 - Script d'arret/demarrage de prelude-lml ANNEXE 5 - Fichier de regles pour un support Ipchains avec Prelude-lml ANNEXE 6 - Fichier de configuration Apache minimal ANNEXE 7 - Parametrage du firewall NetFilter ANNEXE 8 - Script de backup ANNEXE 9 - Script de restauration ANNEXE 10 - Exemple de script Fdisk ANNEXE 11 - Parametres de configuration d'un noyau GrSecurity ANNEXE 12 - Configuration Sysctl de GrSecurity ANNEXE 13 - ACLs GrSecurity pour Debian-secinst ANNEXE 14 - Script d'initialisation Nagios ANNEXE 15 - debian-secinst.sh ANNEXE 16 - Parametrage noyau GrSecurity 2.0 ANNEXE 17 - Configuration Sysctl GrSecurity 2.0 pour Linux-Vserver ANNEXE 18 - Patch debian-newvserver.sh ANNEXE 19 - DS_setup_vserver.sh ANNEXE 20 - Patchs httpd.conf pour DS_setup_vserver.sh ANNEXE 21 - Patch responsefile pour Websphere ANNEXE 22 - Patch pop-before-smtp-1.35 modifie pour popa3d-0.6.4.1.tar.gz ANNEXE 23 - Exemple de configuration Bind9 ANNEXE 24 - Fichiers de configuration Postfix VERSIONS ================================================================================ 1. INSTALLATION DU SYSTEME ========================== NDR : * Si le systeme est 'critique' ou l'environnement 'dangereux' et que l'adressage est statique, ne branchez pas la station sur le reseau. * Si l'adressage est dynamique 'DHCP' et que vous etes dans le cas precedent, branchez la station pour l'etape 1.10. uniquement. * Si vous effectuez une installation par VmWare (tm) (ou tout autre outil du meme genre), je suppose que vous devez avoir confiance dans votre systeme hote. Faites cependant attention a ce que votre systeme cible ne soit pas up sur le reseau avant d'etre securise un minimum ? * Comme me l'a recommande un lecteur, il convient bien entendu de *toujours* verifier la signature des ISO que vous telechargez avant de les employer. 1.1. Booter sur le CD. 1.2. Menu d'installation : Si le disque dur ou des peripheriques sont SCSI => entrer compact puis 'enter' Sinon, => entrer 'enter' 1.3. Choisir la langue 'Francais (fr)' puis 'Francais (France)'. 1.4. Configurer le clavier avec le mode 'azerty/fr latin1'. 1.5. 'Partitionnez le disque dur' * Effacez toutes les partitions presentes. * Creez les partitions suivantes : => Les lignes suivantes sont baties sur le modele primaire/logique - nom de la partition - taille (Mo) - montage Partitionnement du disque : Primaire - /sda1 - 100 - / Primaire - /sda2 - 300 - Swap (pas de point de montage) Primaire - /sda3 - 20 - /boot Logique - /sda5 - 50 - /root Logique - /sda6 - 120 - /var Logique - /sda7 - 50 - /var/log Logique - /sda8 - 200 - /tmp Logique - /sda9 - 2000 - /usr Logique - /sda10 - 500 - /home Logique - /sda11 - ? - /local -> La premiere partition doit etre marquee comme bootable. -> Toutes les partitions doivent etre de type 'Linux' sauf la deuxieme partition qui doit etre de type 'Linux Swap'. -> La derniere partition est d'une taille relative a l'espace disque restant apres creation des partitions principales. Note sur le partitionnement relatif a l'installation d'un serveur Web : [...] Logique - /sda10 - 500 - /home Logique - /sda11 - 300 - /var/www Logique - /sda12 - ? - /local -> La taille 300M est arbitraire, prevoyez une allocation relative a VOTRE installation. N'oubliez pas de consulter 'IV. INSTALLATION ET SECURISATION D'UN SERVEUR APACHE MODSSL' Note sur le partitionnement relatif a l'installation d'un serveur IBM Websphere : [...] Logique - /sda10 - 500 - /home Logique - /sda11 - 300 - /var/www Logique - /sda12 - 200 - /var/was Logique - /sda13 - ? - /local -> La taille 200M est arbitraire, prevoyez une allocation relative a VOTRE installation. N'oubliez pas de consulter 'V. INSTALLATION ET SECURISATION D'UN SERVEUR D'APPLICATION WEBSPHERE' Note sur le partitionnement relatif a la creation d'une partition de backup : [...] Logique - /sda10 - 500 - /home Logique - /sda11 - 300 - /var/www Logique - /sda12 - 200 - /var/was Logique - /sda13 - 1000 - /backup Logique - /sda14 - ? - /local -> La taille 1000M est arbitraire, prevoyez une allocation relative a VOTRE installation. Personnellement, 500 Mo pour une sauvegarde full mensuelle + les sauvegardes incrementales journalieres me conviennent en faisant du menage tous les mois, mais je prefere voir large. N'oubliez pas de consulter 'VII. INSTALLATION D'UN SERVEUR SAMBA POUR UNE GESTION DE BACKUP' => Terminer en ecrivant les partitions sur le disque 'Write' puis en sortant du menu 'Quit'. Commentaires : Selon l'utilisation finale du serveur, il est parfois utile de creer des partitions supplementaires. Une partition /usr/src si vous testez plusieurs noyaux, une partition /var/cache/apt si vous conservez les packages sur un serveur centralise, diverses partitions /var/wwwX dans le cas de plusieurs serveurs Web. 1.6. 'Initialisez une partition d'echange' => Pour se faire, acceptez de l'initialiser sur /dev/sda2 et recherchez les blocs defectueux. 1.7. 'Initialisez les partitions Linux' crees en 1.5. => 'Suivant' pour la premiere, 'Autre choix' pour les suivantes. => Recherchez les blocs defectueux pour chacune des partitions => Entrez les points de montage precises dans 1.5. 1.8. 'Installez le noyau et les modules' => 'CDROM Debian trouve ?', repondez 'Oui'. 1.9. 'Configurez les modules et pilotes materiel' => Choisissez des pilotes a ajouter au systeme. => NDR : pour Compaq, le pilote reseau peut etre 'net' -> 'tlan' et vous pouvez l'ajouter dans le noyau. 1.10. 'Configurez le reseau' => Choisissez DHCP ou Adressage statique. 1.11. 'Installez le systeme de base' => Utilisez le 'media' : 'CDROM'. => Utilisez le 'repertoire pour systeme de base' : 'instmnt'. 1.12. 'Rendez le systeme amorcable' => Installez dans le mbr. 1.13. 'Creez une disquette d'amorcage' => Ceci est optionnel. 1.14. Retirez la disquette et le CDROM et 'reamorcez le systeme'. ================================================================================ 2. CONFIGURATION INITIALE DU SYSTEME ==================================== NDR : Cette partie est relative a la configuration suivant le reboot de 1. 2.1. GMT : Oui. => Choisir 'Europe' puis 'Paris'. 2.2. Mots de passe : => 'Activation mots de passe MD5' : Oui => 'Activation mode shadow' : Oui => Entrez le mot de passe pour root 2.3. Creez un premier utilisateur. => Cet utilisateur sera par la suite utilise comme administrateur du systeme. 2.4. 'Retirer le package PCMCIA' => Oui, si vous ne l'avez pas deja supprime. 2.5. 'Connexion PPP pour installer le systeme' => Non 2.6. 'Configuration APT' => 'Cdrom' => Entrez le premier CD d'installation et validez '/dev/cdrom' => 'Scan another CD' : Oui pour tous les CD du set que vous possedez. => 'Ajouter une autre source APT' : Non => 'Use security update' : Non 2.7. 'Utiliser TaskSel' => Non 2.8. 'Utiliser Dselect' => Non 2.9. Si vous avez supprime le package PCMCIA en 2.4., repondez 'Oui' quand on vous demande de le retirer du systeme. 2.10. 'Supprimer les .deb' => Oui 2.11. 'Configuration des Mails' => '4. Local delivery only' => Entrez le nom de l'administrateur configure en 2.3. et confirmez. Le systeme doit maintenant vous donner un prompt. ================================================================================ 3. PREMIER ACCES AU SYSTEME ET SECURISATION MINIMALE ==================================================== Vous venez de finir la configuration initiale du systeme et votre station n'est normalement pas encore connectee au reseau. 3.1. Logguez vous sous votre utilisateur puis en root. => i.e. : connectez vous avec votre utilisateur en mode console, puis entrez la commande 'su -' pour obtenir l'identite super-utilisateur. 3.2. Lancez Dselect * 'Update' * 'Select' et selectionnez les packages que vous desirez a partir du CDROM (vim, gpm, emacs, etc...) * 'Install' NDR : Meme si vous ne selectionnez rien, passez quand meme par les etapes 'Update' et 'Install'. Ceci vous permettra d'avoir un systeme un peu plus "fourni" que le systeme minimal. NDR : Il est conseille de ne pas faire plusieurs choses a la fois : Installation minimale, puis installation des packages absolument necessaires, puis installation du serveur X par exemple. NDR : Il est FORTEMMENT conseille de n'installer que le STRICT necessaire. Finissez en lancant les commandes updatedb et mandb Man : dselect, apt, updatedb et mandb. 3.3. Script de securisation minimale Le script present en ANNEXE 15 - Script debian-secinst.sh (dont les fonctions sont succinctement commentees par la suite) est charge de cette securisation minimale. Placez ce script sur votre systeme via un support amovible ou executez chacune des etapes avec l'utilisateur root (un sftp est également envisageable). !!! N'oubliez pas de mettre a jour la configuration du script !!! Fichiers de configuration de l'environnement administrateur J'appelle environnement administrateur, l'environnement des utilisateurs qui auront la possibilite d'administrer la station. La fonction skel_env() est chargee de mettre en place les fichiers de configuration qui seront utilises lors de la creation d'un utilisateur. La fonction admin_env() est chargee de configurer l'environnement de l'utilisateur que vous avez cree en 2.3. Fichiers de configuration de l'environnement super-utilisateur La fonction root_env() est chargee du meme type de configuration que precedemment et prepare une arborescence /home/system. Securisation minimale La fonction sec_min() est chargee d'un certain nombre de taches : arret d'un certain nombre de services, mise a jour de la configuration syslog, ajout d'une banniere de login presentant les restrictions d'acces, etc... NDR : La restriction d'acces realisee sur le fichier /etc/securetty supprimera toute possibilite de connexion via l'utilisateur 'root' en mode console. Vous devrez par la suite vous connecter avec un utilisateur puis utiliser la commande 'su -'. La meme restriction sera effective des que vous aurez active (c'est a dire redemarre le serveur) 'PermitRootLogin no' dans le fichier /etc/ssh/sshd_config. Pensez a noter le fingerprint de votre demon SSH. Modifiez /etc/lilo.conf de facon a obtenir ces lignes : password=motdepasse delay=100 default=Linux image=/vmlinuz label=Linux read-only restricted Donnez les droits convenables au fichier 'chmod 640 /etc/lilo.conf' puis activez votre nouveau fichier de configuration avec 'lilo'. 3.4. Recompilation du noyau pour le support firewall ipchains NDR : Le noyau que nous configurons ici ne doit pas etre considere comme le noyau final. Une documentation abondante est presente sur Internet de meme que dans le repertoire Documentation figurant dans les sources du noyau. NOTE : Si vous utilisez le package de la version 2.2.20 comme presentee dans cette documentation, prenez garde a ne pas activer la fonctionnalite 'kernel loader' pour eviter la faille 'ptrace' ou pensez a patcher, securiser votre systeme. Lancez dselect et ajoutez le package relatif aux sources du noyau que vous desirez installer. L'installation suivante, relative au noyau 2.2.20 devrait cependant etre identique quelque soit le noyau 2.2.x dont vous installez les sources. cd /usr/src tar xjvf kernel-source-2.2.20.tar.bz2 mv kernel-source-2.2.20 kernel-source-2.2.20-fw ln -s kernel-source-2.2.20-fw linux && cd linux Au cas ou vous ne suivriez pas cette doc... : make clean && make mrproper Configurez le noyau : sed 's/^EXTRAVERSION\ =$/EXTRAVERSION\ =\ -fw/' Makefile > .fw cat .fw > Makefile && rm -f .fw make menuconfig Ajoutez les options suivantes au noyau installe : 'Networking Options -> Network firewalls' 'Networking Options -> Ip : Firewalling (NEW)' Dans 'Network Device Support', verifiez que votre pilote de carte reseau est selectionne. Quittez et sauvez la configuration Compilez le noyau : make dep && make modules && make bzImage Installez le nouveau noyau : cp arch/i386/boot/bzImage /boot/vmlinuz-2.2.20-fw cp System.map /boot/System.map-2.2.20-fw cd /boot/ ln -s vmlinuz-2.2.20-fw linux ln -s vmlinuz-2.2.20-compact linux_fst Installez les modules : cd /usr/src/linux && make modules_install Editer le fichier /etc/lilo.conf pour obtenir : default=linux22 image=/boot/linux label=linux22 read-only restricted image=/boot/linux_fst label=backup22 read-only Lancez la commande 'lilo' pour mettre ajour le systeme. Rebootez le systeme. Si tout c'est bien passe, sauvegardez la configuration : cp /usr/src/linux/.config /boot/config-2.2.20-fw 3.5. Configuration du firewall Ipchains Man : ipchains, sysctl, sysctl.conf Creez le repertoire pour le stockage des scripts du firewall : mkdir -p /home/system/scripts/fw chown -R root:adm /home/system chmod 4750 /home/system Creez les scripts d'activation/desactivation du firewall (voir ANNEXE 1 - Parametrage du firewall Ipchains) : /home/system/scripts/fw/rules_down_ipchains.sh /home/system/scripts/fw/rules_up_ipchains.sh Mettez les droits en place : 'chmod 750 /home/system/scripts/fw/*' Creez le script /etc/init.d/init_ipchains.sh (voir ANNEXE 1 - Parametrage du firewall Ipchains). Donnez les droits au script : 'chmod 750 /etc/init.d/init_ipchains.sh' Ajoutez le script pour le demarrage du system : update-rc.d init_ipchains.sh defaults Activez le firewall : /etc/init.d/init_ipchains.sh start 3.6. Mise a jour securite du systeme (super-utilisateur). Vous pouvez maintenant brancher la machine sur le reseau. Ajoutez le fichier /etc/apt/apt.conf contenant : DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt || true";}; Acquire::http::Proxy "http://@IP_PROXY:8080/"; Commentez toutes les lignes dans /etc/apt/sources.list Ajoutez dans /etc/apt/sources.list : #deb http://http.us.debian.org/debian stable main contrib non-free #deb-src http://http.us.debian.org/debian stable main contrib non-free #deb http://non-us.debian.org/debian-non-US stable/non-US main non-free #deb-src http://non-us.debian.org/debian-non-US stable/non-US main non-free deb http://ftp.fr.debian.org/debian/ stable main contrib non-free deb-src http://ftp.fr.debian.org/debian/ stable main contrib non-free deb http://ftp.fr.debian.org/debian-non-US/ stable/non-US main non-free deb-src http://ftp.fr.debian.org/debian-non-US/ stable/non-US main non-free deb http://security.debian.org/ stable/updates main contrib non-free apt-get update apt-get dist-upgrade ================================================================================ 4. SECURISATION MODEREE ======================= 4.1. Notes sur le boot du systeme et sur le noyau ------------------------------------------------- NDR : Il est futile d'indiquer qu'un individu avec un acces physique au serveur implique que le serveur est compromis. Un seul noyau doit etre chargeable lors de l'invite par defaut. Tout passage de parametre au noyau lors du boot doit etre interdit. Le chargement dynamique de modules devrait etre interdit. => Dans le cas ou cela est impossible, appliquez un patch permettant de bloquer le chargement des modules apres le boot. Il peut egalement etre interessant de modifier la sequence d'amorcage du BIOS de facon a debuter par le chargement du MBR du disque dur. 4.2. Securisation du systeme de fichiers ---------------------------------------- ATTENTION - ATTENTION - ATTENTION : Pour ces modifications, je vous reccomande d'avoir un disque bootable (le CD d'installation Debian fait bien sur l'affaire) avec un systeme de fichier root sous la main - Systeme de fichier contenant les binaires appropries bien entendu. NDR : Apres ces modifications, n'oubliez pas que certaines partitions sont montees en lecture seule. Vous pouvez remonter une partition en lecture/ ecriture avec (par exemple) : mount -o remount,rw /local Editez le fichier /etc/fstab de facon a monter les partitions presentees en 1.5 selon le principe suivante : /dev/sda1 / ext2 errors=remount-ro 0 1 /dev/sda2 none swap sw 0 0 proc /proc proc defaults 0 0 /dev/fd0 /floppy auto noauto,nosuid,nodev 0 0 /dev/cdrom /cdrom iso9660 ro,noauto,nosuid,nodev 0 0 /dev/sda3 /boot ext2 ro,noexec,nosuid,nodev 0 2 /dev/sda5 /root ext2 defaults 0 2 /dev/sda6 /var ext2 nodev 0 2 /dev/sda7 /var/log ext2 noexec,nosuid,nodev,sync 0 2 /dev/sda8 /tmp ext2 noexec,nosuid,nodev 0 2 /dev/sda9 /usr ext2 ro,nodev 0 2 /dev/sda10 /home ext2 nodev 0 2 /dev/sda11 /local ext2 ro,noexec,nosuid,nodev 0 2 Si vous avez procede a la preparation d'une partition pour un serveur web : /dev/sda11 /var/www ext2 rw,nosuid,nodev 0 2 /dev/sda12 /local ext2 ro,noexec,nosuid,nodev 0 2 Si vous avez procede a la preparation d'une partition pour un serveur was : /dev/sda11 /var/www ext2 rw,nosuid,nodev 0 2 /dev/sda12 /var/was ext2 rw,noexec,nosuid,nodev 0 2 /dev/sda13 /local ext2 ro,noexec,nosuid,nodev 0 2 Pour prendre en compte ces modifications, rebootez le systeme ou remontez les partitions. Man : fstab, mount. 4.3. Securisation des comptes ----------------------------- La securisation des comptes est realisee par la fonction sec_accounts() du script de l'annexe 15 - Script debian-secinst.sh. Cette fonction est chargee de supprimer/desactiver les utilisateurs et groupes inutiles, de recuperer sous l'identite root les fichiers non affectes et de mettre en place une politique succincte de gestion de comptes. Notez que tous les comptes utilisateurs doivent faire partie de groupes appropries. Nous nous basons dans ce documents sur deux groupes existant, mais cette declinaison est arbitraire. Le groupe adm est reserve aux administateurs (voir 4.4. Les administrateurs n'ont pas besoin de passer root) et le groupe users est reserve aux utilisateurs non administrateurs. 4.4. Les administrateurs n'ont pas besoin de passer root -------------------------------------------------------- Installation de sudo : mount -o remount,rw /usr/ dselect => Installez le package sudo mount -o remount,ro /usr/ Ajoutez les utilisateurs ADMINISTRATEURS requis {UserName} dans le groupe adm: usermod -g {UserName} -G adm,users {UserName} Configuration de sudo : Lancez visudo et editez le fichier de facon a ajouter (raccourcis vi) : # Cmnd alias specification Cmnd_Alias REBOOT=/sbin/reboot %adm ALL=NOPASSWD:REBOOT MAN : usermod, sudoers visudo, sudo 4.5. Synchronisation horaire avec un serveur NTP ------------------------------------------------ Installez les packages requis. mount -o remount,rw /usr dselect et installation des packages ntp, ntpdate, ntp-simple et ntp-doc : * Ne pas specifier de serveur NTP * Overwrite ntp.conf : Yes. mount -o remount,ro /usr Configurez le client ntp et le nouveau flux au niveau du firewall : Ajoutez l'adresse IP de votre serveur NTP dans /etc/default/ntp-servers Ajoutez l'adresse IP de votre serveur dans le fichier de configuration du firewall. /etc/init.d/init_ipchains.sh restart Stoppez le demon NTP et executez la synchronisation /etc/init.d/ntp stop update-rc.d -f ntp remove /etc/init.d/ntpdate start Ajoutez un appel au client ntp toutes les 6 heures dans /etc/crontab : # Met a jour la date et l'heure du systeme grace au serveur NTP 0 */6 * * * root /etc/init.d/ntpdate start > /dev/null MAN : ntpdate 4.6. Generation automatisee d'un rapport systeme ------------------------------------------------ Le script present en annexe 'ANNEXE 2 - Generation automatisee de rapport systeme' peut etre execute par la crontab a intervalles periodique. Il genere un rapport systeme succinct qui peut etre envoye par mail aux administrateurs ou stocke dans un repertoire. NDR : Attention a respecter l'indentation ! NDR : Je vous conseille de verifier le script de facon a ce qu'il n'execute que les commandes que vous desirez. Ainsi, le script recupere par exemple les fichiers de logs presentes en '4.8. Installation et premiers pas avec Modular-Syslog'. Installation du script (nous utilisons le script present en annexe qui envoie le rapport par mail) : mkdir /home/system/scripts/reports/ chmod 750 /home/system/scripts/reports/system_report.sh Configuration de /etc/crontab pour lancer le script tous les jours a 09H00 AM: # Genere le rapport system 0 9 * * * root /home/system/scripts/reports/system_report.sh chmod 640 /etc/crontab 4.7. Installation et premiers pas avec Modular-Syslog ----------------------------------------------------- Modular-Syslog est disponible a : http://sourceforge.net/projects/msyslog/ Compilation : cd /home/system/applis /usr/bin/md5sum /home/system/download/msyslog-v1_08e-src_tar.gz c3700571c675d8896c643c276f5e2dad /home/system/download/msyslog-v1_08e\ -src_tar.gz tar zxvf /home/system/download/msyslog-v1_08e-src_tar.gz find ./msyslog-v1.08e/ -type f \( -perm -004000 -o -perm -002000 \) -exec \ ls -la {} \; chown -R root:root msyslog-v1.08e/ cd msyslog-v1.08e/ ./configure make NDR : Vous pouvez tres bien decider, si vous en comprennez l'interet de modifier le chemin du fichier de configuration par defaut avant de compiler le demon modular-syslog. Installation : mount -o remount,rw /usr/ make install On sauvegarde l'ancien syslogd et son fichier de configuration : cp /etc/syslog.conf /etc/syslog.conf.orig2 cp /sbin/syslogd /sbin/syslogd.orig On remplace l'ancien syslogd par le notre : mv /usr/local/sbin/syslogd /sbin/syslogd chown root:root /sbin/syslogd && chmod 755 /sbin/syslogd On met a jour quelques permissions meritant de l'etre : cd /usr/share/man/man8 find . -type f -perm 640 -exec chmod 644 {} \; mount -o remount,ro /usr/ On modifie le script d'initialisation du demon /etc/init.d/sysklogd : SYSLOGD="-i linux -i unix" On stoppe le demon klogd dont nous nous passerons desormais : /etc/init.d/klogd stop On le supprime des runlevels correspondants : update-rc.d -f klogd remove On redemmare le nouveau demon syslogd : /etc/init.d/sysklogd start Correction du script syslogd-listfiles : Ce script permet de lister les fichiers de logs pour permettre leur rotation. Il se sert pour cela du fichier de configuration /etc/syslog.conf. Or, ce fichier de configuration peut desormais contenir des lignes au format modular-syslog, ce qui empeche une rotation correcte. Le patch est disponible en 'ANNEXE 3 - syslogd-listfiles.msyslog.patch' mount -o remount,rw /usr/ cp /usr/sbin/syslogd-listfiles /usr/sbin/syslogd-listfiles.orig cd /usr/sbin patch -l -p0 < /root/tmp/syslogd-listfiles.msyslog.patch mount -o remount,ro /usr/ MAN : syslogd, syslog.conf, im_* , om_* , syslogd-listfiles Premiers pas avec Modular-Syslog : NDR : Si vous ajoutez des fichiers de log dans la configuration, prenez garde a faire un touch du fichier destination dans le repertoire concerne. Nous ajoutons deux regles qui permettent de filtrer les messages envoyes par le firewall ipchains a /etc/syslog.conf ainsi que deux regles permettant : l'enregistrement des evenements lies aux demande de connexion et les evenements libsafe. # # Filtres Modular-Syslog # # Filtres sur les evenements du firewall kern.* %regex -m "Packet log.*LogDrop" %classic \ /var/log/fw_deny.log kern.* %regex -m "Packet log.*LogAcc" %classic \ /var/log/fw_accept.log # Filtres sur divers evenements securite auth,authpriv.* %regex -m "(sshd.*password)|(PAM.*ssh)|(PAM.*su)\ |(PAM.*failure)" %classic /var/log/securite.log auth,authpriv.* %regex -m "libsafe.so" %classic /var/log/securite.log auth.* %regex -m "not receive identification" %classic\ /var/log/securite.log kern.* %regex -m "Security" %classic /var/log/securite.log kern.* %regex -m "device.*promiscuous" %classic\ /var/log/securite.log Nous mettons en place les fichiers destination et redemarrons le serveur syslog : touch /var/log/{securite,fw_{deny,accept}}.log chown root:adm /var/log/{securite,fw_{deny,accept}}.log Et si votre umask n'est pas conforme a celui de cette doc : chmod 640 /var/log/{securite,fw_{deny,accept}}.log /etc/init.d/sysklogd restart Prise en compte des nouveaux fichiers pour la rotation des logs : Nous creons (s'il n'existe pas) un repertoire qui nous servira a stocker nos scripts appelles par la crontab et dont l'objectif est d'assurer la stabilite du systeme : mkdir /home/system/scripts/crond Nous editons un fichier /home/system/scripts/crond/sysklogd (a l'image de celui present dans /etc/cron.daily) : #! /bin/sh test -x /usr/sbin/syslogd-listfiles || exit 0 test -x /sbin/syslogd || exit 0 test -d /usr/share/doc/sysklogd || exit 0 set -e cd /var/log for SECU in `syslogd-listfiles -a | grep -E "fw|secu"` do if [ -s $SECU ] ; then savelog -g adm -m 640 -u root -c 7 $SECU > /dev/null fi done /etc/init.d/sysklogd reload-or-restart chmod 750 /home/system/scripts/crond/sysklogd Nous editons /etc/crontab pour ajouter ce script : # Tourne les logs securite chaque jour 5 0 * * * root /home/system/scripts/crond/sysklogd 4.8. Verification des empreintes des packages a installer --------------------------------------------------------- Consultez d'abord : 'I. INFORMATIONS SUR LA GESTION DE PACKAGES DEBIAN - Mise a jour du systeme avec apt' [ A completer ] mount -o remount,rw /usr dselect => installation de 'debsums' mount -o remount,ro /usr mkdir /home/system/debsums cd /home/system/debsums Obtenez la liste des packages ne possedant pas de signature : /usr/bin/debsums -l > nosig.txt NDR : Si vous voulez verifier les empreintes des fichiers d'un package : debsums -s package_name. MAN : debsums 4.9. Systeme de fichiers ext3 avec un noyau 2.4 : de ext2 a ext3 ----------------------------------------------------------------- Pour modifier le systeme de fichier d'une partition de facon a passer de ext2 a ext3, sans perte de donnees et sans reboot (si votre noyau est deja compile avec ce support bien sur), vous pouvez suivre la procedure suivante. Commencons par recompiler le noyau en ajoutant le support ext3 : * Ajoutez 'File systems -> Ext3 journalling file system support'. * Recompilez et installez le nouveau noyau. * Modifiez /etc/lilo.conf * Rebootez. Apres le reboot, n'oubliez pas de mettre a jour la configuration lilo et de sauvegarder la configuration du noyau. Prenons comme exemple la partition /backup du type (precise dans /etc/fstab) suivant : /dev/hda13 /backup ext2 ro,noexec,nosuid,nodev,sync 0 2 La procedure a suivre est la suivante : umount /dev/hda13 tune2fs -j /dev/hda13 Editez /etc/fstab pour remplacer l'ancienne ligne /dev/hda13 par : /dev/hda13 /backup auto ro,noexec,nosuid,nodev,sync 0 2 mount /dev/hda13 4.10. Backup du systeme sur une partition specifique ---------------------------------------------------- Nous presentons ici un moyen de sauvegarde des donnees systeme sur une partition reservee a cet usage. Le backup du systeme est realise par un script 'fait maison' permettant une sauvegarde complete ou incrementale des fichiers/repertoires a sauvegarder et autorisant le backup chiffre (avec openssl) des repertoires/fichiers parametres. Ne sont pas presentes ici : * La restauration du systeme a partir des donnees sauvegardees. Referez vous a la partie '4.12. Preparation d'une restauration du systeme en cas d'incident'. * L'acces a cette partition depuis un serveur distant pour un stockage de backup specialise. Vous pouvez vous referer a 'VII. INSTALLATION D'UN SERVEUR SAMBA POUR UNE GESTION DE BACKUP' pour un acces Netbios via Samba. Vous devez avoir une partition /dev/sda13 dans /etc/fstab du type : /dev/sda13 /backup ext2 ro,noexec,nosuid,nodev,sync 0 2 mkdir /home/system/scripts/backup Et installez le script /home/system/scripts/backup/system_backup.sh presente en 'ANNEXE 8 - Script de backup'. chmod 750 /home/system/scripts/backup/system_backup.sh Editez le script pour configurer les fichiers ou repertoires que vous desirez sauvegarder en modifiant la variable 'BACKUP_FROM' : Creez un fichier '/home/system/scripts/backup/include_but_ciphered' qui contiendra les fichiers ou repertoires que vous voulez ajouter dans l'archive chiffree. Ce fichier doit exister mais peut etre vide si vous ne voulez pas utiliser cette fonctionnalite : NDR : # Le backup chiffre est toujours en mode 'full'. # Le script de backup effectuant un 'cd /', configurez ce fichier en supprimant le premier '/' devant le chemin vers votre fichier/repertoire. J'ai personnellement renseigne ce fichier de la maniere suivante : /home/system/scripts/backup/include_but_ciphered : etc/gshadow etc/gshadow- etc/passwd etc/passwd- etc/samba/smbpasswd etc/shadow etc/shadow- var/backups NDR : Est il trivial d'indiquer que : # vous devriez noter le mot de passe de chiffrement que vous utilisez dans le script ? # le script ne doit etre accessible que par root ? Creez un fichier '/home/system/scripts/backup/exclude' qui contiendra les fichiers ou repertoires que vous ne desirez pas sauvegarder par rapport aux arborescences que vous aurez definies dans la variable 'BACKUP_FROM'. NDR : # Ce fichier doit exister mais peut etre vide si vous ne desirez rien exclure. # Le script de backup effectuant un 'cd /', configurez ce fichier en supprimant le premier '/' devant le chemin vers votre fichier/repertoire. J'ai personnellement renseigne ce fichier de la maniere suivante : usr/src var/lock var/run var/tmp Creez un fichier '/home/system/scripts/backup/cpioed' qui contiendra les repertoires dont vous souhaitez conserver les localisations et permissions grace a une archive cpio. # Ce fichier doit exister mais peut etre vide si vous ne desirez rien exclure. # Le script de backup effectuant un 'cd /', configurez ce fichier en supprimant le premier '/' devant le chemin vers votre fichier/repertoire. # SEULS LES REPERTOIRES INDIQUES SONT SAUVEGARDES ! J'ai personnellement renseigne ce fichier de la maniere suivante (je ne tiens pas a sauvegarder /usr/src) : backup cdrom floppy initrd local lost+found mnt opt proc tmp var/lock var/run var/tmp Lancez le script pour le premier backup : /home/system/scripts/backup/system_backup.sh Backup: Full backup Backup: Remounting rw /backup Backup: Backuping /backup/full_060503-144947/bin_060503-144947.tar.gz Backup: Hash : c8f1b2863146f03ef686fa04d1fd0da5\ /backup/full_060503-144947/bin_060503-144947.tar.gz Backup: Backuping /backup/full_060503-144947/boot_060503-144948.tar.gz Backup: Hash : 4bfd31759e05e14ed65b63dee26feb8d\ /backup/full_060503-144947/boot_060503-144948.tar.gz Backup: Backuping /backup/full_060503-144947/dev_060503-144950.tar.gz Backup: Hash : e5fd2dd7df68aba2f176faed07f44cd5\ /backup/full_060503-144947/dev_060503-144950.tar.gz Backup: Backuping /backup/full_060503-144947/etc_060503-144951.tar.gz Backup: Hash : 348d9dd3f309c23703a3c24c83dda609\ /backup/full_060503-144947/etc_060503-144951.tar.gz Backup: Backuping /backup/full_060503-144947/home_060503-144952.tar.gz Backup: Hash : 5495f04c230f7feaecb893f879297753\ /backup/full_060503-144947/home_060503-144952.tar.gz Backup: Backuping /backup/full_060503-144947/lib_060503-144954.tar.gz Backup: Hash : dce418f7fd12bd9621f5429141eaddbb\ /backup/full_060503-144947/lib_060503-144954.tar.gz Backup: Backuping /backup/full_060503-144947/root_060503-144957.tar.gz Backup: Hash : 012a1be6fb9686c6ca49c3edd8a94c38\ /backup/full_060503-144947/root_060503-144957.tar.gz Backup: Backuping /backup/full_060503-144947/sbin_060503-144958.tar.gz Backup: Hash : 0bf5b00b86826e195a9de88ef8d68a9f\ /backup/full_060503-144947/sbin_060503-144958.tar.gz Backup: Backuping /backup/full_060503-144947/usr_060503-144959.tar.gz Backup: Hash : f3ec8f659a17daa0cb318d0f687d632c\ /backup/full_060503-144947/usr_060503-144959.tar.gz Backup: Backuping /backup/full_060503-144947/var_060503-145357.tar.gz Backup: Hash : e200713da542da4c1bb0e8910b6aa76f\ /backup/full_060503-144947/var_060503-145357.tar.gz Backup: Backuping excluded files into a cpio archive Backup: Hash : a323d013c942bf30a6e0c76f5ae2ed2b\ /backup/full_060503-144947/excluded.cpio Backup: Backuping /home/system/scripts/backup/include_but_ciphered\ files Backup: Ciphering /backup/full_060503-144947/\ ciphered_060503-145357.tar.gz Backup: Removing /backup/full_060503-144947/\ ciphered_060503-145357.tar.gz Backup: Hash : 228dc72dd72ab99b2e58e3d083e72e5f\ /backup/full_060503-144947/\ ciphered_060503-145357.tar.gz.des3 Backup: Syncing disks Backup: Remounting ro /backup ll -R /backup/ /backup/: total 28 drwxr-x--- 2 root root 4096 May 6 14:54 full_060503-144947 -rw-r----- 1 root root 94 May 6 14:49 full_060503-144947.log -rw-r----- 1 root root 1023 May 6 14:54 full_060503-144947.md5 /backup/full_060503-144947: total 335096 -rw-r----- 1 root root 1016158 May 6 14:49 bin_060503-144947.tar.gz -rw-r----- 1 root root 4390293 May 6 14:49 boot_060503-144948.tar.gz -rw-r----- 1 root root 592280 May 6 14:54 ciphered_060503-145357\ .tar.gz.des3 -rw-r----- 1 root root 57067 May 6 14:49 dev_060503-144950.tar.gz -rw-r----- 1 root root 478588 May 6 14:49 etc_060503-144951.tar.gz -rw-r----- 1 root root 65024 May 6 14:54 excluded.cpio -rw-r----- 1 root root 1152206 May 6 14:49 home_060503-144952.tar.gz -rw-r----- 1 root root 2298150 May 6 14:49 lib_060503-144954.tar.gz -rw-r----- 1 root root 418679 May 6 14:49 root_060503-144957.tar.gz -rw-r----- 1 root root 1203847 May 6 14:49 sbin_060503-144958.tar.gz -rw-r----- 1 root root 285132220 May 6 14:53 usr_060503-144959.tar.gz -rw-r----- 1 root root 45928823 May 6 14:54 var_060503-145357.tar.gz du -ch /backup/ 328M /backup/full_060503-144947 328M /backup 328M total Vous avez desormais dans /backup : # Une sauvegarde 'full' des fichiers ou repertoires que vous avez specifie. # Un fichier de log contenant les erreurs rencontrees - vide si aucune erreur. # Un fichier d'empreinte md5 des archives creees pour chaque fichier/repertoire specifie. Dans /home/system/scripts/backup/.last_done (ou dans le fichier que vous avez vous meme specifie), vous avez la date de ce dernier backup. Note : Les 328M de sauvegarde full realisee precedemment l'ont ete en environ ~5 minutes sur un PIII 700 avec 160Mo de RAM. Vous pouvez desormais realiser un backup incremental des donnees sauvegardees precedemment. En appelant a nouveau le script : Backup: Incremental backup beginning : Tue May 6 14:49:47 CEST 2003 Backup: Remounting rw /backup Backup: Backuping /backup/incr_060503-152213/bin_060503-152213.tar.gz\ (incremental) Backup: Hash : 081a6113dd90eb892d01548cd7179b62\ /backup/incr_060503-152213/bin_060503-152213.tar.gz Backup: Backuping /backup/incr_060503-152213/\ boot_060503-152213.tar.gz (incremental) Backup: Hash : ae60b98501c0978f362e2f7826b671a5\ /backup/incr_060503-152213/boot_060503-152213.tar.gz Backup: Backuping /backup/incr_060503-152213/\ dev_060503-152213.tar.gz (incremental) Backup: Hash : 3dcc660a2a296b8356ffa29d4c52d8d1\ /backup/incr_060503-152213/dev_060503-152213.tar.gz Backup: Backuping /backup/incr_060503-152213/\ etc_060503-152214.tar.gz (incremental) Backup: Hash : b9649a2474ec6f8858841fa4eb3f1e5b\ /backup/incr_060503-152213/etc_060503-152214.tar.gz Backup: Backuping /backup/incr_060503-152213/\ home_060503-152214.tar.gz (incremental) Backup: Hash : b91a69fceb9d176050d69fd300850d26\ /backup/incr_060503-152213/home_060503-152214.tar.gz Backup: Backuping /backup/incr_060503-152213/\ lib_060503-152214.tar.gz (incremental) Backup: Hash : 718f76f85543429bbd32df86ce23e5b7\ /backup/incr_060503-152213/lib_060503-152214.tar.gz Backup: Backuping /backup/incr_060503-152213/\ root_060503-152214.tar.gz (incremental) Backup: Hash : d357d47b59e75595087ab7d8cba58fdb\ /backup/incr_060503-152213/root_060503-152214.tar.gz Backup: Backuping /backup/incr_060503-152213/\ sbin_060503-152214.tar.gz (incremental) Backup: Hash : 1688044981053d9e8e0d333509c54149\ /backup/incr_060503-152213/sbin_060503-152214.tar.gz Backup: Backuping /backup/incr_060503-152213/\ usr_060503-152214.tar.gz (incremental) Backup: Hash : 2f95fb3bb6b8d9a0ab247bde96611baf\ /backup/incr_060503-152213/usr_060503-152214.tar.gz Backup: Backuping /backup/incr_060503-152213/\ var_060503-152223.tar.gz (incremental) Backup: Hash : 668d117769137b003cf427394d65b1a3\ /backup/incr_060503-152213/var_060503-152223.tar.gz Backup: Backuping /home/system/scripts/backup/\ include_but_ciphered files Backup: Ciphering /backup/incr_060503-152213/\ ciphered_060503-152223.tar.gz Backup: Removing /backup/incr_060503-152213/\ ciphered_060503-152223.tar.gz Backup: Hash : 9d11b72e4bfa25cbf81b4295717133cf /backup/\ incr_060503-152213/ciphered_060503-152223.tar.gz.des3 Backup: Syncing disks Backup: Remounting ro /backup ll -R /backup/ /backup/: total 36 drwxr-x--- 2 root root 4096 May 6 15:22 incr_060503-152213 -rw-r----- 1 root root 0 May 6 15:22 incr_060503-152213.log -rw-r----- 1 root root 949 May 6 15:22 incr_060503-152213.md5 /backup/incr_060503-152213: total 656 -rw-r----- 1 root root 166 May 6 15:22 bin_060503-152213.tar.gz -rw-r----- 1 root root 196 May 6 15:22 boot_060503-152213.tar.gz -rw-r----- 1 root root 592280 May 6 15:22 \ ciphered_060503-152223.tar.gz.des3 -rw-r----- 1 root root 352 May 6 15:22 dev_060503-152213.tar.gz -rw-r----- 1 root root 2179 May 6 15:22 etc_060503-152214.tar.gz -rw-r----- 1 root root 1344 May 6 15:22 home_060503-152214.tar.gz -rw-r----- 1 root root 543 May 6 15:22 lib_060503-152214.tar.gz -rw-r----- 1 root root 275 May 6 15:22 root_060503-152214.tar.gz -rw-r----- 1 root root 167 May 6 15:22 sbin_060503-152214.tar.gz -rw-r----- 1 root root 29773 May 6 15:22 usr_060503-152214.tar.gz -rw-r----- 1 root root 7973 May 6 15:22 var_060503-152223.tar.gz Un simple 'tar ztvf {archive}.tar.gz | grep -v " 0 "' vous donnera la liste des fichiers qui ont ete modifies et pris en compte lors de cette sauvegarde incrementale. Vous pouvez appeler le script avec l'option '-f' : cela le forcera a suivre la procedure sauvegarde 'full' en ne tenant pas compte du contenu du fichier '.last_done'. Nous pouvons maintenant editer notre fichier /etc/crontab pour appeller notre script de backup : # Backup Full du systeme toutes les semaines a 00H30 30 0 * * 7 root /home/system/scripts/backup/system_backup.sh -f # Backup incremental du systeme toutes les 6 heures a xx:15 15 */6 * * * root /home/system/scripts/backup/system_backup.sh Nous modifions egalement /etc/syslog.conf pour que les messages de backup soient consignes dans notre fichier de log securite : syslog.notice %regex -m "Backup" %classic /var/log/securite.log Puis : /etc/init.d/sysklogd restart MAN : tar, gzip 4.11. Preparation d'une restauration du systeme en cas d'incident ----------------------------------------------------------------- Notre objectif est de preparer un moyen de restauration du systeme simple a mettre en place et rapide a mettre en oeuvre en cas d'incident. Nous allons pour ce faire creer une 'image' de notre systeme que nous graverons sur un un CD. Nous pourrons par la suite employer ce CD d'une part comme secours de boot sur notre dernier noyau stable (utile pour des tests sauvages de reboot sur un nouveau noyau sans ecran par exemple ;) et d'autre part comme support de sauvegarde nous permettant de restaurer le systeme. NDR : # La creation de cette image necessite l'installation du package mkisofs (n'installez pas le package cdrecord sauf si vous disposez d'un graveur sur la station) et l'ajout du support 'Block devices -> Loopback device support' au noyau. # Vous devriez dedier une station a cet usage et non installer ces fonctionnalites sur votre serveur de production. # L'espace disque requis est d'environ 1Go (~650Mo environ, mais il vaut mieux voir large :>). Nous allons tout d'abord creer un systeme de fichier root contenant les binaires necessaires a l'execution du CD puis ajouter nos archives dans un repertoire et pour finir utiliser un script qui executera la restauration du systeme. Pour ce faire, nous allons nous baser sur les fichiers fournis dans le jeu de CD Debian. Recuperation des fichiers necessaires au boot et d'un systeme de fichier root minimal : NDR : Je vais par la suite utiliser la partition /local comme partition de travail. Cette partition est, si vous avez suivi cette documentation, une partition Ext2 inutilisee et occupant l'espace disque restant apres installation du systeme. Inserez le CD numero 1 de votre jeu Debian et montez le cdrom (/cdrom dans notre exemple). mount -o remount,rw /local mkdir /local/Debian cp /cdrom/isolinux/isolinux* /local/Debian cp /cdrom/isolinux/idepci.bin /local/Debian mkdir /local/Debian/kernel cp /cdrom/install/linpci /local/Debian/kernel/ Ajoutez votre noyau courant : cp /boot/vmlinuz-2.4.26 /local/Debian/kernelbk cp /boot/System.map-2.4.26 /local/Debian/System.map cp /boot/config-2.4.26 /local/Debian/config-2.4.26 Editez le fichier isolinux.cfg : TIMEOUT 10 PROMPT 1 DISPLAY isolinux.txt DEFAULT kernelbk LABEL kernelbk kernel /kernelbk append root=/dev/hda1 hdc=ide-scsi LABEL restore kernel /kernel/linpci append root=/dev/ram ro initrd=idepci.bin ramdisk_size=16384 disksize=1.44 flavor=idepci Note : Verifiez que vous passez bien les parametres dont vous avez besoin. Editez le fichier isolinux.txt : Debian-Secinst v0.1.5 Boot CD Modification du systeme de fichier root original : Nous montons maintenant le systeme de fichier root original : cd /local cp Debian/idepci.bin . gunzip -S ".bin" idepci.bin mount -t ext2 idepci /mnt/ -o loop Modification de l'initialisation du CD pour executer notre script de restauration : cd /mnt/ Editez le fichier etc/inittab : # main setup program <::respawn:/sbin/udbootstrap >::respawn:-/restore.sh Clavier Francais et alias : cd /mnt/etc/ tar zxvf keymaps.tgz i386/azerty/fr-latin1.bmap echo "/sbin/loadkmap < /etc/i386/azerty/fr-latin1.bmap" > profile echo "alias l='ls'" >> profile echo "alias ll='l -l'" >> profile echo "alias la='ll -a'" >> profile echo "alias cp='cp -i'" >> profile echo "alias rm='rm -i'" >> profile echo "alias mv='mv -i'" >> profile Ajout du binaire cpio : cd /mnt cp /lib/libnsl.so.1 ./lib/ cp /bin/cpio ./bin/ Ajout d'un binaire tar compile en statique : Recuperez la version 1.13.25 sur l'un des miroirs de www.gnu.org. Compilez la en statique (avec le support uclibc par exemple) ou tout simplement avec : env LDFLAGS=-static ./configure make LDFLAGS=-static cd /mnt mv ./bin/tar ./bin/oldtar Copiez votre nouveau binaire dans /mnt/bin/tar chmod 755 /mnt/bin/tar Ajoutez le script de restauration present en 'ANNEXE 9 - Script de restauration' a la racine (/mnt/restore.sh) et donnez lui les droits 'chmod 755 /mnt/restore.sh'. Ajout des informations de backup : NDR : Ces informations sont evidemment celles du systeme a restaurer et non celles du systeme sur lequel vous creez ce CD ! mkdir /mnt/backup && chmod 755 /mnt/backup Editez le fichier '/mnt/backup/server_infos' (ou le fichier que vous avez configure dans le script de restauration) pour ajouter les informations que vous jugerez utile. Par exemple (/mnt/backup/server_infos) : This backup was created for {HOSTNAME} the 5 of May at 12:03. The server backuped is a Apache/Websphere server. Ajoutez les fichiers suivants dans '/mnt/backup' : * un fichier 'disk_name' contenant le nom de votre peripherique (ex : /dev/sda). * un fichier 'fdisk_script' contenant les instructions a suivre pour creer les partitions sur le disque (voir 'ANNEXE 10 - Exemple de script Fdisk') * un fichier 'fstab_file' du type de celui obtenu par la commande : grep -E "ext|swap" /etc/fstab | awk '{ print $1" "$2" "$3 }' => Les points de montage logique (fd0, cdrom et proc) ne sont pas obligatoires. => Seuls les supports ext2 et swap sont geres pour l'instant. * un fichier 'lilo_file' : copie de votre /etc/lilo.conf a restaurer => Attention au mot de passe en clair !!! * un fichier 'partitions_table' : resultat de la commande '/sbin/fdisk -l' Demontez le systeme de fichier et sauvegardez le : cd /local umount -d /mnt gzip -S ".bin" idepci mv idepci.bin Debian/ On ajoute maintenant le backup de notre systeme : Connectez vous au systeme a sauvegarder et lancez un backup full via le script de backup fourni en 'ANNEXE 8 - Script de backup' ou recuperez les archives de votre dernier backup full. Sur la station que vous utilisez pour creer le cdrom de backup, creez le repertoire '/local/Debian/archives' et copiez vos archives a sauvegarder a l'interieur (en respectant le nommage des archives en .tar.gz ou .cpio !). Une fois cette copie effectuee, creez un fichier /local/Debian/archives/infos.txt contenant les chemins vers les fichiers qui seront presents dans /mnt/archives/ (une fois le systeme de fichier monte par le script de restauration). Je vous reccomande de creer ce fichier a la main plutot que d'utiliser un find. J'ai personnellement renseigne ce fichier de la maniere suivante (Notez la presence de var_xxx avant usr_xxx) : /mnt/archives/infos.txt : /mnt/archives/bin_070503-153510.tar.gz /mnt/archives/boot_070503-153511.tar.gz /mnt/archives/dev_070503-153513.tar.gz /mnt/archives/etc_070503-153514.tar.gz /mnt/archives/home_070503-153515.tar.gz /mnt/archives/lib_070503-153517.tar.gz /mnt/archives/root_070503-153520.tar.gz /mnt/archives/sbin_070503-153520.tar.gz /mnt/archives/var_070503-153925.tar.gz /mnt/archives/usr_070503-153522.tar.gz /mnt/archives/deciphered_070503-153925.tar.gz /mnt/archives/excluded.cpio NDR : Je vous reccomande bien entendu de comparer le md5sum des fichiers generes par votre script de backup avec le md5sum des fichiers copies sur la station utilisee pour creer l'ISO et de renouveller cette operation pour les fichiers qui seront presents sur le CD grave. !!! Dans /local/Debian/archives, vous devez avoir un fichier protege par le mot de passe present dans votre script de backup. Deprotegez ce fichier avant de proceder a la creation de l'ISO !!! NDR : J'insiste sur le fait que ce CD de restauration contient une sauvegarde de fichiers critiques et doit etre protege physiquement !!! Preparation de l'ISO : Preparation de l'image iso a graver : cd /local mkisofs -o debian.iso -b isolinux.bin -c boot.cat -no-emul-boot\ -boot-load-size 4 -boot-info-table -l -r Debian/ Vous avez desormais une image 'debian.iso' que vous pouvez graver sur un CD. Ce CD sera bootable et vous donnera acces au menu suivant : Debian-Secinst v0.1.5 Restore script Enter alt-[F1-F4] to : have this menu, have a shell, look at the logs. To reboot : ctrl-alt-del ------- This backup was created for {HOSTNAME} the 25 of April at 16:52. The server backuped is a Apache/Websphere server. ------- Menu (1) : Show actual partition table. (2) : Show backuped partition table. (3) : Show backuped fstab file. ***** (4) : Write the backuped partition table to disk. (5) : Format disk using backuped fstab file. (6) : Mount disk partitions using backuped fstab file. (7) : Restore the system. (8) : Lilo the system using backuped lilo file. (9) : Syncing and unmounting restored system. ***** (A) : Automated script (4-5-6-7-8-9). What do you want ? NDR : La restauration du systeme pris comme en exemple en '4.11. Backup du systeme sur une partition specifique' m'a pris 15 minutes sur un PIII 500 avec 128 Mo de RAM. ================================================================================ 5. SECURISATION APPROFONDIE =========================== NDR : Vous devez savoir ce que vous faites dans les parties presentees ici. 5.1. Installation du patch OpenWall ----------------------------------- Le patch est telechargeable sur http://www.openwall.com/linux/ mount -o remount,rw /usr cd /usr/src cp -r kernel-2.2.20-fw kernel-2.2.20-fwow ln -s kernel-2.2.20-fwow linux-ow md5sum /home/system/download/linux-2_2_23-ow1_tar.gz cb51cfdd978eba987ca39d09960e17c3\ /home/system/download/linux-2_2_23-ow1_tar.gz cp /home/system/download/linux-2_2_23-ow1_tar.gz . tar zxvf linux-2_2_23-ow1_tar.gz cd linux-ow patch -p1 < ../linux-2.2.23-ow1/linux-2.2.23-ow1.diff Deux fichiers ne passent pas avec notre noyau 2.2.20 : find . -name *.rej ./fs/fat/inode.c.rej ./fs/select.c.rej => Mais les modifications manuelles sont triviales. On prepare la compilation du nouveau noyau : sed 's/^EXTRAVERSION\ =\ -fw$/EXTRAVERSION\ =\ -fw-ow/' Makefile > .fwow cat .fwow > Makefile && rm -f .fwow Si vous lancez make menuconfig a ce moment, vous trouverez un nouveau menu nomme 'Security options'. Deux options demeurent non-activees apres le passage du patch : * 'Restricted /proc' * 'Destroy shared memory segments not in use' => Vous pouvez activer 'Restricted /proc' mais il vous faudra une configuration supplementaire des comptes administrateurs avec un outil comme sudo pour eviter que les admins ne passent root a tout bout de champ: On compile : make dev && make modules && make bzImage On installe : mount -o remount,rw /boot cp arch/i386/boot/bzImage /boot/vmlinuz-2.2.20-fw-ow cp System.map /boot/System.map-2.2.20-fw-ow cd /boot/ ln -s vmlinuz-2.2.20-fw-ow linux-ow Installez les modules : cd - && make modules_install On modifie /etc/lilo.conf pour ajouter : image=/boot/linux-ow label=linux22ow read-only restricted Et on lance 'lilo'. On reboote et on passe sur le noyau avec OpenWall. Si tout s'est bien passe, vous pouvez changer le noyau charge par defaut par lilo en supprimant restricted de l'ancien noyau. 5.2. Installation du wrapper libsafe ------------------------------------ L'archive est disponible sur : http://www.research.avayalabs.com/project/libsafe/ cd /home/system/applis md5sum ../download/libsafe-2_0-16.tgz 6b7b6e6df84d4afb469ccc66d04fc24d ../download/libsafe-2_0-16.tgz tar zxvf ../download/libsafe-2_0-16.tgz find ./libsafe-2.0-16/ -type f \( -perm -004000 -o -perm -002000 \) -exec ls\ -la {} \; chown -R root:root libsafe-2.0-16/ chmod 750 libsafe-2.0-16/ cd libsafe-2.0-16/ make mount -o remount,rw /usr make install => Entrer Yes au prompt. mount -o remount,ro /usr Testez la librairie : export LD_PRELOAD=/home/system/applis/libsafe-2.0-16/src/libsafe.so Lancez les exploits dans /home/system/applis/libsafe-2.0-16/exploits. Installez la libsafe dans /etc/ld.so.preload si le fichier n'existe pas : ll /etc/ld.so.preload || echo /lib/libsafe.so.2 > /etc/ld.so.preload chmod 644 /etc/ld.so.preload Rebootez le systeme (?!). 5.3. Conserver une empreinte de verification d'integrite du systeme ------------------------------------------------------------------- Installez le package Debian : mount -o remount,rw /usr dselect => installation de 'aide' => La preconfiguration ne fonctionne pas, car elle tente d'executer un script dans /tmp => 'Initalize aide database ?' -> No mount -o remount,ro /usr Preparez le terrain : chmod 750 /etc/aide cp /etc/aide/aide.conf /etc/aide/aide.conf.orig chmod 640 /etc/aide/* mkdir /home/system/aide Editez /etc/aide/aide.conf et modifiez le de telle sorte que : [...] database=file:/home/system/aide/aide.db database_out=file:/home/system/aide/aide.db.new [...] # MD5 sum files - especially useful with debsums -g /var/lib/dpkg/info/([^\.]+).md5sums Databases [...] et a la fin du fichier [...] /etc ConfFiles /home/system Binlib !/home/system/aide [...] Initialisez la base de donnees : aide --init -V200 NDR : Est il trivial de vous reccomander de ne pas faire de modifications pendant l'initialisation ? Premiere sauvegarde de la base de donnees (la suite est donnee a titre d'exemple) : Inserez une disquette puis 'mke2fs /dev/fd0' mount /dev/fd0 /mnt cp /home/system/aide/aide.db.new /home/system/aide/aide.db /usr/bin/md5sum /home/system/aide/aide.db.new > /mnt/aide.db.md5 mv /home/system/aide/aide.db.new /mnt/aide.db cp /usr/bin/aide /mnt/ /usr/bin/md5sum /usr/bin/aide > /mnt/aide.md5 sed 's/file:\/home\/system\/aide\//file:.\//' /etc/aide/aide.conf >\ /mnt/aide.conf sync cd /mnt grep `/usr/bin/md5sum aide | cut -d ' ' -f 1` aide.md5 => Doit vous renvoyer le contenu du fichier aide.md5 grep `/usr/bin/md5sum aide.db | cut -d ' ' -f 1` aide.db.md5 => Doit vous renvoyer le contenu du fichier aide.db.md5 diff /etc/aide/aide.conf ./aide.conf 3,4c3,4 < database=file:/home/system/aide/aide.db < database_out=file:/home/system/aide/aide.db.new --- > database=file:./aide.db > database_out=file:./aide.db.new cd && umount /mnt Sortez la disquette et protegez la en ecriture. Verifier le systeme avec le support de sauvegarde : Inserez la disquette mount -o ro /dev/fd0 /mnt && cd /mnt ./aide -c ./aide.conf --check -V200 cd && umount /mnt Mise a jour de la base de donnee sauvegardee : aide --update -V200 cd /home/system/aide mv aide.db.new aide.db puis sauvegardez cette nouvelle base comme pour la creation. NDR : Ce qui precede est donne a titre d'exemple, Il serait plus approprie en cas de doute de booter le systeme sur un support amovible sur protege en ecriture et d'effectuer la verification d'integrite a partir de ce support. MAN : aide, aide.conf 5.4. Gestion des quotas ----------------------- NR : Vous devez commencer a connaitre le systeme donc je n'explique plus les details deja presentes plusieurs fois... Recompilation du noyau et installation du package : Compilez un nouveau noyau en activant 'Filesystems -> Quota support'. Rebootez, sauvez la configuration etc... Installez le package 'quota'. => 'Send daily reminders' -> No Configuration des partitions : Modifiez le fichier /etc/fstab pour ajouter les flags relatifs aux quotas : /dev/sda6 /var ext2 nodev,usrquota,grpquota 0 2 /dev/sda7 /var/log ext2 noexec,nosuid,nodev,sync,usrquota,grpquota 0 2 /dev/sda8 /tmp ext2 noexec,nosuid,nodev,usrquota,grpquota 0 2 [...] /dev/sda10 /home ext2 nodev,usrquota,grpquota 0 2 Ajoutez les fichiers de quotas : for i in `echo /var /var/log /tmp /home` ; do \ touch $i/quota.user && touch $i/quota.group ; done for i in `echo /var /var/log /tmp /home` ; do \ chmod 600 $i/quota.user && chmod 600 $i/quota.group ; done for i in `echo /var /var/log /tmp /home` ; do \ chown root:root $i/quota.user && chown root:root $i/quota.group ; done Remontez les partitions : for i in `echo /var /var/log /tmp /home` ; do \ mount -v -o remount $i ; done Suppression d'un service inutile pour nous : update-rc.d -f quotarpc remove Une premiere verification : /sbin/quotacheck -am Edition des quotas pour les groupes : Lancez 'edquota -g users' et editez les quotas pour le groupe users : /dev/sda8 0 20000 20000 0 5000 5000 /dev/sda10 17 100000 100000 9 10000 10000 Lancez 'edquota -g adm' et editez les quotas pour le groupe adm : /dev/sda8 0 5000 10000 0 10000 10000 /dev/sda10 17 200000 250000 9 50000 50000 NDR : Utilisez 'df -[h|i]' de facon a obtenir les informations sur l'ensemble du disque pour le choix des quotas precedents. Creez un utilisateur fictif qui servira de modele de mise en place de quotas : adduser --no-create-home --disabled-password --quiet --ingroup users quotauser Changing the user information for quotauser Enter the new value, or press return for the default Full Name []: Quota template user Room Number []: Work Phone []: Home Phone []: Other []: Disabled Is the information correct? [y/n] y passwd -l quotauser chsh -s /bin/false quotauser Mettez en place les quotas pour le modele d'utilisateur : Lancez 'edquota -u quotauser' et editez les quotas : /dev/sda8 0 2000 2000 0 500 500 /dev/sda10 0 10000 10000 0 1000 1000 Vous pouvez verifier les quotas mis en place avec : 'quota -vu quotauser' Pour un nouvel utilisateur {username}, vous pouvez associer ce modele de quotas avec 'edquota -p quotauser {username}'. Modifiez '/etc/adduser.conf' pour inclure ce modele dans la definition des quotas : QUOTAUSER="quotauser" Activation - Desactivation - Etat des quotas (quelques exemples) : Activation : /etc/init.d/quota start Desactivation : /etc/init.d/quota stop Etat (Active ou Desactive ? ) : quotaon -pa Statistiques : repquotas -ugva NDR : Le fichier d'initialisation des quotas au boot est place dans /etc/rcS.d et sera donc active a chaque redemarrage de la station. MAN : quotacheck, quotaon, quotaoff, quotastats, repquota, edquota, quota 5.5. Securisation PAM : Gestion des limites ------------------------------------------- Limites aux sessions : Verifiez avec 'grep pam_limits.so /etc/pam.d/ssh' que la librairie est activee (c'est le cas par defaut). Constatez avec 'grep pam_limits.so /etc/pam.d/login' que la librairie n'est pas activee par defaut : => Activez la en decommentant la ligne. => Faites de meme pour /etc/pam.d/su Editez /etc/security/limits.conf en ajoutant les parametres suivants (exemple pour le groupe administrateurs) : * hard core 0 * hard memlock 4096 * hard fsize 10000 * hard maxlogins 3 * hard cpu 10 @adm hard nofile 1024 @adm hard nproc 256 @adm hard maxlogins 5 @users hard nofile 256 @users hard nproc 32 NDR : Pour afficher les limites d'un utilisateurs, entrez 'ulimit -a' MAN : bash, ulimit 5.6. Disquette de secours avec Tomsrtbt --------------------------------------- La distribution tomsrtbt est telechargeable sur http://www.toms.net/rb/ cd /home/system/applis /usr/bin/md5sum /home/system/download/tomsrtbt-2.0.103.tar.gz d5ee50efb28986d564547d5da5de2483 \ /home/system/download/tomsrtbt-2.0.103.tar.gz tar zxvf /home/system/download/tomsrtbt-2.0.103.tar.gz cd tomsrtbt-2.0.103/ Inserez une disquette vierge. ./install.s Vous avez desormais une disquette de secours. En rebootant sur la disquette, deux choix vous sont proposes : * Resolution de l'ecran. * map du clavier. Et puis en fait, le mieux est que vous lisiez la FAQ... 5.7. Installation de Prelude-Lml pour une remontee de log securisee vers un serveur centralise ------------------------------------------------------------------------------ L'installation de Prelude-Lml est desormais presentee dans une autre documentation. Ne figurent ici que les aspects de configuration du moniteur Prelude qui sont specifique a l'installation de notre station securisee. La nouvelle documentation est intitulee "Centralized and secured remote logging solution with Prelude-Lml on Debian : How to securely install and set up the Prelude-Lml engine". Elle est disponible sur http://www.entreelibre.com/scastro/prelude/ . 5.7.1. Configuration initiale Nous abordons ici la remontee de certains des logs 'securite' generes par la configuration presentee dans cette documentation. NDR : Par la suite, nous emploierons le terme 'sonde' a la place de 'sensor'. NDR : Cette configuration est minimale, je vous conseille, de lire les documentations disponibles sur prelude et de proceder a votre propre parametrage. Il est par exemple possible, entre autres, de recompiler la libsafe pour qu'elle puisse se comporter en sonde prelude. Modifiez '/home/prelude/etc/prelude-sensors/sensors-default.conf' : > node-name = Test Secured Debian; > node-location = Salle serveur; Modifiez '/home/prelude/etc/prelude-lml/plugins.rules' : < Paxmod - .* PAX: .* > #Paxmod - .* PAX: .* Modifiez '/home/prelude/etc/prelude-lml/prelude-lml.conf' : Nos fichier a surveiller sont (voir '4.8. Installation et premiers pas avec Modular-Syslog') : /var/log/fw_deny.log, /var/log/fw_accept.log et /var/log/securite.log : < file = /var/log/auth.log < file = /var/log/messages > file = /var/log/securite.log > file = /var/log/fw_accept.log > file = /var/log/fw_deny.log Nous allons charger notre propre serie de regles : < ruleset=/home/prelude/etc/prelude-lml/ruleset/simple.rules; > #ruleset=/home/prelude/etc/prelude-lml/ruleset/simple.rules; > ruleset=/home/prelude/etc/prelude-lml/ruleset/debian-secinst.rules Creez '/home/prelude/etc/prelude-lml/ruleset/debian-secinst.rules' : # Customized prelude-lml rules file from debian-secinst v0.1.7 doc # Simon Castro # These one are from the simple.rules standard file. regex=PAM_unix\[([0-9]+)\][^(]+\(uid=([0-9]+)\) -> ([^ ]+);\ class.name=Authentication Failure; impact.completion = failed;\ impact.type = other; impact.severity = high;\ impact.description=Process $1 attempted to change UID from $2 to $3; regex=entered promiscuous mode; class.name=Promiscuous mode detected;\ impact.completion = succeeded; impact.type = other;\ impact.severity = medium; impact.description=A sniffer is probably\ running on this machine; # A few of rules only of this file will be used as we don't configure\ prelude-lml to look into auth.log include = ssh.rules; # These are personal rules... regex=left promiscuous mode; class.name=Promiscuous mode end detected;\ impact.completion = succeeded; impact.type = other;\ impact.severity = medium; impact.description=A sniffer is probably\ running on this machine; # Uncomment one of the two ruleset below #include = ipchains.rules; #include = netfilter.rules; Creez '/home/prelude/etc/prelude-lml/ruleset/ipchains.rules' a partir de 'ANNEXE 5 - Fichier de regles pour un support Ipchains avec Prelude-lml' si vous utilisez un firewall IpChains. Attribuez les permissions correctes aux fichiers crees : cd /home/prelude/etc/prelude-lml/ruleset/ chown prelude:prelude debian-secinst.rules ipchains.rules chmod 640 debian-secinst.rules ipchains.rules !!! ATTENTION Notez qu'avec cette version de Prelude, il n'est apparemment plus possible de donner des droits restreints aux fichiers de logs que vous monitorez. Par defaut, vos fichiers de logs (dans /var/log) securite.log et fw_[deny| accept].log doivent etre en 640 et appartenir a root:adm (si vous avez suivi cette procedure). Il se trouve que si vous ne configurez pas ces fichiers en 644 au minimum avec cette installation, le moniteur prelude ne sera pas capable de les consulter apres avoir perdu ses privileges super-utilisateur. ATTENTION !!! Et redemarrez la sonde prelude-lml : /etc/init.d/preludelogmonitor.sh restart 5.8. Securisation approfondie avec GrSecurity --------------------------------------------- GrSecurity est constitue d'un patch pour le noyau Linux et d'un utilitaire destine a etre utilise en espace utilisateur. Le patch accroit la securite du systeme en apportant des restrictions aux systemes de fichiers /proc et /tmp, aux actions realisables par des processus 'chrootes', en creant un espace de stockage d'ACLs (Access Control Lists) permettant d'implementer un systeme base sur le modele MAC (Mandatory Access Control) pour tous les utilisateurs et y compris pour le super-utilisateur (la liste n'est pas exhaustive :) ). La suite GrSecurity inclut egalement Pax : une protection du noyau permettant l'implementation de pages memoire non executables et un espace d'adressage aleatoire. Nous allons tout d'abord commencer par patcher le noyau du systeme puis nous aborderons l'integration des listes de controle d'acces. Notez que vous devez choisir entre cette procédure et celle présentée en '5.1. Installation du patch OpenWall'. Le patch noyau GrSecurity et l'outil d'administration GrAdm sont tous deux disponibles sur www.grsecurity.net et l'utilitaire chpax est disponible sur pageexec.virtualave.net. Je ne peux que vous indiquer de lire consciencieusement la documentation presente sur le site avant de proceder aux manipulations decrites ci-apres... Avant de commencer, sachez enfin que cette documentation s'applique pour un noyay 2.4.22 (noyau non disponible dans la branche stable des packages Debian) donc a vous de choisir... 5.8.1. Patch du noyau : Compilation et installation Recuperez le patch du noyau ainsi que chpax, verifiez les MD5 et stockez les dans /home/system/download/. Recuperez les sources du noyau 2.4.22, verifiez le md5 puis : mount -o remount,rw /usr mount -o remount,exec /tmp cd /usr/src mv /home/system/download/linux-2.4.22.tar.bz2 . tar jxvf linux-2.4.22.tar.bz2 chown -R root:root linux-2.4.22 chmod 750 linux-2.4.22 mv linux-2.4.22 kernel-source-2.4.22 ln -s kernel-source-2.4.22 linux-2.4.22 Patchez les sources du noyau : cd /usr/src patch -p0 < /home/system/download/grsecurity-1.9.12-2.4.22.patch Editez le flag EXTRAVERSION du fichier linux-2.4.22/Makefile pour ajouter un commentaire du type '-grsec'. Si vous utilisiez le noyau 2.4.18 de Debian, recuperez le fichier de config que vous avez du sauvegarder dans /boot et placez le dans /usr/src/linux-2.4 .22/.config puis 'make oldconfig' - sinon 'make menuconfig' et configurez votre nouveau noyau. Choisissez les options GrSecurity que vous voulez activer - celles qui ont ete utilisees lors de la redaction de cette documentation sont presentees dans 'ANNEXE 11 - Parametres de configuration d'un noyau GrSecurity' - puis compilez et installez votre nouveau noyau en suivant la procedure presentee dans 'II. COMPILATION DU NOYAU'. Notes sur le choix des options : * Si vous activez l'option 'Deny writing to /dev/kmem, /dev/mem, and /dev/port' dans le menu 'Address Space Protection' et que votre systeme est un guest VmWare (tm), il ne bootera plus... * J'utilise le gid 4 pour l'option 'CONFIG_GRKERNSEC_PROC_GID', ce qui permet aux membres du groupe 'adm' d'obtenir des permissions que je juge appropriees pour les administrateurs non-root du serveur. * J'active l'option 'CONFIG_GRKERNSEC_CHROOT_SYSCTL' car je prefere creer un script d'initialisation charge de positionner les bonnes valeurs lors du boot. Si vous preferez securiser "encore plus" votre installation, desactivez cette option, mais faites attention que les gids que vous utiliserez dans les options 'CONFIG_GRKERNSEC_AUDIT_GID' , 'CONFIG_ GRKERNSEC_TPE_GID', 'CONFIG_GRKERNSEC_SOCKET_ALL_GID', 'CONFIG_GRKERNSEC _SOCKET_CLIENT_GID' et 'CONFIG_GRKERNSEC_SOCKET_SERVER_GID' ne soient pas deja utilises sur votre systeme. Une fois votre nouveau noyau installe, rebootez le systeme. 5.8.2. Configuration du systeme Creez les groupes suivants : for i in `echo grsec_tpe grsec_sockall grsec_sock_cl grsec_sock_srv grsec\ _audit`; do groupadd $i; done Creez le fichier /etc/sysctl.conf.grsecurity a partir du fichier present en 'ANNEXE 12 - Configuration Sysctl de GrSecurity' et parametrez ce fichier selon vos besoins en mettant a jour les gid avec les groupes que vous venez de creer. !!! Attention !!! La suite peut rendre votre systeme instable. Testez cette configuration avec la commande : /sbin/sysctl -p /etc/sysctl.conf.grsecurity Si tout se passe bien et que le comportement du serveur repond a vos attentes, positionnez la variable 'grsec_lock' de sysctl.conf.grsecurity a '1' puis creez le fichier '/home/system/security/apply_grsec.sh' : #!/bin/sh /sbin/sysctl -p /etc/sysctl.conf.grsecurity Configurez le systeme pour que ce script soit appelle au boot : cd /etc/rc2.d ln -s /home/system/security/apply_grsec.sh S{XX}apply_grsec ou {XX} correspond a votre priorite de lancement par rapport aux autres scripts executes lors du boot du systeme. Modifiez votre fichier de configuration syslog pour stocker les alertes dans le fichier de log securite grace aux entrees suivantes : kern.* %regex -m "PAX" %classic /var/log/securite.log kern.* %regex -m "grsec" %classic /var/log/securite.log La configuration initiale est terminee... Voici la politique que j'applique personnellement (elle est fonction de l'usage final du serveur) : * Tous les operateurs du systeme sont dans grsec_sock_srv; * Les serveurs Apache et Websphere sont dans grsec_audit et dans grsec_tpe; * Si Apache n'a pas besoin d'etablir de connexions distantes (Attention, c'est le cas pour le module WAS), je place Apache dans grsec_sock_cl; * Les eventuels utilisateurs guests sont places dans grsec_sockall et dans grsec_tpe. Une derniere note relative a l'interaction de notre noyau avec une installation Websphere telle que presentee dans 'V. INSTALLATION ET SECURISATION D'UN SERVEUR D'APPLICATION WEBSPHERE' : Si vous avez suivi la procedure d'installation de ce document le serveur d'application ne pourra plus demarrer et vous obtiendrez un message d'erreur du type : [...] kernel: grsec: From a.b.c.d: Proc handler: being fed garbage 2 bytes\ sent 208 required [...] kernel: PAX: From a.b.c.d: terminating task: /usr/local/websphere500/\ appserver/java/jre/bin/exe/java(java):4773, uid/euid: [...] [...] kernel:grsec: From a.b.c.d: attempted resource overstep by requesting\ 4096 for RLIMIT_CORE against limit 0 by (java:4773) [...], parent (start\ Server.sh:19644) [...] Vous pouvez corriger ce probleme via : cd /home/system/applis/chpax-0.5/ ./chpax -s /usr/local/websphere500/appserver/java/jre/bin/exe/java Et verifiez que vous obtenez ceci avec chpax -v : * Paging based PAGE_EXEC : enabled * Trampolines : not emulated * mprotect() : restricted * mmap() base : randomized * ET_EXEC base : not randomized * Segmentation based PAGE_EXEC : disabled Pour finir, le positionnement de l'utilisateur WAS dans le groupe d'audit genere une quantite quelque peu importante de logs lors des stop/start du serveur d'application, ceux-ci sont cependant facilement tracables par le critere "parent (stopServer.sh:17515)" par exemple. 5.8.3. Installation et configuration de Gradm et des ACLs Avant de commencer, sachez que cette installation va fortement diminuer les droits de l'utilisateur root. Pour effectuer des taches d'administration telles que la mise a jour des packages ou un reboot du serveur, vous devrez utiliser la commande 'gradm -a' de facon a passer en mode administration. Lors de l'installation de Gradm, vous aurez a saisir un mot de passe pour la commande Gradm (passage en mode administration ou desactivation des ACLs), il parait donc judicieux de saisir un mot de passe complexe ?! Recuperez l'archive gradm-1.9.12.tar.gz sur le site de GrSecurity et stockez la dans /home/system/download puis verifiez le MD5. On installe : cd /home/system/applis/ tar zxvf ../download/gradm-1.9.12.tar.gz chown -R root:root gradm/ find . -type f -exec chmod 640 {} \; find . -type d -exec chmod 750 {} \; make && make install => Le mot de passe vous est demande et est stocke dans /etc/grsec/pw. Une configuration initiale est desormais positionnee dans /etc/grsec/acl et sera utilisee si vous activez la securite - ce que vous ne faites pas bien evidemment ! Nous recuperons les acls fournies pour debian et les utilisons : cd /etc/grsec/ cp -r /home/system/applis/gradm/debian_secure_acls . chmod 700 debian_secure_acls/ chmod 600 debian_secure_acls/* mv acl acl.orig mv debian_secure_acls/default acl Conformement a cette documentation, nous n'avons pas besoin des acls suivantes (certaines sont disponibles en annexe) donc : cd debian_secure_acls/ rm -f apache cron inetd ipop3d klogd mysqld postfix syslogd tcpd xfree86 Creez un repertoire /etc/grsec/debian-secinst, ajoutez y les fichiers presentes en 'ANNEXE 13 - ACLs GrSecurity pour Debian-secinst' puis : cd /etc/grsec chmod 700 debian-secinst chmod 600 debian-secinst/* Note : Ne prenez que les fichiers d'ACL dont vous avez besoin pour votre propre systeme et configurez les selon vos besoins ! Modifiez le fichier /etc/grsec/acl avec le patch present en 'ANNEXE 13' : cd /etc/grsec patch < patch => File to patch ? entrez acl puis supprimez le patch Si vous avez installe un serveur Web, n'oubliez pas d'editer le fichier /etc/grsec/debian_secinst/Dmn_apache pour definir les ports sur lesquels le serveur Apache est autorise a se positionner en ecoute. Si vous avez modifie les ports d'ecoute du demon SSH, faites de meme avec le fichier /etc/grsec/debian_secure_acls/sshd. Si vous avez configure d'autre device de logging pour le syslogd (comme par exemple en suivant les explications de '5.7. Installation de Prelude-Lml.'), editez /etc/grsec/debian_secure_acls/syslogd pour les configurer. Vous pouvez maintenant croiser les doigts et activer les acls avec la commande 'gradm -E'. Si tout se passe bien, vous pouvez maintenant modifier le script /home\ /system/security/apply_grsec.sh pour ajouter la commande 'gradm -E' de facon a ce que les ACLs soient mises en place au boot du systeme. ================================================================================ I. INFORMATIONS SUR LA GESTION DE PACKAGES DEBIAN ================================================= La gestion des packages Debian peut s'effectuer par le biais de plusieurs commandes. => Consultez les man suivants : dselect , apt-get , dpkg Nous nous contentons de presenter ici quelques d'aide-memoires. NDR: Attention aux permissions systeme de fichiers associees a vos partitions. Mise a jour du systeme avec apt : * apt-get update * apt-get dist-upgrade -d * cd /var/cache/apt/archives * Verifier l'empreinte md5 du(des) package(s) telecharge(s). * dpkg-deb -I {nom_du_package}.deb md5sums => Verifiez que les md5 sont corrects (?) * apt-get dist-upgrade Quelques utilisations de dpkg : * dpkg -i package => Installer un .deb * dpkg -I package => Informations sur le .deb * dpkg -c package => Liste les fichiers d'un .deb * dpkg -x package toto => Extrait les fichiers du .deb dans le repertoire 'toto'. * dpkg -l => Tous les packages installes. * dpkg -l '*pattern*' => Tous les packages installes relatifs a 'pattern'. * dpkg -L package => Liste des fichiers d'un package installe. * dpkg -s package => Statut d'un package Repertoires relatifs a la gestion de package Debian : /var/cache/apt/archives => contient la liste des packages telecharges s'ils ne sont pas effaces. /var/lib/dpkg/info/* => contient les informations relatives aux packages installes. I.a. Creation d'un package Debian --------------------------------- AVERTISSEMENT : Cette creation de package est plus artisanale qu'autre chose. Je vous conseille la lecture de www.debian.org/doc/manuals/maint-guide/ pour la creation de package .deb standards. NDR : Nous nous servons de l'utilitaire 'fakeroot' dont je ne vous reccomande pas l'installation sur un serveur de production. On cree l'arborescence : mkdir ~/tmp/debian-secinst-doc-0.0.1 cd ~/tmp/debian-secinst-doc-0.0.1 mkdir -p usr/local/doc cp ~/debian-secinst.txt ./usr/local/doc/ mkdir DEBIAN On cree les fichiers de controle : cat > ./DEBIAN/control << EOF Package: debian-secinst-doc Version: 0.0.1 Section: doc Priority: optional Architecture: all Depends: Maintainer: Simon Castro Description: Installation et securisation d'une station Debian Woody\ stable Installation et securisation d'une station sous Linux Debian 3.0 stable. EOF cat > ./DEBIAN/copyright << EOF debian-secinst-doc Copyright (c) 2003 - Simon Castro This package may be downloaded from http://www.entreelibre.com/scastro You are free to distribute this software under the terms of the GNU General Public License. On Debian systems, the complete text of the GNU General Public License can be found in the file '/usr/share/common/common-licenses/GPL' EOF cat > ./DEBIAN/changelog << EOF debian-secinst-doc (0.0.1) * Initial release - Simon Castro -- Simon Castro 2003-03-17 EOF On genere les empreintes MD5 : find usr/ -type f -exec /usr/bin/md5sum {} >> ./DEBIAN/md5sums \; On compresse ce qui doit l'etre et on positionne les droits : gzip --best ./DEBIAN/changelog find . -type d | xargs chmod 755 find . -type f | xargs chmod 644 On cree le package : fakeroot dpkg-deb --build ./debian-secinst-doc-0.0.1/\ debian-secinst-doc-0.0.1.deb ================================================================================ II. COMPILATION DU NOYAU ======================== II.a. Compilation d'un noyau personnalise ----------------------------------------- NDR : exemple avec une recuperation pour la premiere fois des sources du noyau 2.2.20. Dans le cas contraire, sauvegardez votre fichier de configuration puis make clean, make mrproper et verifiez EXTRAVERSION dans ./Makefile. Recuperez les sources puis allez dans /usr/src. ln -s kernel-source-2.2.20 linux_perso cd linux_perso sed 's/^EXTRAVERSION\ =$/EXTRAVERSION\ =\ -perso/' Makefile > .perso cat .perso > Makefile && rm -f .perso make menuconfig => Choisissez vos options et quittez en sauvant make dep make modules make bzImage make modules_install II.b. Installation du noyau --------------------------- L'exemple pris ici est relatif a la premiere installation d'un nouveau noyau sur le systeme. cp archi/i386/boot/bzImage /boot/vmlinuz-2.2.20-perso cp System.map /boot/System.map-2.2.20-perso cd /boot/ ln -s vmlinuz-2.2.20-perso linux_perso Editer le fichier /etc/lilo.conf pour ajouter l'entree suivante : image=/boot/linux_perso label=perso read-only restricted Lancez la commande 'lilo' pour mettre a jour le systeme. Rebootez le systeme et si tout est correct : cp /usr/src/linux_perso/.config /boot/config-2.2.20-perso puis modifiez le noyau a lancer par defaut ? ================================================================================ III. ADMINISTRATION : QUELQUES CONSEILS ======================================= Sont presentes ici quelques conseils relatifs a l'administration de la station installee. III.a. J'ai oublie de preparer une partition ... ------------------------------------------------ Vous voulez installer une partition supplementaire que vous n'aviez pas prevue auparavant (ex: /var/www ou /var/mysql ...). Il doit vous rester de la place sur la derniere partition que vous aviez cree en '1.5. Partitionnez le disque dur'. Nous allons nous servir de cet espace pour ajouter une nouvelle partition. NDR: Faites bien ATTENTION a ce que vous allez faire ensuite... Commencez par sauvegarder ce que vous aviez installe sur cette partition. umount /local fdisk /dev/sda * Entrez 'p' pour afficher la table de partitions. => Notre partition (dans cet exemple !) est /dev/sda11 * Entrez 'd' puis '11' pour effacer cette partition. * Entrez 'n' puis puis '+64M' => Nous ajoutons une nouvelle partition de 64M. * Entrez 'n' puis puis => Nous ajoutons une nouvelle partition pour l'espace disque restant. * Entrez 'w' pour ecrire la nouvelle table de partition sur le disque et quitter. Editez /etc/fstab pour supprimer la reference a l'ancienne partition /dev/sda11. Rebootez. Formattez les deux nouvelles partitions : mke2fs /dev/sda11 mke2fs /dev/sda12 Verifiez les deux nouvelles partitions : e2fsck /dev/hda11 e2fsck /dev/hda12 Editez /etc/fstab pour refleter le changement : /dev/sda11 /var/www ext2 rw,nosuid,nodev 0 2 /dev/sda12 /local ext2 ro,noexec,nosuid,nodev 0 2 Creez le point d'entree /var/www et remontez les partitions : mkdir /var/www chmod 755 /var/www mount /var/www mount /local mount -o remount,rw /local Copiez a nouveau votre backup de donnees. mount -o remount,ro /local III.b. Dselect ne parvient pas a configurer les packages a cause des permissions de /tmp ------------------------------------------------------------------------------ Apres avoir verifie que le package que vous voulez installez/configurer est correct. mount -o remount,exec /tmp Configurez votre package mount -o remount,defaults /tmp III.c. SmartHost Exim --------------------- Exim doit normalement etre configure pour gerer vos Mails en local si vous avez utilise cette documentation pour l'installation. Nous configurons maintenant exim pour qu'il soit en mesure de transmettre les mails a destination d'un domaine x.yyy vers un serveur SMTP externe smtp.x.yyy qui se chargera de l'acheminement. Sauvegardez votre configuration : cp /etc/exim/exim.conf /etc/exim/exim.conf.orig Editez la configuration Exim (/etc/exim/exim.conf) : * Entrez le domaine pour qui vous autorisez le relais : relay_domains = x.yyy * Commentez (si vous le voulez) : host_lookup = * Ajoutez dans "TRANSPORTS CONFIGURATION" : remote_smtp: driver = smtp Ajoutez dans "ROUTERS CONFIGURATION" : smarthost: driver = domainlist transport = remote_smtp route_list = "* smtp.x.yyy bydns_a" III.d. Client Samba ------------------- Votre noyau doit etre compile avec l'option : CONFIG_SMB_FS=y Installez le package smbfs : apt-get install smbfs -d md5sum smbfs_2.2.3a-12.3_i386.deb e63c92036a14f97a818616160bf9515d smbfs_2.2.3a-12.3_i386.deb mount -o remount,rw /usr/ apt-get install smbfs mount -o remount /usr/ Montage de partition avec mount : mount -t smbfs -o username={USER} //{WIN32_HOSTNAME}/{SHARE_NAME}\ /{MOUNT_POINT} (Si vous le voulez.) Installez les packages pour SmbClient : apt-get install smbclient libcupsys2 samba-common -d md5sum smbclient_2.2.3a-12.3_i386.deb libcupsys2_1.1.14-5_i386.deb\ samba-common_2.2.3a-12.3_i386.deb aa9589efcb9639a18eefb85ad90554ca smbclient_2.2.3a-12.3_i386.deb f9ecb4934ee098f2ffa9f4939effb328 libcupsys2_1.1.14-5_i386.deb 1a36ef5c7b682d913d22bb933d890793 samba-common_2.2.3a-12.3_i386.deb mount -o remount,rw /usr/ mount -o remount,exec /tmp/ apt-get install smbclient libcupsys2 samba-common Yes Entrez le workgroup Password encryption : yes mount -o remount /usr/ mount -o remount /tmp/ Test de connexion avec smbclient : smbclient //{WIN32_HOSTNAME}/{SHARE_NAME} -I {IP_ADDRESS} -U {USER} III.e. Graver CD et DVD ----------------------- Je ne saurais que trop recommander d'utiliser un serveur dedie a cet usage. On me l'a demande donc : o effacer un CD : cdrecord blank=fast dev=0,0 o graver un CD : cdrecord dev=0,0 nom.iso o graver un DVD : growisofs -Z /dev/scd0=image.iso ou o graver un DVD : growisofs -dvd-compat -Z /dev/scd0 -r -l /repertoire/ III.f. Accents dans le shell ---------------------------- Il vous suffit de renseigner votre fichier .inputrc avec les directives suivantes : set meta-flag on set convert-meta off set output-meta on ================================================================================ IV. INSTALLATION ET SECURISATION D'UN SERVEUR APACHE MODSSL =========================================================== Les actions realisees ici ont ete realises apres avoir suivi les etapes suivantes de la procedure generale : 1. INSTALLATION DU SYSTEME 2. CONFIGURATION INITIALE DU SYSTEME 3. PREMIER ACCES AU SYSTEME ET SECURISATION MINIMALE 4. SECURISATION MODEREE 5.4. Gestion des quotas 5.5. Securisation PAM : Gestion des limites IV.a. Installation ------------------ Vous devez avoir une partition /dev/sda11 dans /etc/fstab du type : /dev/sda11 /var/www ext2 rw,nosuid,nodev 0 2 apt-get update apt-get install apache apache-doc libapache-mod-ssl libapache-mod-ssl-doc -d => Acceptez les packages: 'apache apache-common apache-doc libapache-mod-ssl libapache-mod-ssl-doc libexpat1 openssl'. cd /var/cache/apt/archives/ for i in `echo *.deb` ; do md5sum $i;done 98146bac67cff4cf252e4ff2bbbb6560 apache-common_1.3.26-0woody3_i386.deb a13fce3a93f137ef243bc743e7b5a57d apache-doc_1.3.26-0woody3_all.deb 95d81b2239554383c56c7d193c476ddb apache_1.3.26-0woody3_i386.deb 7c5f6a20d23ec97bd7d0f8ec5bd14172 libapache-mod-ssl-doc_2.8.9-2.1_all.deb 9756a3701103f8779c65455c968898c3 libapache-mod-ssl_2.8.9-2.1_i386.deb 95f921ff15b8bf124ec9e9e6a3230774 libexpat1_1.95.2-6_i386.deb 8af019bb8fc566504db03d88f75b782a openssl_0.9.6c-2.woody.2_i386.deb mount -o remount,rw /usr/ mount -o remount,exec /tmp/ apt-get install apache apache-doc libapache-mod-ssl libapache-mod-ssl-doc mount -o remount,ro /usr/ mount -o remount,noexec /tmp/ /etc/init.d/apache stop IV.b. Configuration initiale ---------------------------- Ajoutez les regles suivantes a votre firewall et rechargez le : # Allow anyone to reach us on HTTP/HTTPS tcp ports $IPCH -A input -p tcp --sport 1024: --dport 80 -j ACCEPT $IPCH -A output -p tcp --sport 80 --dport 1024: -j ACCEPT Creez une arborescence : mkdir /var/www/htdocs chmod 750 /var/www/htdocs && chown root:www-data /var/www/htdocs Positionnez des permissions restrictives sur la configuration : chmod 750 /etc/apache /etc/apache/ssl* chmod 640 /etc/apache/*.conf Preparez le certificat (ou recuperez le votre) : mkdir /etc/apache/ssl cd /etc/apache/ssl openssl genrsa -out {HOSTNAME}.key 2048 openssl req -new -x509 -days 365 -key {HOSTNAME}.key -out {HOSTNAME}.crt Mettez en place un fichier de configuration minimal : cd /etc/apache cp httpd.conf httpd.conf.orig Remplacez /etc/apache/httpd.conf par le fichier de configuration present en 'ANNEXE 6 - Fichier de configuration Apache minimal'. Creez le groupe webadm: groupadd webadm Preparez le repertoire de logs : mkdir /var/log/apache chown root:webadm /var/log/apache && chmod 3750 /var/log/apache Preparez la rotation des logs en modifiant le fichier /etc/logrotate.d/apache sur les lignes suivantes (Vous devriez adapter cette configuration a votre environnement en creant un script d'archivage dans un repertoire distinct) : daily rotate 365 create 640 root webadm Demarrez et testez Apache : /etc/init.d/apache start Ajoutez vos utilisateurs/administrateurs dans un groupe webadm qui aura des droits sur l'arborescence web : groupadd webadm Pour les administrateurs: usermod -g {UserName} -G adm,users,webadm,www-data {UserName} Pour les utilisateurs : usermod -g users -G webadm,www-data {UserName} Avec 'visudo', ajoutez les entrees suivantes dans /etc/sudoers pour permettre a vos administrateurs web d'administrer le serveur Apache : # Cmnd alias specification [...] Cmnd_Alias APACHECTL=/usr/sbin/apachectl [...] # User privilege specification [...] %webadm ALL=NOPASSWD:APACHECTL L'arborescence des sous-repertoires de 'htdocs' peut etre du type : mkdir /var/www/htdocs/{directory_name} chown root:webadm /var/www/htdocs/{directory_name} chmod 3775 /var/www/htdocs/{directory_name} Vos administrateurs web (groupes webadm et www-data) peuvent desormais acceder a cette arborescence et poser les fichiers necessaires au site des facons suivantes : * {UserName}:webadm => Par defaut * {UserName}:www-data => Avec un chown. => Attention, dans les deux cas aux permissions affectees aux fichiers, elles doivent au moins etre en 644 pour le premier cas et en 640 pour le second cas. IV.c. Integration des quotas ---------------------------- Groupe Partition Place Soft Hard Inodes Soft Hard adm /tmp 185M 50M 60M 49K 15K 20K adm /home 465M 100M 125M 122K 20K 30K adm /var/www 279M 1 1 1 1 1 users /tmp 185M 50M 60M 49K 15K 20K users /home 465M 100M 125M 122K 10K 15K users /var/www 279M 1 1 1 1 1 webadm /tmp 185M 1 1 49K 1 1 webadm /home 465M 100M 125M 122K 10K 15K webadm /var/www 279M 200M 225M 73K 50K 60K www-data /tmp 185M 1 1 49K 1 1 www-data /home 465M 1 1 122K 1 1 www-data /var/www 279M 40M 50M 73K 1K 10K Utilisateur Partition Place Soft Hard Inodes Soft Hard quotauser /tmp 185M 5M 10M 49K 1,5K 5K quotauser /home 465M 15M 20M 122K 3K 5K quotauser /var/www 279M 5M 10M 73K 1K 2K IV.d. Empreinte du systeme -------------------------- Suivez la procedure presentee en '5.3. Conserver une empreinte de verification d'integrite du systeme.' IV.e. Sauvegarde du systeme --------------------------- Referez vous a '4.11. Backup du systeme sur une partition specifique'. IV.f. Etapes de configuration supplementaires --------------------------------------------- Si vous desirez activer les extensions CGI et SSI pour votre configuration Apache, ajoutez a votre fichier httpd.conf : ------------------------------------------ ################### ### Scripts CGI ### ################### LoadModule cgi_module /usr/lib/apache/1.3/mod_cgi.so LoadModule includes_module /usr/lib/apache/1.3/mod_include.so ScriptAlias /cgi-bin/ /var/www/cgi-bin/ AddHandler cgi-script .cgi AddType text/html .shtml AddHandler server-parsed .shtml AllowOverride All Options ExecCGI Includes Order allow,deny Allow from all ------------------------------------------ Notez que le "AllowOverride All" pourrait etre affine. Tout depend des droits que vous souhaitez accorder a vos administrateurs Web (i.e : s'ils ont acces au fichier de configuration apache ou non). Notez que vous devrez egalement parametrer les directives " Verifiez que Apache tourne correctement. => Si vous rencontrez des erreurs, editez '/usr/local/websphere500/\ appserver/config/cells/plugin-cfg.xml' et au niveau de la ligne\ ' Consultez ensuite le fichier '/usr/local/websphere500/appserver/\ logs/http_plugin.log' apres avoir essaye de relancer Apache. Testez votre installation : cd /usr/local/websphere500/appserver/bin/ ./ivt.sh NDR : Patientez ... Le message '>ADMU3200I: Server launched. Waiting for\ initialization status.' dure longtemps ! => Les messages de succes que vous devez obtenir sont IVTL0070I et IVTL0080I. => Le test d'installation via 'ivt' lance egalement le serveur d'application par defaut (server1) et celui-ci reste lance a la fin du test. Vous pouvez donc tester que WAS est bien installe en entrant par exemple http://{@IP}/snoop dans un navigateur. V.b. Configuration initiale : Restauration du 'read-only' sur /usr, deplacement vers /var/was, attribution de permissions restreintes et execution du service WAS sous une identite restreinte ----------------------------------------------------------------------------- Stoppez le service Websphere si celui-ci est demarre : cd /usr/local/websphere500/appserver/bin/ ./stopServer.sh server1 Stoppez le serveur Apache si celui-ci est demarre : /etc/init.d/apache stop Creation d'un nouvel utilisateur : Creez un utilisateur pour le service Was et un groupe pour les administrateurs was : groupadd wasadm groupadd was adduser --no-create-home --disabled-password --quiet --ingroup was was Changing the user information for was Enter the new value, or press return for the default Full Name []: Ibm Websphere user Room Number []: Work Phone []: Home Phone []: Other []: Disabled Is the information correct? [y/n] y passwd -l was && chsh -s /bin/false was Creez des limites specifiques a cet utilisateur was dans le fichier /etc/security/limits.conf : was hard memlock 128000 was hard nofile 32000 was hard cpu 100 Deplacement vers /var/was et restauration du 'read-only' sur /usr : Vous devez avoir une partition /dev/sda12 dans /etc/fstab du type : /dev/sda12 /var/was ext2 rw,noexec,nosuid,nodev 0 2 Verifiez que la partition est montee, puis : chown root:was /var/was chmod 3770 /var/was Creez les repertoires dans /var/was : cd /var/was cp -r /usr/local/websphere500/appserver/config/ . cp -r /usr/local/websphere500/appserver/etc/ . cp -r /usr/local/websphere500/appserver/installableApps/ . cp -r /usr/local/websphere500/appserver/installedApps/ . cp -r /usr/local/websphere500/appserver/logs/ . cp -r /usr/local/websphere500/appserver/properties/ . cp -r /usr/local/websphere500/appserver/temp/ . cp -r /usr/local/websphere500/appserver/tranlog/ . cp -r /usr/local/websphere500/appserver/wstemp/ . Supprimez les repertoires dans /usr/local et creez les liens vers la partition Was : cd /usr/local/websphere500/appserver/ rm -rf config && ln -s /var/was/config/ config rm -rf etc && ln -s /var/was/etc/ etc rm -rf installableApps && ln -s /var/was/installableApps/ installableApps rm -rf installedApps && ln -s /var/was/installedApps/ installedApps rm -rf logs && ln -s /var/was/logs/ logs rm -rf properties && ln -s /var/was/properties/ properties rm -rf temp && ln -s /var/was/temp/ temp rm -rf tranlog && ln -s /var/was/tranlog/ tranlog rm -rf wstemp && ln -s /var/was/wstemp/ wstemp Positionnez les permissions appropriees sur le repertoire /var/was : cd /var/was chown -R root:was * find . -type d -perm -750 -exec chmod 2770 \{\} \; find . -type f -perm -640 -exec chmod 660 \{\} \; Positionnez les permissions appropriees sur le repertoire /usr/local/websphere500 : chown root:was /usr/local/websphere500 /usr/local/websphere500/appserver\ && chmod 750 /usr/local/websphere500 /usr/local/websphere500/appserver cd /usr/local/websphere500/appserver chown -R root:was * Execution de Was sous une identite restreinte : Modifiez les parametres de la JVM pour une adaptation a VOTRE (Mon serveur de test possede 156M de Ram et 300M de Swap) serveur dans '/var/was/config/\ cells/{HOSTNAME}/nodes/{HOSTNAME}/servers/server1/server.xml' : Modifiez le fichier /var/was/config/cells/{HOSTNAME}/nodes/{HOSTNAME}/\ servers/server1/server.xml de facon a obtenir : a la place de : Configuration des comptes administrateurs Was : mount -o remount,ro /usr Redemarrez Apache, Websphere et inscrivez les futurs administrateurs dans les groupes was et wasadm : Pour les administrateurs : usermod -g {UserName} -G adm,users,webadm,www-data,wasadm,was {UserName} Pour les utilisateurs : usermod -g users -G [webadm,www-data],wasadm,was {UserName} Avec 'visudo', ajoutez les entrees suivantes dans '/etc/sudoers' pour permettre a vos administrateurs was d'administrer le serveur Websphere : # Cmnd alias specification [...] Cmnd_Alias WASCTL=/usr/local/websphere500/appserver/bin/startServer.sh ,\ /usr/local/websphere500/appserver/bin/stopServer.sh [...] # User privilege specification [...] %wasadm ALL=(was) NOPASSWD: WASCTL NDR: Il est, bien entendu, trivial d'indiquer que les scripts que vous inscrivez dans le fichier d'autorisation sudo ne doivent etre en disponibles en ecriture que pour le super-utilisateur ou les administrateur. Vos administrateurs Was peuvent desormais administrer le serveur : > sudo -l User simon may run the following commands on this host: (was) NOPASSWD: /usr/local/websphere500/appserver/bin/startServer.sh,\ /usr/local/websphere500/appserver/bin/stopServer.sh > sudo -u was /usr/local/websphere500/appserver/bin/startServer.sh server1 V.c. Recommandations -------------------- L'arborescence /var/was est desormais en 3770. N'oubliez pas que les administrateurs ou le serveur Was peuvent modifier les fichiers appartenant a root. => Presumez desormais que tous les fichiers appartenant a root dans cette arborscence peuvent contenir des donnees malicieuses !!! Cette documentation n'a pas pour objectif de vous presenter une securisation approfondie de Websphere Application Server, voici donc quelques recommandations sur les etapes que vous pourriez suivre apres l'installation : * Supprimer toutes les webapp installees. * N'installer que les webapps relatives aux services que vous desirez offrir. * Privilegier les acces Ssh pour l'administration (l'emploi de wsadmin.sh devrait convenir pour la majeure partie des taches d'administration). * Si vous devez conserver l'interface web de la console d'administrateur : ** Activez la securite. ** Mettez en place des restrictions d'acces pour les utilisateurs autorises. * Restreignez au maximum la configuration du pare-feu (Idealement, seuls les administrateurs devraient avoir acces aux ports de la console d'administration et aux ports des transports HTTP) de facon a ce que le seul acces autorise passe par le plugin charge par Apache. * "Et mes ports SOAP RMI ?" => "Et les tunnels SSH ?". Ok, une restriction sur des adresses IP statiques devrait convenir, y compris si vous employez la version ND pour le deploiement des applications ou la repartition de charge. Si vous souhaitez modifier les ressources memoires attribuees aux processus Java, editez le fichier '/etc/security/limits.conf' pour les entrees 'nofile', 'cpu' et 'memlock' puis modifier les fichiers de configuration des serveurs dans /var/was/config/cells/{SERVER}/nodes/{SERVER}/servers/server{SERVER_NUM}\ /server.xml. V.d. Empreinte du systeme ------------------------- Editez /etc/aide/aide.conf et ajoutez : '/usr/local/websphere500/appserver/bin Binlib' a la fin du fichier. Suivez ensuite la procedure presentee en '5.3. Conserver une empreinte de verification d'integrite du systeme.' V.e. Sauvegarde du systeme -------------------------- Referez vous a '4.11. Backup du systeme sur une partition specifique' et editez le fichier '/home/system/scripts/backup/exclude' pour qu'il contienne cette ligne supplementaire : /var/was/logs ================================================================================ VI. INTEGRATION DE NETFILTER / IPTABLES ======================================= L'integration de NetFilter / Iptables a ete realisee sur le noyau stable 2.4.18 et la version 1.2.6a d'Iptables presents dans les packages Debian. VI.a. Compilation du noyau -------------------------- Compilez votre noyau avec les options desirees et celles qui suivent : CONFIG_PACKET=y CONFIG_NETFILTER=y CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_LIMIT=y CONFIG_IP_NF_MATCH_MAC=y CONFIG_IP_NF_MATCH_MULTIPORT=y CONFIG_IP_NF_FILTER=y CONFIG_IP_NF_MANGLE=y CONFIG_IP_NF_TARGET_LOG=y Installez le nouveau noyau et rebootez. VI.b. Scripts d'initialisation ------------------------------ Installez les scripts presents dans 'ANNEXE 7 - Parametrage du firewall NetFilter' et donnez leurs les droits appropries. Ajoutez le script init_iptables.sh pour qu'il soit pris en compte au boot du systeme update-rc.d init_iptables.sh defaults Demarrez le firewall : /etc/init.d/init_iptables.sh start ================================================================================ VII. INSTALLATION D'UN SERVEUR SAMBA POUR UNE GESTION DE BACKUP =============================================================== L'objectif de cette installation est de permettre a un serveur Win32 d'acceder a la station Debian en Netbios de facon a ce qu'il puisse recuperer les donnees sauvegardees que nous mettons a sa disposition. La gestion du backup du systeme en lui meme est presente dans la partie '4.11. Backup du systeme sur une partition specifique' de ce document. NDR : Pour realiser notre objectif, il n'est pas necessaire de proceder a l'installation de l'ensemble des packages relatifs a Samba. Pour la meme raison, nous n'abordons pas l'utilisation d'un client Samba ou de systemes de fichiers de type Samba dans cette partie. VII.a. Installation ------------------- On recupere les packages : apt-get update apt-get install samba samba-doc -d => Acceptez les packages : 'libcupsys2 samba samba-common samba-doc'. On verifie leur signature : cd /var/cache/apt/archives/ for i in `echo *.deb` ; do md5sum $i;done 86ece906e4f6bf1607758894a217c9bd libcupsys2_1.1.14-4.4_i386.deb 1a36ef5c7b682d913d22bb933d890793 samba-common_2.2.3a-12.3_i386.deb dcb1367dbed6335737462ce37df18f0e samba-doc_2.2.3a-12.3_all.deb d7daf3069c37042246f785bdc4f1f1d2 samba_2.2.3a-12.3_i386.deb On installe les packages : mount -o remount,rw /usr/ mount -o remount,exec /tmp/ apt-get install samba samba-doc => 'Configurer smb.conf avec debconf ?' : No => 'Executer Samba en mode demon ou via inetd ?' : Demon => 'Creer le fichier de mot de passe Samba ?' : Oui On remonte les partitions, on arrete le serveur, on restreint les droits sur le repertoire de configuration : mount -o remount,ro /usr/ mount -o remount,noexec /tmp/ /etc/init.d/samba stop update-rc.d -f samba remove chmod 750 /etc/samba chmod 640 /etc/samba/smb.conf VII.b. Configuration -------------------- On sauvegarde la configuration originale : cp /etc/samba/smb.conf /etc/samba/smb.conf.orig Ajoutez un utilisateur Samba : groupadd samba adduser --no-create-home --disabled-password --quiet --ingroup samba smbuser Changing the user information for smbuser Enter the new value, or press return for the default Full Name []: Samba Backup User Room Number []: Work Phone []: Home Phone []: Other []: Disabled Is the information correct? [y/n] y passwd -l smbuser && chsh -s /bin/false smbuser Preparez l'utilisateur pour une utilisation avec Samba : cat /etc/passwd | grep smbuser | mksmbpasswd > /etc/samba/smbpasswd smbpasswd smbuser => Et entrez le mot de passe Samba de cet utilisateur. Vous devez avoir une partition /dev/sda13 dans /etc/fstab du type (voir '4.11. Backup du systeme sur une partition specifique') : /dev/sda13 /backup ext2 ro,noexec,nosuid,nodev,sync 0 2 Montez la partition backup et donnez lui les permissions appropriees : mount -o remount,rw /backup/ chown root:samba /backup chmod 3750 /backup mount -o remount,ro /backup/ Creez le fichier /etc/samba/smb.conf suivant : [global] # Local NetBios informations workgroup = {YOUR_DOMAIN} netbios name = {YOUR_NETBIOS_NAME} netbios aliases = {YOUR_NETBIOS_ALIAS} server string = %h server # Netbios Network settings local master = no dns proxy = no wins server = {@IP_OF_YOUR_WINS_SERVER} # Network settings name resolve order = host wins bcast socket options = TCP_NODELAY # Do not forget to add here a correct subnet for the wins server ! hosts allow = 127., {YOUR_ALLOWED_SUBNET/YOUR_ALLOWED_SUBNET_MASK} # Passwords and security invalid users = root encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd unix password sync = false security = user # Logging settings log file = /var/log/samba/samba.log max log size = 1000 syslog = 0 log level = 1 [Backup] comment = Backup for %h path = /backup valid users = smbuser read only = yes public = no browseable = yes Ajoutez les informations sur votre station dans un fichier de resolution NetBios : cat > /etc/samba/lmhosts << EOF > {@IP} {NETBIOS_NAME} > {@IP} {NETBIOS_ALIAS} EOF Autorisez les flux Netbios au niveau de votre firewall (referez vous a 'ANNEXE 1 - Parametrage du firewall Ipchains' ou a 'ANNEXE 7 - Parametrage du firewall NetFilter' selon votre firewall). Demarrez le serveur Samba : /etc/init.d/samba start Ajoutez le serveur Samba dans votre configuration de demarrage : update-rc.d samba defaults => Le serveur de backup Win32 est desormais capable de mapper le partage \\{NETBIOS_NAME}\backup de notre station pour recuperer les fichiers que nous y deposerons. Pour finir, nous modifions l'appel periodique au script de backup par la crontab pour que le serveur Samba soit stoppe au moment ou la partition est remontee en lecture/ecriture : cat > /home/system/scripts/backup/samba_backup.sh << EOF > #!/bin/sh > /etc/init.d/samba stop > if [ $1 ] && [ $1 == "-f" ] > then > /home/system/scripts/backup/system_backup.sh -f > else > /home/system/scripts/backup/system_backup.sh > fi > /etc/init.d/samba start > EOF chmod 750 /home/system/scripts/backup/samba_backup.sh Et on remplace les appels dans '/etc/crontab' : # Backup Full du systeme toutes les semaines a 00H30 < 30 0 * * 7 root /home/system/scripts/backup/system_backup.sh -f > 30 0 * * 7 root /home/system/scripts/backup/samba_backup.sh -f # Backup incremental du systeme toutes les 6 heures a xx:15 < 15 */6 * * * root /home/system/scripts/backup/system_backup.sh > 15 */6 * * * root /home/system/scripts/backup/samba_backup.sh MAN : testparms, smb.conf, smbd, nmbd, smbpasswd, mksmbpasswd, smbstatus, nmblookup ================================================================================ VIII. INSTALLATION D'UN DEMON NAGIOS ==================================== Objectifs : * Installer un serveur de supervision Nagios accessible en HTTPS. * Securiser un minimum l'arborescence systeme. * Utiliser sudo pour l'administration Nagios. Note : Pour cette installation, certains repertoires sont crees dans /var/nagios/, je vous conseille donc d'utiliser une partition dediee montee par exemple en rw,sync. VIII.a Archives --------------- On recupere les sources a partir de www.nagios.org cd /home/system/download/nagios/ md5sum * 35b75ece533dfdf4963a67ce4e77fc4a imagepak-base.tar.gz 3ed26d8b49379e0dc14f448d5c2a70c3 imagepak-satrapa.tar.gz 5f48ecd9bad2c4d7c9d88d0b6f347ecf nagios-1.1.tar.gz 0078c9c8137694181a4cdf596fdbd74f nagios-plugins-1.3.1.tar.gz On met a jour le systeme pour les packages necessaires apt-get install libgd-dev libfreetype6-dev libjpeg62-dev libpng2-dev\ xlibs-dev zlib1g-dev -d cd /var/cache/apt/archives/ /usr/bin/md5sum libgd-dev_1.8.4-17.woody2_i386.deb libfreetype6-dev_2.0.9-1_i386.deb\ libjpeg62-dev_6b-5_i386.deb libpng2-dev_1.0.12-3.woody.3_i386.deb\ xlibs-dev_4.1.0-16woody1_i386.deb zlib1g-dev_1%3a1.1.4-1.0woody0_i386.deb 5b6160127cb2dcd2f63fee1811647ada libgd-dev_1.8.4-17.woody2_i386.deb 3e378f406f3c192cdfb8b4a82774203c libfreetype6-dev_2.0.9-1_i386.deb 194c37acd4eefb512c2a006cb13bd86d libjpeg62-dev_6b-5_i386.deb 3e30f2832304f64467801e966df1a764 libpng2-dev_1.0.12-3.woody.3_i386.deb 28a3ead8c6cbcaa064f05daff4c1dd9f xlibs-dev_4.1.0-16woody1_i386.deb 38b5554abc9c9521451f408230df0e8c zlib1g-dev_1%3a1.1.4-1.0woody0_i386.deb On installe les packages : mount -o remount,rw /usr apt-get install libgd-dev libfreetype6-dev libjpeg62-dev libpng2-dev\ xlibs-dev zlib1g-dev mount -o remount /usr VIII.b Creation des groupes/utilisateurs ---------------------------------------- Creation de l'utilisateur restreint destine a executer le demon : groupadd nagios adduser --no-create-home --disabled-password --quiet --ingroup nagios\ --home /usr/local/nagios nagios Changing the user information for nagios Full Name []: Nagios Restricted User Other []: Used by the Nagios Daemon passwd -l nagios && chsh -s /bin/false nagios Preparez l'administration nagios (installez sudo !) : groupadd nagiosadm adduser --no-create-home --disabled-password --quiet --home\ /var/nagios/etc/ --ingroup nagiosadm nagiosadm Full Name []: Nagios Administrator Other []: Restricted via sudo login passwd -l nagiosadm && chsh -s /bin/false nagiosadm Que vous comptiez autoriser l'execution de commandes externes ou non, creez un groupe dans lequel se trouveront nagios et le serveur web : groupadd nagioscmd usermod -G nagioscmd www-data usermod -G nagioscmd nagios Puis redemarrez Apache 'apachectl restart' VIII.c Compilation/Installation de Nagios ----------------------------------------- cd /home/system/download/nagios/ tar zxvf nagios-1.1.tar.gz chown -R root:root nagios-1.1 chmod 700 nagios-1.1/ && cd nagios-1.1 ./configure --prefix=/usr/local/nagios --with-cgiurl=/cgi-bin\ --with-htmlurl=/var/www/htdocs/nagios --with-nagios-user=nagios\ --with-nagios-grp=nagios --with-gd-lib=/usr/local/lib\ --with-gd-inc=/usr/local/include make all cd /home/system/download/nagios/ tar zxvf nagios-plugins-1.3.1.tar.gz chown root:root nagios-plugins-1.3.1 chmod 700 nagios-plugins-1.3.1 && cd nagios-plugins-1.3.1 ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios\ --with-nagios-group=nagios --with-cgiurl=/cgi-bin make all On y va pour l'installation : mount -o remount,rw /usr mkdir /usr/local/nagios cd /home/system/download/nagios/nagios-1.1 make install cd /home/system/download/nagios/nagios-plugins-1.3.1 make install chmod 3755 /usr/local/nagios VIII.d Deplacement des repertoires et attribution de permissions specifiques ---------------------------------------------------------------------------- On deplace l'arborescence Web : cd /usr/local/nagios mv share /var/www/htdocs/nagios ln -s /var/www/htdocs/nagios share cd /var/www/htdocs/ chown -R root:webadm nagios cd nagios find . -type d -exec chmod 3775 {} \; find . -type f -exec chmod 1664 {} \; On prepare l'arborescence variable + configuration : mkdir -p /var/nagios/{var,etc} chown nagiosadm:nagioscmd /var/nagios /var/nagios/etc chown nagios:nagioscmd /var/nagios/var chmod 3755 /var/nagios /var/nagios/etc chmod 3750 /var/nagios/var On deplace l'arborescence var : cd /usr/local/nagios mv var/* /var/nagios/var/ rmdir var && ln -s /var/nagios/var var On cree le fichier de transfert de commande : mkdir /var/nagios/var/rw chown nagios:nagioscmd /var/nagios/var/rw chmod 3770 /var/nagios/var/rw On donne des permissions convenables aux cgis : cd /usr/local/nagios chown -R nagios:www-data sbin chmod 750 sbin/* On restreint les droits sur les binaires Nagios : cd /usr/local/nagios chown -R root:nagios bin chmod 750 bin bin/nagios chown -R nagios:nagios libexec chmod 755 libexec chmod 750 libexec/* && chmod 755 libexec/check_nagios On prepare le repertoire de stockage de la configuration : cd /usr/local/nagios Si vous avez deja un repertoire de configuration : mv etc/* /var/nagios/etc/ rmdir etc && ln -s /var/nagios/etc etc sinon : ln -s /var/nagios/etc etc cd /var/nagios/etc chown nagiosadm:nagioscmd * chmod 1640 * On a fini avec /usr, on remonte en lecture seule : 'mount -o remount /usr' VIII.e Configuration d'Apache ----------------------------- Editez /etc/apache/httpd.conf pour ajouter : ------------------------------------------------------ LoadModule cgi_module /usr/lib/apache/1.3/mod_cgi.so [...] ############################ ### Configuration Nagios ### ############################ ScriptAlias /cgi-bin/ "/usr/local/nagios/sbin/" Options SymLinksIfOwnerMatch AllowOverride AuthConfig Order allow,deny Allow from all AllowOverride AuthConfig Options ExecCGI Order allow,deny Allow from all ------------------------------------------------------ puis redemarrez Apache. Note : En ce qui me concerne, je place la configuration Nagios dans un virtualhost activant la fonctionnalite SSL. VIII.f Configuration des autorisations d'acces ---------------------------------------------- Les autorisations d'acces au site statique : cd /var/www/htdocs/nagios cat > .htaccess << EOF AuthName "Nagios" AuthType Basic AuthUserFile "/usr/local/nagios/etc/htpasswd.users" require valid-user EOF chown root:webadm .htaccess chmod 1664 .htaccess Recuperation du fichier d'autorisation htaccess pour les cgis : cd /usr/local/nagios cp /var/www/htdocs/nagios/.htaccess sbin/ chown nagios:www-data sbin/.htaccess chmod 440 sbin/.htaccess Creez votre fichier de mot de passe /var/nagios/etc/htpasswd.users avec htpasswd et : chown nagiosadm:nagioscmd htpasswd.users chmod 1640 htpasswd.users VIII.g Script d'initialisation et administrateurs Nagios -------------------------------------------------------- Creez votre script d'initialisation dans /etc/init.d/init_nagios.sh a partir de l'annexe 'ANNEXE 14 - Script d'initialisation Nagios' puis : chmod 750 init_nagios.sh update-rc.d init_nagios.sh defaults Ajoutez les utilisateurs que vous voulez dans le groupe nagiosadm puis visudo et : Cmnd_Alias EDIT_NAGIOS_CONF=/usr/bin/vim Cmnd_Alias INIT_NAGIOS=/etc/init.d/init_nagios.sh [A-z]* %nagiosadm ALL=(nagiosadm)NOPASSWD:EDIT_NAGIOS_CONF %nagiosadm ALL=NOPASSWD:INIT_NAGIOS Note : Je sais que ce n'est pas la panacee (=> man vi{m}) VIII.h Et pour finir -------------------- Si vous decidez d'ajouter des logos : cd /var/www/htdocs/nagios/images/logos tar zxvf /home/system/download/nagios/imagepak-base.tar.gz tar zxvf /home/system/download/nagios/imagepak-satrapa.tar.gz chown -R root:webadm * Note : le package contenant l'application pngtogd2 est 'libgd-tools'. Si vous decidez d'installer le plugin APAN : Recuperation de rrd-tool (si non installe) : apt-get install rrdtool libgd-gif1 librrd0 -d cd /var/cache/apt/archives/ for i in `echo rrdtool_1.0.35-2_i386.deb libgd-gif1_1.3-2_i386.deb\ librrd0_1.0.35-2_i386.deb`; do md5sum $i; done 6603e6fdc3920a2a74e2f59aaee0952a rrdtool_1.0.35-2_i386.deb 28ded0ee82aa28e8bb62b579fb328e55 libgd-gif1_1.3-2_i386.deb 39f00bd626f7e3ed44a40139a4df3960 librrd0_1.0.35-2_i386.deb apt-get install rrdtool libgd-gif1 librrd0 Recuperation de apan-0.2.1.tar.gz sur http://apan.sourceforge.net/ Installation : cd /home/system/download/nagios/addons/ md5sum apan-0.2.1.tar.gz 2e0ffbddf6073cf5cc38efa501200dfa apan-0.2.1.tar.gz cd /usr/local/nagios/ tar zxvf /home/system/download/nagios/addons/apan-0.2.1.tar.gz chown -R nagios:www-data apan/ find ./apan/ -type d -exec chmod 750 {} \; Dans ./apan/apan.defs : < RRDTOOL=/usr/local/bin/rrdtool > RRDTOOL=/usr/bin/rrdtool [...] < CGIDEBUG=1 > CGIDEBUG=0 cp apan/apan.cgi /usr/local/nagios/sbin/ cp apan/generate.cgi /usr/local/nagios/sbin/ cd /usr/local/nagios/sbin/ chown nagios:www-data apan.cgi generate.cgi chmod 750 apan.cgi generate.cgi Configuration : Preparez le repertoire de stockage des definitions rrd : cd /var/nagios/ mkdir rrd chown nagios:nagioscmd rrd chmod 3750 rrd Et configurez votre installation Nagios/Apan en prenant garde a ce que l'utilisateur nagios ait les droits en ecriture dans le repertoire de stockage des infos rrd. Si vous decidez d'installer le plugin NRPE : Si la librairie ssl n'est pas installee : apt-get install libssl-dev -d cd /var/cache/apt/archives/ md5sum libssl-dev_0.9.6c-2.woody.6_i386.deb ee3f1bd5dc3de3e7dff6e945e73bf7b1 libssl-dev_0.9.6c-2.woody.6_i386.deb apt-get install libssl-dev Recuperation de nrpe-2.0.tar.gz depuis l'un des miroirs references sur le site http://www.nagios.org/download/extras.php. Installation : cd /home/system/download/nagios/addons md5sum nrpe-2.0.tar.gz 70ef9502a3b7e49fa520dbceabfa04d0 nrpe-2.0.tar.gz tar zxvf nrpe-2.0.tar.gz find ./nrpe-2.0 -type f \( -perm -004000 -o -perm -002000 \)\ -exec ls -la {} \; chown root:root nrpe-2.0 chmod 750 nrpe-2.0 cd nrpe-2.0 ./configure Notes : * Je pars du principe que l'hote employant le plugin check_nrpe et l'hote executant les commandes fonctionnent sur des architectures identiques (en terme de librairies egalement) et qu'il n'est donc pas necessaire de compiler nrpe sur les deux hotes. * Je pars egalement du principe que l'identite nagios:nagios est presente sur l'hote qui acceptera les requetes du plugin et que les plugins nagios standard (.../libexec/) sont installes. make cp src/check_nrpe /usr/local/nagios/libexec/ chown nagios:nagios /usr/local/nagios/libexec/check_nrpe Passez ensuite a la configuration et installez le demon NRPE et son fichier de configuration sur l'hote distant. ================================================================================ IX. GRAPHIQUES MRTG POUR LE SERVER-STATUS APACHE ================================================ Si le titre de cette partie n'evoque rien pour vous, consultez la documentation relative au module server-status d'Apache et la page d'accueil de l'archive a telecharger. IX.a Archives ------------- Telechargez les sources : http://howto.aphroland.de/HOWTO/MRTG/ApacheWithMRTG cd /home/system/download/ md5sum apache.mrtg.tgz ffa0cc1750998975f07fff8f70baeb9c apache.mrtg.tgz tar zxvf apache.mrtg.tgz chmod 750 apache.mrtg-v0.1/ apt-get install mrtg libgd1 libsnmp-session-perl libdigest-md5-perl\ libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl\ libmime-base64-perl libnet-perl liburi-perl libwww-perl -d cd /var/cache/apt/archives/ /usr/bin/md5sum mrtg_2.9.17-4_i386.deb libgd1_1.8.4-17.woody2_i386.deb\ libsnmp-session-perl_0.90-1_all.deb libdigest-md5-perl_2.13-2_i386.deb\ libhtml-parser-perl_3.25-1_i386.deb libhtml-tagset-perl_3.03-1_all.deb\ libhtml-tree-perl_3.11-2_all.deb libmime-base64-perl_2.12-4_i386.deb\ libnet-perl_1%3a1.09.01-1_all.deb liburi-perl_1.18-1_all.deb\ libwww-perl_5.64-1_all.deb b7aced31ac2bd53afb5e3a41fe09a571 mrtg_2.9.17-4_i386.deb e47f36577bc77ca1ac1334a65a382ecd libgd1_1.8.4-17.woody2_i386.deb 09861e46c5bca03bec4f0db92f5e96a6 libsnmp-session-perl_0.90-1_all.deb c53a87f7e5f413f09becab2d4ef568a0 libdigest-md5-perl_2.13-2_i386.deb 1292ae35b502239aa238bbf72579a074 libhtml-parser-perl_3.25-1_i386.deb 4c64c498e99144f7ebcd65a5ba301991 libhtml-tagset-perl_3.03-1_all.deb da8da0d786b29f92254e7ed74f970515 libhtml-tree-perl_3.11-2_all.deb f309d4b7f60e94c41e554ebe4d22aee6 libmime-base64-perl_2.12-4_i386.deb f0947fc68a8b1ef13929c540efacdb2e libnet-perl_1%3a1.09.01-1_all.deb c8964c82978f10ca0657013ffd037c0e liburi-perl_1.18-1_all.deb 6a3f908c2fd7654201319d2d4b83e028 libwww-perl_5.64-1_all.deb Remontez votre systeme de fichier en lecture/ecriture. apt-get install mrtg libgd1 libsnmp-session-perl libdigest-md5-perl\ libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl\ libmime-base64-perl libnet-perl liburi-perl libwww-perl => Make mrtg owned and readable only by mrtg user ? YES Remontez votre systeme de fichier en lecture. IX.b Configuration ------------------ mkdir /var/www/apache-mrtg cd /var/www/apache-mrtg mkdir confs etc cd /home/system/download/apache.mrtg-v0.1 cp apache.html apache.mrtg.cfg apache.mrtg.pl mkapachemrtg.sh\ /var/www/apache-mrtg/etc/ cd /var/www/apache-mrtg/etc/ Si le serveur Web monitore est un serveur Apache tournant sur une plate-forme Windows, appliquez le patch suivant : ----------------------------------------------------------------------------- --- apache.mrtg.pl.orig Thu Nov 6 13:09:33 2003 +++ apache.mrtg.pl Thu Nov 6 13:09:33 2003 @@ -78,7 +78,12 @@ alarm 30; # have 30 seconds to get the INFO ... my $content = getcache($url); # get info status alarm 0; - my ($Taccess, $TkBytes, $CPULoad, $Uptime, $ReqPerSec, $BytesPerSec,\ $BytesPerReq, $BusyServers, $IdleServers, $null) = split(/\n/, $content);\ # split content + + if ($content !~ /CPULoad/) { + $content =~ s/Uptime: /CPULoad: 0\nUptime: /; + } + + my ($Taccess, $TkBytes, $CPULoad, $Uptime, $ReqPerSec, $BytesPerSec,\ $BytesPerReq, $BusyServers, $IdleServers, $null) = split(/\n/, $content); # strip some info - YES, UGLY CODE! $Taccess =~ s/Total Accesses: //; ----------------------------------------------------------------------------- Editez le fichier mkapachemrtg.sh pour les variables suivantes : [...] HTMLHOME="/var/www/htdocs/status-mrtg/" # mrtg output dir SCRIPTHOME="/var/www/apache-mrtg/etc" # where is the apache.mrtg.pl URLHOME="http://{WEBSERVER_MONITOR_IP}/status-mrtg" # url ... CONFHOME="/var/www/apache-mrtg/confs" # where the apache.mrtg.cfg files go MRTGBIN="/usr/bin/mrtg" # mrtg bin [...] chmod 750 /var/www/mrtg cd /var/www/htdocs mkdir status-mrtg chown root:webadm status-mrtg/ chmod 3775 status-mrtg/ Creez une configuration pour un serveur : cd /var/www/apache-mrtg/etc ./mkapachemrtg.sh {SERVER_NAME} "-url http://{SERVER_IP}/server-status?auto" Vous avez dans /var/www/apache-mrtg/confs le fichier de configuration relatif a cette nouvelle entree. Vous avez dans /var/www/htdocs/status-mrtg un repertoire servant de depose pour les fichiers garphs. cd /var/www/htdocs/status-mrtg chmod 3775 {SERVER_NAME} chmod 1664 {SERVER_NAME}/* Testez maintenant la configuration : /usr/bin/mrtg /var/www/apache-mrtg/confs/{SERVER_NAME}.apache.mrtg.cfg Finissez en creant un script d'appel aux statistiques : cd /var/www/apache-mrtg cat > monitor_servers.sh #!/bin/sh /usr/bin/mrtg /var/www/apache-mrtg/confs/{SERVER_NAME1}.apache.mrtg.cfg /usr/bin/mrtg /var/www/apache-mrtg/confs/{SERVER_NAMEX}.apache.mrtg.cfg ^C chmod 1750 monitor_servers.sh Et rajoutez une entree dans la crontab : */5 * * * * root /var/www/apache-mrtg/monitor_servers.sh ================================================================================ X. INSTALLATION D'UN DEMON VSFTPD Objectif : Installer un demon FTP dont la configuration par defaut interdit a tous les utilisateurs du systeme de se connecter. L'acces au systeme devra etre explicitement renseigne pour chaque utilisateur. X.a. Installation apt-get update apt-get install vsftpd -d cd /var/cache/apt/archives/ md5sum vsftpd_1.0.0-2_i386.deb 6b1faf046ee1203833f6ad7b2a542e71 vsftpd_1.0.0-2_i386.deb mount -o remount,rw /usr/ mount -o remount,exec /tmp/ apt-get install vsftpd mount -o remount,ro /usr/ mount -o remount,noexec /tmp/ X.b. Configuration initiale groupadd ftp adduser --no-create-home --home /var/ftp --disabled-password --quiet\ --ingroup ftp ftp Changing the user information for ftp Enter the new value, or press return for the default Full Name []: Vsftpd retricted user [...] Other []: Disabled passwd -l ftp && chsh -s /bin/false ftp mkdir /var/ftp chmod 750 /var/ftp mv /etc/vsftpd.conf /etc/vsftpd.conf.orig chmod 640 /etc/vsftpd.conf.orig cat > /etc/vsftpd.conf << EOF anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES idle_session_timeout=300 nopriv_user=ftp ftpd_banner={Votre banniere d'acces} chroot_local_user=YES userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd.userlist_file EOF chmod 640 /etc/vsftpd.conf echo > /etc/vsftpd.userlist_file chmod 640 /etc/vsftpd.userlist_file Dans /etc/inetd.conf : < ##ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/vsftpd > ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/vsftpd Note : Verifiez que seuls les services que vous souhaitez activer sont present dans ce fichier. Vous pouvez finalement demarrer le serveur inetd : /etc/init.d/inetd start Conseils : N'activez pas d'acces FTP pour des comptes autorises a ouvrir une session sur le systeme. Creez des comptes specifiques dont les repertoires d'accueil sont distincts. ================================================================================ XI. LINUX-VSERVER + GRSECURITY ============================== L'objectif de cette partie est de presenter l'installation puis un debut de configuration d'un environnement base sur un noyau compile avec le support GrSecurity et activant la fonctionalite Linux-Vserver. Je suppose que vous avez des notions de base concernant la partie patch noyau de GrSecurity et je ne saurais que trop vous recommander de lire l' abondante documentation disponible sur le site officiel de linux-vserver avant de vous lancer dans cette configuration. La configuration suivante nous permettra d'obtenir un serveur hote securise permettant de creer des serveurs virtuels divers. Nous nous focaliserons sur l'obtention d'un serveur virtuel activant Apache dont l'arborescence Web ne sera accessible en ecriture que via un second serveur virtuel activant un demon SSH. Nous obtiendrons a la fin de cette procedure un serveur dit de "reference" qui pourra servir de modele pour creer de nouveaux serveurs virtuels. Pour finir et pour ceux qui ne voudraient pas endommager sans resultat leur systeme, l'integralite de cette installation a ete validee sur un client VmWare (tm) (hote Debian stable installe selon cette documentation). XI.a Archives et installation du noyau patche --------------------------------------------- Recuperez les sources suivantes : o le noyau 2.4.26 sur http://www.kernel.org (ou le patch pour le 2.4.25) o le patch grsecurity-2.0-2.4.26-vs1.28.patch.bz2 sur http://www.firehead.org/~jeffrey/linux-vserver/ o le patch patch-2.4.26-vs1.28.diff.bz2 sur http://www.13thfloor.at/vserver/s_release/v1.28/ o l'archive util-vserver-0.30.tar.bz2 des utilitaires vserver sur http://www.13thfloor.at/vserver/s_release/v1.28/ o l'archive vproc-0.01.tar permettant de securiser /proc sur http://www.13thfloor.at/vserver/s_release/v1.28/ o le script d'installation minimale Debian (version 0.3.3 pour cette documentation) : http://www.paul.sladen.org/vserver/debian/debian-newvserver.sh Vous aurez egalement besoin du package 'debootstrap' pour realiser cette installation. Commencez par preparer les sources du noyau : cd /usr/src tar jxvf linux-2.4.26.tar.bz2 chown -R root:root linux-2.4.26 && chmod 750 linux-2.4.26 bunzip2 patch-2.4.26-vs1.28.diff.bz2 patch -p0 < patch-2.4.26-vs1.28.diff ln -s linux-2.4.26 linux-2.4.26-vs1.28 bunzip2 grsecurity-2.0-2.4.26-vs1.28.patch.bz2 patch -p0 < grsecurity-2.0-2.4.26-vs1.28.patch ln -s linux-2.4.26-vs1.28 linux-2.4.26-vs1.28-grsec cd linux-2.4.26-vs1.28-grsec/ Configurez votre noyau, compilez-le et installez-le (en respectant la procedure documentee en II. COMPILATION DU NOYAU). NDR : Mon fichier de configuration noyau pour GrSecurity est disponible en annexe 16 et varie peu de la configuration employee dans 5.8. Securisation approfondie avec GrSecurity - exception faite des modifications relatives a l'emploi de lvserver. Vous devez avoir un fichier de configuration pour GrSecurity dans /etc/ sysctl.conf.grsecurity (referez vous a 5.8. Securisation approfondie avec GrSecurity - 5.8.2) auquel cas je vous suggere de positionner l'activation GrSecurity a 0 le temps de l'installation (un sysctl est tout de meme plus rapide qu'un reboot) : kernel/grsecurity/grsec_lock=0 Si vous n'avez pas ce fichier de configuration, reportez vous a l'annexe 17 puis creez le fichier '/home/system/security/apply_grsec.sh' : #!/bin/sh /sbin/sysctl -p /etc/sysctl.conf.grsecurity et configurez le systeme pour que ce script soit appelle au boot : cd /etc/rc2.d ln -s /home/system/security/apply_grsec.sh S{XX}apply_grsec ou {XX} correspond a votre priorite de lancement par rapport aux autres scripts executes lors du boot du systeme. Rebootez le systeme sur le nouveau noyau et si tout fonctionne normalement, n'oubliez pas de suivre la fin de la procedure II.b. Installation du noyau. XI.b Installation de l'interface linux-vserver utilisateur ---------------------------------------------------------- Nous installons les binaires utilisateurs sur le systeme (pour beneficier des scripts disponibles) mais conservons la configuration dans /home/system pour la sauvegarde : cd /home/system/applis tar jxvf ../download/util-vserver-0.30.tar.bz2 find ./util-vserver-0.30/ -type f \( -perm -004000 -o -perm -002000 \) \ -exec ls -la {} \; chown -R root:root util-vserver-0.30/ chmod 750 util-vserver-0.30/ mkdir /home/system/applis/linux-vserver cd util-vserver-0.30/ mkdir /home/system/vservers ./configure --sysconfdir=/home/system/vservers/ make mount -o remount,rw /usr make install mount -o remount /usr XI.c Configuration initiale et espace reserve aux serveurs virtuels ------------------------------------------------------------------- Divers scripts emploient la configuration suivante, donnons leurs donc la possibilite de fonctionner correctement : ln -s /home/system/vservers/vservers.conf /etc/vservers.conf chmod 640 /home/system/vservers/vservers.conf ln -s /home/system/vservers/vservers/ /etc/vservers chmod 750 /home/system/vservers/init.d/* Nous partons du principe que nos serveurs virtuels doivent etre lances au demarrage du serveur hote (si la configuration l'indique bien entendu) : ln -s /home/system/vservers/init.d/vservers /etc/init.d/vservers et remplacez les occurences "/var/lock/subsys/" par "/var/lock". Nous partons du principe egalement que tous les serveurs virtuels doivent etre en mesure de pouvoir rebooter (a votre convenance en fait) : ln -s /home/system/vservers/init.d/rebootmgr /etc/init.d/rebootmgr et remplacez les occurences "/var/lock/subsys/" par "/var/lock". Je suppose que vous allez dedier une partition au stockage de vos serveurs virtuels - prenez donc garde a employer une partition montee en mode 'defaults' (nous ne voulons donc pas du sempiternel ro,noexec,nosuid,nodev). J'emploierai donc la partition /local par la suite. mkdir /local/vservers chattr +t /local/vservers ln -s /local/vservers /vservers chmod 000 /local/vservers XI.d Installation du serveur de reference ----------------------------------------- Commencez par patcher le script debian-newvserver.sh recupere avec le patch disponible en ANNEXE 18 : cd /home/system/applis cp ../download/debian-newvserver.sh debian-newvserver.sh patch -p0 < debian-newvserver-DS.patch chmod 750 debian-newvserver.sh ./debian-newvserver.sh --hostname votre_nom --domain domain --ip votre_ip \ --copy-vreboot votre_nom sera employe pour la creation du repertoire /vservers/NOM votre_ip sera l'adresse IP du serveur virtuel. NDR : o J'emploi le nom 'reference' par la suite. o Le script debian-newvserver.sh commence par recuperer des sources et un certain nombre de packages donc prenez votre mal en patience... o Ne redirigez pas la sortie car des questions vous seront posees via une interface ncurse. Si tout se passe correctement, vous parvenez a une partie qui vous semblera habituelle (N'oubliez pas que vous etes en train d'installer le systeme de reference, c'est a dire un systeme qui n'offrira jamais de services mais sera employe comme source pour les fichiers communs aux serveurs virtuels), donc : o Zone horaire : Europe/Paris o Activation md5 : oui o Activation shadow : oui o mot de passe Administrateur o Creer un nouvel utilisateur : Oui o Exim : Choisissez (4) et entrez le nom de votre utilisateur. Editez le fichier de configuration /etc/vservers/reference.conf pour ajouter les entrees suivantes : ONBOOT="no" S_CONTEXT={Choisissez votre numero de contexte} S_NICE="10" Supprimez les packages du repertoire de cache du serveur de reference (ils ont ete copies par le script dans le repertoire /local/vservers/ARCHIVES/) : rm -f /local/vservers/reference/var/cache/apt/archives/*.deb !!! Positionnez les droits suivants : chmod 755 reference reference/var !!! Note : Si vous voulez employer dselect par la suite dans l'hote de reference je vous conseille de l'executer maintenant (dselect, update, select, install) car d'autres packages seront installes. cd /local/vservers/ Copiez l'ANNEXE 15 dans un fichier /local/vservers/debian-secinst.sh en editant la configuration situee au debut du script, puis : chmod 700 reference/debian-secinst.sh vserver reference exec /debian-secinst.sh -A vserver reference stop rm -f reference/debian-secinst.sh Editez le fichier reference/etc/login.defs et modifiez les directives UID_MIN UID_MAX, GID_MIN et GID_MAX de facon a ce que la creation d'utilisateurs et de groupes soient distinctes de celles qui existent dans votre hote. Je vous conseille d'utiliser ces directives en rapport avec le contexte du vserver (si le contexte est par exemple 42000, vous pouvez employer respectivement les valeurs 42000, 42500, 42800, 42900). N'oubliez pas de faire de meme pour les directives du fichier reference/etc/adduser.conf. Note : Le systeme de reference pese a ce moment environ 100 Mo et compresse dans un tarball, il s'eleve a environ 40 Mo (je vous recommande d'ailleurs d'en creer un maintenant ;) Vous pouvez maintenant tester votre serveur virtuel avec 'vserver reference enter' ou 'vserver reference start'. XI.e Installation des serveurs virtuels --------------------------------------- Debutez en creeant le script d'installation et ses fichiers de configuration dans /local/vservers. Le script d'installation DS_setup_vserver.sh est disponible en annexe 19 et les trois patchs pour la configuration Apache sont presents en annexe 20. Le fichier de configuration standard Apache (httpd.conf pour les quelques lignes qui suivent) est disponible en annexe 6. Note : N'oubliez pas si vous copiez/collez les annexes de verifier les sauts de ligne dans le fichier de destination. cd /local/vservers/ chmod 750 DS_setup_vserver.sh cp httpd.conf httpd.conf.orig patch -p0 < DS_setup_vserver-http.conf.patch mv httpd.conf DS_setup_vserver-http.conf cp httpd.conf.orig httpd.conf patch -p0 < DS_setup_vserver-http_ssl.conf.patch mv httpd.conf DS_setup_vserver-https.conf mv httpd.conf.orig httpd.conf patch -p0 < DS_setup_vserver-http_ssl_php.conf.patch mv httpd.conf DS_setup_vserver-https-php.conf rm -f DS_setup_vserver-http*.patch Note : Sachant que vous aller lancer le script d'installation en root, je ne saurais que trop vous indiquer d'y jeter un coup d'oeil ? Par la suite : * le systeme de reference est nomme 'reference' et est localise dans /local/vservers/reference/ ; * le serveur web est nomme www_DS (@IP : 10.1.1.142) et est localise dans /local/vservers/www_DS ; * le serveur ssh est nomme ssh_DS (@IP : 10.1.1.142) et est localise dans /local/vservers/ssh_DS ; * l'arborescence Web est situee dans /local/vservers/www_DS/ pour le serveur web et dans /local/vservers/ssh_DS/mnt/ pour le serveur SSHd. Nous commencons par installer Apache dans l'hote de reference : cd /local/vservers/ vserver reference enter --nodev reference> apt-get install apache apache-doc libapache-mod-ssl libapache-mod-ssl-doc reference> /etc/init.d/apache stop reference> update-rc.d -f apache remove reference> exit vserver reference stop mv reference/var/cache/apt/archives/*.deb ARCHIVES/ Note : Pour ceux qui n'auraient pas l'intention de lire jusqu'au bout, cette note est placee a un endroit ou je pense que vous la lirez :). Donc, si vous employez ce script pour les autres types d'installation configures, il vous faut d'une part le package openssl (pour les type 2 et 3) dans le serveur maitre et d'autre part les packages convenables dans le serveur reference. Nous creons les vservers Web puis Ssh : ./DS_setup_vserver.sh -r reference -n www_DS -v www_DS -i 10.1.1.142 \ -c 14202 -t 2 ./DS_setup_vserver.sh -r reference -n ssh_DS -v ssh_DS -i 10.1.1.142 \ -c 14210 -t 10 Vous devez maintenant choisir lequel des deux vservers prend la main pour monter l'interface reseau. Je choisis l'hote ssh donc commentez la directive IPROOTDEV="eth0" dans le fichier /etc/vservers/www_DS.conf. Nous creons le script d'initialisation du serveur Ssh pour monter un partage sur l'arborescence Web au boot du vserver /etc/vservers/ssh_DS.sh : ------- #!/bin/sh case $1 in pre-start) if [ -d /local/vservers/www_DS/var/www/htdocs ] ; then mount --bind /local/vservers/www_DS/var/www /local/vservers/ssh_DS/mnt fi ;; post-start) ;; pre-stop) ;; post-stop) if [ -d /local/vservers/www_DS/var/www/htdocs ] ; then umount /local/vservers/ssh_DS/mnt fi ;; esac ------- chmod 750 /etc/vservers/ssh_DS.sh Nous testons la configuration Apache puis demarrons les vservers : vserver www_DS exec apache -t vserver www_DS start vserver ssh_DS start Vous pouvez verifier les processus : vps aux | grep DS root 29761 14202 www_DS [...] 16:12 0:00 /usr/sbin/apache root 333 14202 www_DS [...] 16:12 0:00 /sbin/syslogd www-data 15362 14202 www_DS [...] 16:12 0:00 /usr/sbin/apache www-data 4232 14202 www_DS [...] 16:12 0:00 /usr/sbin/apache root 27917 14210 ssh_DS [...] 16:12 0:00 /usr/sbin/sshd root 21160 14210 ssh_DS [...] 16:12 0:00 /sbin/syslogd Vous ne pouvez pas encore vous logguer en SSH sur le vserver ssh_DS car les restrictions d'acces pour root sont activees donc creez un utilisateur sur le systeme : vserver ssh_DS enter ssh_DS> adduser --uid 14201 simsim exit Nous changeons les permissions restrictives sur l'arborescence Web : chattr -ti www_DS/var/www/htdocs/index.html Vous pouvez maintenant vous connecter au systeme en SSH, prendre l'identite root et mettre en place les droits pour les administrateurs Web : ssh_DS> su - ssh_DS> groupadd -g 33 www-data ssh_DS> groupadd -g 14251 webadm ssh_DS> chown -R root.webadm /mnt/ ssh_DS> chmod 3775 /mnt/htdocs/ && chmod 664 /mnt/htdocs/index.html ssh_DS> usermod -G webadm simsim ssh_DS> exit ssh_DS> exit Vos administrateurs Web peuvent desormais acceder en lecture/ecriture au DR du serveur Web. Neanmoins, comme le point de montage est partage avec le serveur web, autant faire propre donc : chattr -ti www_DS/etc/group echo "webadm:x:14251:" >> www_DS/etc/group chattr +ti www_DS/etc/group XI.f Continuons quelque peu --------------------------- Vos administrateurs voudraient peut-etre acceder aux fichiers de log du serveur Web ? : vserver www_DS enter www_DS> /etc/init.d/apache stop www_DS> mv /var/log/apache /var/www/apache_logs www_DS> chown -R root:webadm /var/www/apache_logs/ www_DS> chmod 3755 /var/www/apache_logs/ www_DS> cd /var/log/ www_DS> ln -s ../www/apache_logs/ apache www_DS> /etc/init.d/apache start www_DS> exit --- Vos administrateurs SSH auront sans doutes besoin de l'utilitaire htpasswd. Bien que la methode brise nos liens hard avec le serveur de reference : cp -p www_DS/usr/bin/htpasswd ssh_DS/usr/bin/ cp -p www_DS/usr/lib/libexpat.so.* ssh_DS/usr/lib/ --- Vos administrateurs SSH voudraient peut-etre acceder a certains fichiers de log du systeme sans passer root ? : vserver ssh_DS enter ssh_DS> chown root.adm /var/log/{auth.log,cron.log,daemon.log,syslog} ssh_DS> usermod -G adm,webadm simsim ssh_DS> exit --- Vous desirez activer les extensions CGI et SSI ? Les trois types 1,2 et 3 d'installation Apache de DS_setup_vserver.sh incluant Bash (pour les packages systeme) et Perl (pour les dependances de package Apache), reportez vous a la partie "IV.f. Etapes de configuration supplementaires" de ce document pour la configuration du fichier httpd.conf. --- Vous devez sans doute faire face desormais a la question suivante : "Comment permettre aux administrateurs Web de modifier le comportement du serveur Web sachant qu'ils n'ont pas acces a la configuration Apache". Plusieurs solutions sont envisageables : o exporter la configuration Apache via mount --bind dans un repertoire accessible par Apache et definir un moyen pour signaler un "restart" au serveur Apache. => Un "restart" automatique dans la crontab du vserver Apache ? => Exporter une crontab du vserver Apache dans un repertoire du vserver SSH ? o mettre en place une interface HTTP(S) sur le serveur Web. o ... Ces solutions presentent les desavantages majeurs d'ouvrir des chemins d'acces entre les deux environnements que nous avons cloisonnes, l'obligation de supprimer le flag immutable sur le fichier httpd.conf et la possibilite pour un administrateur Web d'obtenir un acces root facilite (?!)... Donc, reservons nous pour un emploi judicieux de directives AllowOverride dans ce meme fichier pour permettre aux administrateurs Web de modifier le comportement du serveur via des fichiers .htaccess. --- Vous avez sans doute besoin d'une rotation de vos fichiers de logs ? En ce qui me concerne, j'utilise pour mes vservers dedies ssh et www, le fichier de configuration syslog.conf suivant : auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none;cron.none /var/log/syslog cron.* /var/log/cron.log qui genere donc trois fichiers de logs dans le var/log du vserver concerne. J'emploie ensuite le script suivant que je positionne au niveau du serveur hote dans le repertoire /etc/cron.daily : /etc/cron.daily/vsrv_sysklogd : --------------------------------------------------------------------------- #! /bin/sh test -x /usr/sbin/syslogd-listfiles || exit 0 test -x /usr/bin/savelog || exit 0 test -x /sbin/syslogd || exit 0 test -d /usr/share/doc/sysklogd || exit 0 set -e VSERVERS_PATH="/vservers/" VSERVERS="ssh_DS www_DS" for vsrv in $VSERVERS ; do if [ -d "$VSERVERS_PATH/$vsrv/var/log" ] ; then cd "$VSERVERS_PATH/$vsrv/var/log" for LOG in `syslogd-listfiles -f "$VSERVERS_PATH/$vsrv/etc/syslog.conf"` ; do logfile="$VSERVERS_PATH/$vsrv$LOG" if [ -s "$logfile" ] ; then savelog -g adm -m 640 -u root -c 7 $logfile >/dev/null fi done /usr/local/sbin/vserver --silent $vsrv exec /etc/init.d/sysklogd restart fi done --------------------------------------------------------------------------- Et pour finir, la configuration suivante est utilisee pour tourner les logs du serveur Apache (toujours au niveau du serveur hote) : /etc/logrotate.d/www_DS_apache : --------------------------------------------------------------------------- /vservers/www_DS/var/www/apache_logs/*.log { daily missingok rotate 7 compress delaycompress notifempty create 640 root www-data sharedscripts postrotate /home/system/vservers/logrotate/www_DS_reload_apache.sh > /dev/null endscript } --------------------------------------------------------------------------- /home/system/vservers/logrotate/www_DS_reload_apache.sh : --------------------------------------------------------------------------- #!/bin/sh /usr/local/sbin/vserver --silent www_DS exec /etc/init.d/apache reload --------------------------------------------------------------------------- XI.g Mise a jour des vservers dedies ------------------------------------ Cette partie semble la plus delicate. L'avantage du serveur de reference est qu'il est l'unique interface necessaire pour faire les mises a jours via apt. Le desavantage est que lors de ces mises a jour, nous devons "desunifier" les fichiers mis a jour sur les serveurs dedies et les lier a nouveau avec des hard links sur les nouveaux fichiers. Le script DS_setup_vserver va nous aider a regler ce probleme 'facilement' et comme un exemple concret vaut bien une explication theorique et que les packages mysql sont mis a jour (tant mieux (?)), voici une procedure complete. Mon installation comporte trois vservers dedies : deux vservers type 4 (Apache + ModSSL + Php4 + Php4-mysql) et un vserver type 21 (mysqld). vserver reference enter --nodev apt-get update apt-get dist-upgrade -d exit vserver reference stop Les nouveaux packages a mettre en place sont les suivants 'libmysqlclient10 mysql-client mysql-common mysql-server'. Nous devons donc les mettre en place sur le serveur de reference, supprimer les packages des vservers dedies et les re-unifier. Nous debutons en verifiant quels sont les packages que nous devrons reunifier sur les vservers dedies : for i in libmysqlclient10 mysql-client mysql-common mysql-server; do find /vservers/*/var/lib/dpkg/info -name "$i.list"; done => qui me donne (j'ai trie la sortie) : /vservers/reference/var/lib/dpkg/info/libmysqlclient10.list /vservers/reference/var/lib/dpkg/info/mysql-client.list /vservers/reference/var/lib/dpkg/info/mysql-common.list /vservers/reference/var/lib/dpkg/info/mysql-server.list /vservers/mysql/var/lib/dpkg/info/libmysqlclient10.list /vservers/mysql/var/lib/dpkg/info/mysql-client.list /vservers/mysql/var/lib/dpkg/info/mysql-common.list /vservers/mysql/var/lib/dpkg/info/mysql-server.list /vservers/www_DS1/var/lib/dpkg/info/libmysqlclient10.list /vservers/www_DS1/var/lib/dpkg/info/mysql-common.list /vservers/www_DS2/var/lib/dpkg/info/libmysqlclient10.list /vservers/www_DS2/var/lib/dpkg/info/mysql-common.list Nous commencons par le vserver Mysql : cd /vservers/ vserver reference enter --nodev apt-get dist-upgrade exit vserver reference stop vserver mysql stop # (bah oui quand meme ;)) ./DS_setup_vserver.sh -D -r reference -n mysql -v mysql -O "libmysqlclient10,mysql-client,mysql-common,mysql-server" # On supprime ./DS_setup_vserver.sh -U -r reference -n mysql -v mysql -O "libmysqlclient10,mysql-client,mysql-common,mysql-server" # On unifie chattr -ti /vservers/mysql/etc/mysql/my.cnf # Nous editons /vservers/mysql/etc/mysql/my.cnf pour commenter skip_networking chattr +ti /vservers/mysql/etc/mysql/my.cnf vserver mysql start Nous continuons avec les deux vservers Apache : ./DS_setup_vserver.sh -D -r reference -n www_DS1 -v www_DS1 -O "libmysqlclient10,mysql-common" # On supprime ./DS_setup_vserver.sh -U -r reference -n www_DS1 -v www_DS1 -O "libmysqlclient10,mysql-common" # On unifie vserver www_DS1 exec /etc/init.d/apache reload ./DS_setup_vserver.sh -D -r reference -n www_DS2 -v www_DS2 -O "libmysqlclient10,mysql-common" # On supprime ./DS_setup_vserver.sh -U -r reference -n www_DS2 -v www_DS2 -O "libmysqlclient10,mysql-common" # On unifie vserver www_DS2 exec /etc/init.d/apache reload XI.h Points de securisation supplementaires ------------------------------------------- Vous pouvez egalement beneficier des avantages du patch noyau GrSecurity. Par exemple, vos utilisateurs SSH peuvent se voir denier le droit d'ouvrir des socket reseau (verifiez les gids que vous avez positionne dans votre fichier /etc/sysctl.conf.grsecurity) : vserver reference enter reference> apt-get install netcat reference> exit mv reference/var/cache/apt/archives/netcat_1.10-21_i386.deb ARCHIVES/ ./DS_setup_vserver.sh -U -r reference -n ssh_DS -v ssh_DS -O "netcat" Connectez vous en ssh sur le vserver ssh_DS et entrez la commande nc -l 4242 qui aboutira sans probleme. vserver ssh_DS enter ssh_DS> groupadd -g 1005 grsec_sockall ssh_DS> groupadd -g 1006 grsec_sock_cl ssh_DS> groupadd -g 1007 grsec_sock_srv ssh_DS> groupadd -g 1004 grsec_tpe ssh_DS> groupadd -g 1008 grsec_audit ssh_DS> usermod -G adm,webadm,grsec_sockall simsim ssh_DS> exit Connectez vous en ssh sur le vserver ssh_DS et testez a nouveau ... Je vous recommande donc de placer tous vos utilisateurs du vserver ssh dans le groupe approprie pour l'ouverture des sockets et de configurer le serveur apache pour qu'il ne puisse pas etablir de connexion (sauf si vous en avez besoin bien entendu). --- Note : ce qui suit est donne a titre d'information. L'emploi de cette config. sur un hote abritant de nombreux vservers (y compris des vservers executant des systemes complets) entraine un certain nombre de choix malheureux a faire. La version actuelle du patch noyau et des utilitaires vservers laisse par defaut acces au systeme de fichier /proc (cela devrait etre le contraire dans les prochaines versions). Un utilitaire a telecharger separement permet de restreindre la visibilite des entrees. Pour ce faire, nous employons dans l'hote la commande suivante pour masquer l'ensemble des entrees (la commande s'annule avec le flag vproc -e) : find /proc -regex "/proc/[a-zA-Z].*" -exec \ /home/system/applis/vproc-0.01/vproc -d {} \; Note : jetez un coup d'oeil si le coeur vous en dit au contenu de /proc dans votre vserver. Nous positionnons ensuite quelques cles comme visible : /home/system/applis/vproc-0.01/vproc -e /proc/*info /home/system/applis/vproc-0.01/vproc -e /proc/{crypto,stat,uptime,loadavg} --- Pour ceux qui sont interesses : cp -p /etc/ld.so.preload ssh_DS/etc/ cp -p /lib/libsafe.so.2.0.16 ssh_DS/lib/ cp -p /etc/ld.so.preload www_DS/etc/ cp -p /lib/libsafe.so.2.0.16 www_DS/lib/ cd ssh_DS/lib/ && ln -s libsafe.so.2.0.16 libsafe.so.2 && cd - cd www_DS/lib/ && ln -s libsafe.so.2.0.16 libsafe.so.2 && cd - XI.i Notes finales ------------------ Avant de demarrer votre serveur, n'oubliez pas de verifier que les demons reseau en ecoute sur l'hote ne se mettent pas en ecoute sur 0.0.0.0. Le cas echeant, vous ne pourrez acceder a vos serveurs virtuels. Si vous rencontrez des problemes pour les utilisateurs non-root. Pensez a utiliser les commandes "ls -lad" et "lsattr" pour verifier les permissions. Je vous recommande lorsque vous creez des utilisateurs dans les vservers d' employer des uids/gids specifiques au serveur virtuel concerne (meme si cela n'est pas specialement trivial) via les fichiers de configuration login.defs et adduser.conf. Prenez garde lorsque vous editez un fichier "hard-link" dont vous souhaitez qu'il reste commun a plusieurs vservers. Faites le test avec "emacs". XI.j Quelques informations sur le script DS_setup_vserver --------------------------------------------------------- Notez que vous devez toujours installer les packages dans l'hote de reference avant d'utiliser ce script. Notez egalement que certaines commandes appellees par le script (openssl par exemple) doivent egalement etre installees dans l'hote principal. Pour finir, ce script repond pour l' instant a mes attentes en terme de fonctionalites et est facilement configurable ou modifiable. Je sais qu'un readme serait appreciable comme je sais que les versions alpha des utilitaires vservers sont sans doute bien plus performantes. =============================================================================== XII. SYSTEME DE COURRIER ======================== Ce chapitre presente les procedures a suivre pour installer un systeme de courrier base sur les composants Postfix, Popa3d et Pop-before-smtp. L'objectif est d'obtenir un systeme de courrier sur lequel les utilisateurs sont des utilisateurs virtuels (sans compte d'acces au systeme) et assurant une gestion de domaines multiples. Les utilisateurs distants pourront envoyer des emails une fois qu'ils auront effectue un premier pop sur le serveur. Note : Cette procedure a ete realisee dans un vserver de reference (voir XI. LINUX-VSERVER + GRSECURITY) et a permis de mettre en place un vserver dedie au systeme de courrier. Le contexte est le suivant : o Les domaines a gerer sont domain1 et domain2 ; o Deux utilisateurs virtuels un@domain1 et deux@domain2 sont configures. XII.a Postfix ------------- Installez Postfix a partir des packages Debian - Precisez que vous ferez la configuration vous meme. XII.b Popa3d ------------ Recuperez l'archive popa3d-0.6.4.1.tar.gz (http://www.openwall.com/popa3d/). cd /home/system/applis tar zxvf ../download/popa3d-0.6.4.1.tar.gz ___Dans le cas d'une installation de pop-before-smtp___ Note : Dans le cas d'une installation de pop-before-smtp, vous devez patcher le demon popa3d pour qu'il inscrive les adresses IP des clients lors d'une identification pop reussie (le patch est disponible en annexe 22). patch -p0 < ../download/popa3d-0.6.4.1.patch ___on continue___ cd popa3d-0.6.4.1 Lisez le fichier INSTALL, puis modifiez les fichier suivants : Makefile : ---------- # Linux with glibc, FreeBSD, NetBSD - #LIBS += -lcrypt + LIBS += -lcrypt Params.h : ---------- -#define POP_STANDALONE 0 +#define POP_STANDALONE 1 -#define POP_VIRTUAL 0 +#define POP_VIRTUAL 1 -#define VIRTUAL_HOME_PATH "/vhome" +#define VIRTUAL_HOME_PATH "/var/mail/vhosts" -#define VIRTUAL_ONLY 0 +#define VIRTUAL_ONLY 1 -#define MAIL_SPOOL_PATH "/var/mail" +#define MAIL_SPOOL_PATH "/var/mail/vhosts" -#define SYSLOG_FACILITY LOG_DAEMON +#define SYSLOG_FACILITY LOG_MAIL make && make install groupadd popa3d useradd -g popa3d -d /dev/null -s /dev/null popa3d mkdir -m 755 /var/empty Notes : o ce script est celui present dans le package Debian popa3d. o les '\' presents dans le script servent a faciliter le cat > xxx << EOF. cat > /etc/init.d/popa3d << EOF #! /bin/sh test -f /usr/local/sbin/popa3d || exit 0 DAEMON=/usr/local/sbin/popa3d NAME=popa3d ARGS="-D" case "\$1" in start|restart|force-reload) echo -n "Starting pop daemon: " start-stop-daemon --start --name popa3d --exec \$DAEMON -- \$ARGS echo \$NAME ;; stop) echo -n "Stopping pop daemon: " kill -9 \`pidof popa3d\` echo \$NAME ;; *) echo "Usage: /etc/init.d/popa3d {start|stop|restart|force-reload}" exit 1 esac exit 0 EOF chmod 750 /etc/init.d/popa3d # Si vous ne faites pas l'installation dans le vserver de reference, vous # pouvez demarrer le service et l'ajouter dans les runlevels /etc/init.d/popa3d start update-rc.d popa3d defaults XII.c Pop-before-smtp --------------------- apt-get install pop-before-smtp /etc/init.d/pop-before-smtp stop Dans /etc/pop-before-smtp/pop-before-smtp.conf, commentez le pattern de detection configure pour "UW ipop3d/imapd" et decommentez le pattern "popa3d". Verifiez les parametres d'initialisation de /etc/init.d/pop-before-smtp : o la localisation du fichier de log a surveiller ; o la localisation du fichier de base d'adresses IP. # Si vous ne faites pas l'installation dans le vserver de reference, vous # pouvez demarrer le service et l'ajouter dans les runlevels /etc/init.d/pop-before-smtp start update-rc.d pop-before-smtp defaults XII.d Installation dans un vserver dedie ---------------------------------------- Si vous effectuez cette installation dans l'objectif d'installer un vserver dedie, il est maintenant temps d'installer le vserver. Note : employez, bien entendu, votre propre parametrage ({@IP}, contexte et noms de vservers. cd /vservers/ ./DS_setup_vserver.sh -r reference -n mail -v mail -H mail -i {@IP} -c {CTX} -t 40 ./DS_setup_vserver.sh -U -r reference -n mail -v mail -t 42 ./DS_setup_vserver.sh -U -r reference -n mail -v mail -t 41 Vous pouvez maintenant passer a la configuration du vserver. XII.e Configuration du systeme ------------------------------ Note : Si vous faites l'installation pour un vserver dedie, l'arborescence racine dans le reste de cette procedure est bien entendu /vservers/mail/. Creez un utilisateur vmail (pour un vserver) : chattr -ti /vservers/mail/etc/{passwd,shadow} vserver mail enter --nodev useradd -g nogroup -d /dev/null -s /dev/null vmail exit vserver mail stop chattr +ti /vservers/mail/etc/{passwd,shadow} Creez un utilisateur vmail (systeme standard) : useradd -g nogroup -d /dev/null -s /dev/null vmail Creez les repertoires relatifs a la gestion de vos domaines : cd /var/mail mkdir -m 2775 vhosts && chown root.mail vhosts # Les repertoires de stockage pour les domaines doivent etre nommes selon # leur adresse IP mkdir -m 2775 vhosts/{@IP_domain1} && chown root.mail vhosts/{@IP_domain1} mkdir -m 2775 vhosts/{@IP_domain2} && chown root.mail vhosts/{@IP_domain2} mkdir vhosts/{@IP_domain1}/auth vhosts/{@IP_domain1}/mail mkdir vhosts/{@IP_domain2}/auth vhosts/{@IP_domain2}/mail chown root.mail vhosts/{@IP_domain1}/mail vhosts/{@IP_domain2}/mail chmod 2775 vhosts/{@IP_domain1}/mail vhosts/{@IP_domain2}/mail chmod 750 vhosts/{@IP_domain1}/auth vhosts/{@IP_domain2}/auth Creez l'authentification pour vos utilisateurs 'un' et 'deux' ({mdp} est le de passe de l'utilisateur et {salt} est une chaine de 8 caracteres correspondant a la graine qui sera employee lors de la generation du mot de passe) : cd vhosts/{@IP_domain1}/auth/ perl -e 'print "vmail:".crypt($ARGV[0],"\$1\$$ARGV[1]")."::\n"' {mdp} {salt} > un cd - cd vhosts/{@IP_domain2}/auth/ perl -e 'print "vmail:".crypt($ARGV[0],"\$1\$$ARGV[1]")."::\n"' {mdp} {salt} > deux cd - Note : Vous pouvez employer la commande makepasswd (du package du meme nom) pour generer votre salt. Mettez en place la configuration Postfix a partir des fichiers presents en annexe 24 - Fichiers de configuration Postfix : o Faites attention a ce que l'uid dans la directive 'virtual_uid_maps' soit bien celle de votre propre utilisateur 'vmail'. o Generez les db pour tous les fichiers presents dans le repertoire de configuration postfix (/etc/postfix/conf/) avec la commande postmap. ================================================================================ XIII. BIND9 =========== Un grand nombre de documentations d'installation de Bind9 sont disponibles sur le Net. Comme je n'entendais pas ajouter une annexe avec quelques fichiers de configuration sans preciser le pourquoi du comment ... Vous pouvez donc les consulter en ANNEXE 23. Si vous voulez installer Bind9 dans un vserver ou si vous voulez mettre en place la restriction d'utilisateur ou le chroot du processus, vous pouvez vous referer a la fonction "end_config_bind9()" du script present en ANNEXE 19 et au script concerne. ================================================================================ WEBOGRAPHIE =========== Figurent ici quelques liens que j'ai consulte lors de la redaction de cette documentation ainsi que les liens vers les outils utilises. DOCUMENTATIONS -------------- Guide du nouveau responsable Debian : http://www.debian.org/doc/manuals/maint-guide/ (francais) Guide de securite Gentoo Linux : http://www.gentoo.org/doc/en/gentoo-security.xml (anglais) http://www.gentoo.org/doc/fr/gentoo-security.xml (francais) Making Bootable Linux CDs : http://www.geocities.com/potato.geo/bootlinuxcd.html (anglais) Securing Debian Manual : http://www.debian.org/doc/manuals/securing-debian-howto/index.html (anglais) Documentations Linux-Vserver : http://www.linux-vserver.org/index.php?page=Documentation LIENS DIVERS ------------ Debian : http://www.debian.org/ FSF : http://www.fsf.org/ GNU : http://www.gnu.org/ Kernel : http://www.kernel.org/ OUTILS ------ AIDE : http://www.cs.tut.fi/~rammer/aide.html Apache : http://www.apache.org/ GrSecurity : http://www.grsecurity.net/ Ibm Websphere : http://www-3.ibm.com/software/webservers/appserv/ LibSafe : http://www.research.avayalabs.com/project/libsafe/ Linux-Vserver : http://www.linux-vserver.org Mod_SSL : http://www.modssl.org/ Modular-Syslog : http://sourceforge.net/projects/msyslog/ NetFilter : http://www.netfilter.org/ OpenSSL : http://www.openssl.org/ OpenWall : http://www.openwall.com/linux/ Pax : http://pageexec.virtualave.net Pop-before-smtp : http://popbsmtp.sourceforge.net/ Popa3d : http://www.openwall.com/popa3d/ PostFix : http://www.postfix.org/ Prelude : http://www.prelude-ids.org/ Samba : http://www.samba.org/ TomSrtBt : http://www.toms.net/rb/ VsFtpD : http://vsftpd.beasts.org/ ================================================================================ VERSIONS ======== v0.2.2 (22/08/2004) : --------------------- Un nombre consequent de modifications et de corrections a ete pris en compte pour cette version - je vous laisse consulter le sommaire et les annexes pour en avoir un apercu. Les commentaires de plusieurs lecteurs et un emploi frequent des procedures decrites ont permis, je l'espere, de corriger les fotes et de preciser certains points. Certaines questions m'ont egalement ammene a ajouter quelques commandes qu'il est ardu de garder en memoire sans employer le man... v0.2.0 (/07/2004) et v0.2.1 (/08/2004) : ---------------------------------------- Versions de travail. v0.1.12 (20/12/2003) : ---------------------- Modifications : # IV.b. Configuration initiale : Precision pour l'ajout du groupe webadm. # 4.4. Recherche et modifications de droits de fichiers : Note quand a la suppression des privileges. # 4.12. Preparation d'une restauration du systeme en cas d'incident : Note sur la compilation de gnu tar en statique. Ajouts : # III.c. SmartHost Exim # III.d. Client Samba # VIII. INSTALLATION D'UN DEMON NAGIOS # IX. GRAPHIQUES MRTG POUR LE SERVER-STATUS APACHE # ANNEXE 14 - Script d'initialisation Nagios v0.1.11 (02/11/2003) : ---------------------- Modifications : # V.c. Recommandations: Reverse-Proxy Apache pour la console d'admin web WAS + localisation des donnees a editer pour modifier les ressources memoire. # 3.3. Fichiers de configuration de l'environnement administrateur: shortcuts pour bash dans le fichier .inputrc # 3.5. Securisation minimale (en mode super-utilisateur): Desactivation de lpr dans /etc/cron.weekly # ANNEXE 13 - ACLs GrSecurity pour Debian-secinst: Beaucoup de modifications et d'ajouts v0.1.10 (26/10/2003) : ---------------------- Ajouts : # 5.8. Securisation approfondie avec GrSecurity # ANNEXE 11 - Parametres de configuration d'un noyau GrSecurity # ANNEXE 12 - Configuration Sysctl de GrSecurity # ANNEXE 13 - ACLs GrSecurity pour Debian-secinst Modifications : # Quelques corrections v0.1.9 (01/06/2003) : --------------------- Ajouts : # REMERCIEMENTS : Ajout de remerciements avant les annexes. Modifications : # '1. INSTALLATION DU SYSTEME' : Une note sur le branchement reseau du systeme dans le cas d'une installation via un outil comme VmWare (tm). # '2.3. Creez un premier utilisateur' : Ajout d'une note sur l'utilisation de cet utilisateur. # '3.1 Logguez vous sous votre utilisateur puis en root' : precision. # '3.3. Fichiers de configuration de l'environnement administrateur' : Ajout une precision sur ce que sont les administrateurs. # '3.5. Securisation minimale (en mode super-utilisateur)' : Ajout d'une note sur les implications de modification de /etc/securetty. # '3.6. Recompilation du noyau pour le support firewall ipchains' : Ajout d' une note sur l'installation eventuelle d'autres sources de noyau 2.2.x. v0.1.8 (29/05/2003) : --------------------- Publication en ligne de la documentation. Ajouts : # WEBOGRAPHIE : Ajout d'une webographie avant les annexes. Modifications : # '5.7. Installation de Prelude-Lml pour une remontee de log securisee vers un serveur centralise' : Suppression de tout ce qui apparait deja dans la doc specifique Prelude. # 'ANNEXE 4 - Script d'arret/demarrage de prelude-lml' : Suppression du script desormais disponible dans la doc specifique Prelude. # 'ANNEXE 5 - Fichier de regles pour un support Ipchains avec Prelude-lml': Suppression du fichier de regle desormais disponible dans la doc Prelude. v0.1.7 (19/05/2003) : --------------------- Modifications : # '5.2. Installation du wrapper libsafe' : Quelques corrections. # '5.7. Installation de Prelude-Lml pour une remontee de log securisee vers un serveur centralise' : Corrections et utilisation des versions stables a la date de redaction. # 'V. INSTALLATION ET SECURISATION D'UN SERVEUR D'APPLICATION WEBSPHERE' : Indication sur l'installation reussie du wrapper libsafe apres installation de Websphere. v0.1.6 (13/05/2003) : --------------------- Modifications : # '4.12. Preparation d'une restauration du systeme en cas d'incident' : Ajout d'un fichier d'informations contenant les noms des archives a decompacter lors de la restauration => Il est ainsi par exemple possible de preciser de decompacter l'archive de /var avant celle de /usr. Ajout d'un binaire tar compile en statique. # 'ANNEXE 9 - Script de restauration' : Modification du script prenant en compte les modifications de '4.12.Preparation d'une restauration du systeme en cas d'incident'. # Formatage du document en 80 colonnes justifiees a l'exception des annexes. v0.1.5 (06/05/2003) : --------------------- Ajouts : # 4.12. Preparation d'une restauration du systeme en cas d'incident. # ANNEXE 9 - Script de restauration. # ANNEXE 10 - Exemple de script Fdisk. Modifications : # '4.11. Backup du systeme sur une partition specifique' : Modification des explications pour refleter le nouveau script. # 'III.a. J'ai oublie de preparer une partition ..': Ajout d'un appel a e2fsk pour verifier les partitions. # 'ANNEXE 8 - Script de backup' : Modification de la fonctionnalite de backup incremental. Par defaut, on fait un backup incremental de tous les changements survenus depuis la derniere sauvegarde 'full'. Vous pouvez egalement decommenter une ligne qui permet de faire un backup incremental jour apres jour des dernieres modifications effectuees apres le backup. Ajout du flag '-p'. Ajout d'un archivage cpio des repertoires exclus lors d'un backup full. v0.1.4 (23/04/2003) : --------------------- Ajouts : # 4.10. Systeme de fichiers ext3 avec un noyau 2.4 : de ext2 a ext3 # 4.11. Backup du systeme sur une partition specifique # IV.e. Sauvegarde du systeme # V.d. Empreinte du systeme # V.e. Sauvegarde du systeme # VII. INSTALLATION D'UN SERVEUR SAMBA POUR UNE GESTION DE BACKUP # ANNEXE 8 - Script de backup Modifications : # 'ANNEXE 1 ...' et 'ANNEXE 7 ...': Ajout de regles commentees pour autoriser certaines stations a nous envoyer certains types de requetes ICMP et pour autoriser les divers flux du protocole NetBios necessaires a l'integration de la fonctionnalite presentee dans 'VII. INSTALLATION D'UN SERVEUR SAMBA POUR UNE GESTION DE BACKUP'. # '3.5. Securisation minimale (en mode super-utilisateur)': Ajout d'un exemple de banniere de login. # '4.2. Securisation du systeme de fichiers' : Ajout de notes sur les options de montage relatives a la prevision d'installation d'un serveur Web et d'un serveur Was. # '5.3. Conserver une empreinte de verification d'integrite du systeme': Ajout de regles pour la verification d'empreintes. v0.1.3 (16/04/2003) : --------------------- Corrections : # '4.8. Installation et premiers pas avec Modular-Syslog' : Restauration d'un filtrage convenable vers fw_accept/fw_deny.log Modifications : # 'ANNEXE 1 - Parametrage du firewall Ipchains' : Maj de tous les scripts. # 'ANNEXE 7 - Parametrage du firewall NetFilter' : Maj de tous les scripts a l'image de ceux de l'ANNEXE 1. # 'ANNEXE 1 ...' et 'ANNEXE 7 ...' : Deplacement de la configuration /proc/sys/net vers un fichier disjoint. v0.1.2 (15/04/2003) : --------------------- Modifications : # Plusieurs corrections un peu partout. # Reecriture de '5.7. Installation de Prelude-Lml pour une remontee de log securisee vers un serveur centralise' Ajouts : # 1.5. 'Partitionnez le disque dur' : Notes sur le partitionnement relatif a l'installation d'un serveur Web et a l'installation d'un serveur IBM Websphere. # 3.6. 'Recompilation du noyau pour le support firewall ipchains' : Une note sur la faille ptrace. # IV. INSTALLATION ET SECURISATION D'UN SERVEUR APACHE MODSSL # V. INSTALLATION ET SECURISATION D'UN SERVEUR D'APPLICATION WEBSPHERE # VI. INTEGRATION DE NETFILTER / IPTABLES # ANNEXE 6 - Fichier de configuration Apache minimal # ANNEXE 7 - Parametrage du firewall NetFilter v0.1.1 (26/03/2003) : --------------------- Modifications : # 1.5. Partitionnez le disque dur : Changement des tailles prevues pour les partitions. # 4.3. Securisation des comptes : Ajout de la directive 'DEFAULT_HOME no' dans /etc/login.defs # 4.6. Synchronisation horaire avec un serveur NTP : Modification de l'appel crontab pour eviter de recevoir des mails lors des synchronisations periodiques. # 4.8. Installation et premiers pas avec Modular-Syslog: Ajout et modification des regles de filtrage des evenements securite. # ANNEXE 1 - Parametrage du firewall Ipchains : Corrections de regles pour le script de chargement des regles et Ajout de regles pour autoriser les communications avec un manager Prelude. # ANNEXE 2 - Generation automatisee de rapport systeme : Dans STRANGE_FILES, ajout du chemin vers 'find' et modification pour eviter d'envoyer les erreurs vers la sortie standard. Ajout : # 5.7. Installation de Prelude-Lml pour une remontee de log # ANNEXE 4 - Script d'arret/demarrage de prelude-lml # ANNEXE 5 - Fichier de regles pour un support Ipchains avec Prelude-lml v0.1.0 (21/03/2003) : Version initiale. --------------------- ================================================================================