11 KiB
Howto Installer Debian
Nous avons installé des centaines de serveurs Debian passés en production. Nous listons ici certaines modifications appliquées dans une optique d'optimisation et de sécurisation. Attention, ces modifications ne sont pas forcément applicables dans le cas général !
Avant d'installer
Divers conseils :
- Vérifiez la mémoire à l'aide de l'outil memtest86
- Valider le bon fonctionnement de la machine avec un live-CD comme Knoppix
- Sauvegarder le MBR et la table des partitions
- Sauvegarder les éventuelles partitions contenant des utilitaires !
- Tester les disques durs avec un outil comme badblocks
Installation
Via CD-ROM ou PXE, quelques commentaires sur nos choix :
- Choisir anglais/us pour la langue, notamment pour avoir des messages d'erreur en anglais et faciliter la recherche dans les moteurs de recherche
- Nous choisissions le miroir Debian mirror.evolix.org hébergé par nos amis de l'Ecole Centrale de Marseille
- Le partitionnement est le grand moment d'une installation. Entre les habitudes et recettes de grand-mère, voici nos préconisations :
Sauf cas particuliers, optez pour 3 partitions primaires :
200 M pour /boot
500 M pour /
10 G pour /var
Ensuite, des partitions logiques :
5 G pour /usr
500 M pour /tmp
500 M pour swap
500 M pour swap
Si nécessaire (pour des logs web par exemple) créer une partition /var/log de 10 G
Si nécessaire pour des bases de données, créer une partition en LVM afin de bénéficier des snapshots pour une sauvegarde optimisée
L'espace restant (en prenant l'habitude de garder 5 à 10 G d'espace libre) sera réservé pour /home de type LVM si besoin de flexibilité
- Le système de fichiers à choisir est ext4 sauf rares exceptions.
- Ne choisir d'installer aucun des meta-package proposé (décocher tout).
Configuration post-install
Voici nos préconisations post-installation :
- Régler le niveau de debconf à low :
# dpkg-reconfigure -plow debconf
- Ajuster le contenu du fichier
sources.list
:
deb http://mirror.evolix.org/debian/ stretch main
deb http://security.debian.org/ stretch/updates main
deb http://mirror.evolix.org/debian/ stretch-updates main
deb http://pub.evolix.net/ stretch/
Note
: Pour Debian 8, le fichier
sources.list
sera :deb http://mirror.evolix.org/debian/ jessie main deb http://security.debian.org/ jessie/updates main deb http://pub.evolix.net/ jessie/
Puis ne pas oublier d'exécuter :
# apt update
- Désactiver l'installation automatiques des paquets recommandés en ajoutant dans le fichier /root/.aptitude/config :
# aptitude "";
aptitude::Suggests-Important "false";
aptitude::Recommends-Important "false";
- Si vous choississez de monter les partitions avec des permissions particulières (par exemple "read-only" pour /usr et "noexec" pour /tmp), on peut automatiser les changements et afficher un avertissement, via le fichier /etc/apt/apt.conf ou dans un fichier personnalisé placé dans /etc/apt/apt.conf.d/ :
DPkg {
// Warn the user about the auto remount of partitions.
Pre-Invoke {
"echo 'Remounting partitions. Are you sure? Else exit with ^C'; read REPLY; mount -oremount,exec /tmp && mount -oremount,rw /usr";
};
Post-Invoke {
"mount -oremount /tmp && mount -oremount /usr || exit 0";
};
}
- Installation de paquets ou mises-à-jour en pensant à bien regarder les paquets "recommandés" lors d'une installation…
- Installer Postfix, le meilleur serveur mail du monde :
# aptitude install postfix
Postfix sera configuré en en fonction de l'utilisation du serveur
- Installer un certain nombre de paquets indispensables (voir les dépendances du meta-package serveur-base hébergé sur le repository Evolix, ceci ne fonctionnera que si vous l'avez activé dans le sources.list) :
# aptitude install serveur-base ssh
Note : les paquets distribués par Evolix ne sont pas signés donc ne pas tenir compte des erreurs "untrusted packages"
Note : pour apt-listchanges choisir "pager" puis "both" et d'envoyer sur l'adresse de votre choix
- S'assurer que les services inutiles sont désactivés. Ceci n'est plus nécessaire depuis les dernières versions de Debian, mais par réflexe, on fera :
# aptitude purge portmap hotplug nfs-common pidentd
# update-inetd --disable discard,daytime,time,ident
- On choisira l'éditeur par défaut du système (Vim étant le meilleur éditeur du monde...) :
# update-alternatives --config editor
- Configurer les alias mail :
# getent passwd | cut -d":" -f1 | sed "s/$/: root/" > /etc/aliases
On ajustera ensuite les mails pour "root" vers l'adresse mail de votre choix. Et on pourra ajouter les alias suivants : postmaster, abuse, et mailer-daemon. Puis :
# newaliases
- Ajuster le fichier /etc/fstab suivant les restrictions nécessaires. Par exemple :
proc /proc proc defaults 0 0
/dev/sda1 /boot ext' defaults 0 2
/dev/sda2 / ext4 defaults,errors=remount-ro 0 1
/dev/sda3 /var ext4 defaults 0 2
/dev/sda5 /usr ext4 defaults,ro 0 2
/dev/sda6 /tmp ext4 defaults,noexec,nosuid,nodev 0 2
/dev/sda7 none swap sw 0 0
/dev/sda8 none swap sw 0 0
tmpfs /var/tmp tmpfs defaults,noexec,nosuid,nodev 0 2
tmpfs /var/lock tmpfs defaults,noexec,nosuid,nodev 0 2
/dev/mapper/myvol1-home /home ext4 defaults,noexec,nosuid,nodev,usrquota,grpquota 0 2
Note: notez que la partition /usr est montée en read-only par défaut ET que /var/tmp/ et /var/lock sont en TMPFS (ce qui signifie purgé à chaque reboot !!). Ceci est complètement non-standard et contraire au FHS, donc n'appliquer cela que si vous savez ce que vous faites !
- Gestion des quotas. On supprimera le script quotarpc inutile :
# update-rc.d -f quotarpc remove
Si besoin de gérer les quotas, outre l'activation dans le fstab :
# quotaoff -a
# quotacheck -auvg
# quotaon -auvg
# edquota -t
Dans un environnement professionel, nous conseillons de mettre la période de grâce à 30 jours minimum.
- Gestion des ACL si besoin. Outre l'installation du paquet acl, on ajoutera l'option acl dans le fstab pour la partition concernée (probablement /home)
- Changer les heures par défaut dans le fichier /etc/crontab afin d'éviter des surcharges divers à des moments donnés. Par exemple, ainsi :
hourly à Xh13
daily à 1h23
weekly à 3h33
monthly à 4h37
- Par défaut, les journaux système sont gérés par rsyslog. Sa configuration devra être ajustée via le fichier /etc/rsyslog.conf pour notamment activer les logs de cron ou encore désactiver l'écriture en double de certains journaux.
- Pour la rotation des logs système, depuis la dernière version, tout est géré via logrotate.d (et non plus savelog). Attention, les paramètres par défaut conservent très peu de temps certains journaux (quelques semaines voire quelques jours...) et il convient de les ajuster pour les conserver pendant un an (ni plus ni moins). D'autres ajustements peuvent être faits pour dater les fichiers de logs via des actions postrotate de logrotate.
- Configuration de Munin via
/etc/munin/munin.conf
, notamment le hostname.
Si le noyau est patché grsec, il faut ajouter les lignes suivantes dans le fichier /etc/munin/plugin-conf.d/munin-node :
[processes]
user root
- Pour avoir une machine toujours à l'heure, on utilise ntp avec le fichier /etc/ntp.conf :
server ntp.evolix.net
- Droits des utilisateurs
- /etc/profile Définir umask 027 ou umask 077 en fonction de l'utilisation du serveur (gestion de groupes ou non)
- /root/.bashrc Définir umask 077, les fichiers créés par root ne doivent pas être visibles par les utilisateurs !
- /etc/sudoers Voir plus bas la partie sur sudo
- /root Mettre les droits 0700
- /usr/share/scripts Mettre les droits 0700 (répertoire spécifique aux scripts d'Evolix)
- /etc/adduser.conf Régler DIR_MODE
- Pour gérer les accès root, utiliser le logiciel sudo, avec une configuration du type :
# visudo
Defaultsenv_reset, umask=0077
User_Alias ADMIN = pnom1, pnom2, pnom3
ADMIN ALL=(ALL) ALL
- Configurer SSH en interdisant l'accès root direct dans le fichier sshd_config :
PermitRootLogin no
Il est également conseillé d'utiliser la directive AllowUsers pour restreindre l'accès à certains utilisateurs et certaines adresses IP :
AllowUsers pnom1@1.2.3.4 pnom1@::ffff:1.2.3.4
- Soyons parano, on peut restreindre l'accès root à la 5e console ainsi :
# echo tty5 > /etc/securetty
- Installer minifirewall. Cela consiste à télécharger les fichiers (principalement minifirewall et firewall.rc) à partir du repository GIT http://git.evolix.org/?p=evolinux/minifirewall.git;a=summary et les placer respectivement dans /etc/init.d/ et /etc. Il faut ensuite procéder aux ajustements dans le fichier firewall.rc
- Créer le fichier /etc/init.d/alert5 suivant :
#!/bin/sh
date | mail -s'boot/reboot' mail@example.com
/etc/init.d/minifirewall start
Et activer tout cela :
# chmod +x /etc/init.d/alert5 /etc/init.d/minifirewall
# update-rc.d alert5 start 99 2 .
- Pour diverses raisons, on peut limiter le temps de connexion en plaçant une ligne export TMOUT=3600 dans le fichier /etc/profile.
- Enfin, il faut ajuster les droits les moins permissifs possibles. On utilisera par exemple :
# find /etc/ -perm -004
- De la même façon au niveau réseau, on pourra tester les ports ouverts, par exemple avec l'une des commandes suivantes :
# netstat -a -u -t -n -p
# lsof -i
# time nmap -sS -O -T Insane -p 0- YOUR-IP
- Script evomaintenance : pour une administration à plusieurs, nous utilisons un script qui permet d'informer à chaque intervention et de retenir ces informations dans une base de données. Voici comment nous l'utilisons :
# aptitude install evomaintenance
Puis ajuster le fichier de configuration /etc/evomaintenance.cf et autoriser ce script à se lancer sans mot de passe pour les administrateurs via sudo. On ajoutera donc dans le suoders :
Cmnd_Alias MAINT = /usr/share/scripts/evomaintenance.sh
ADMIN ALL=NOPASSWD: MAINT
Note : la règle finale doit être ajoutée à la fin pour avoir plus d'importance que les règles déjà en place.
Pour l'utilisation, les administrateurs placeront dans leur fichier .profile ou .bashrc :
trap "sudo /usr/share/scripts/evomaintenance.sh" 0
- Si l'on est sur une machine virtuelle (VM), on remplace le kernel par défaut par un kernel « Cloud » :
# apt install linux-image-cloud-amd64
# apt remove linux-image-amd64
# reboot