====== Serveur neuf : les trucs à faire ======
Cet article concerne les premières choses à faire lorsque vous venez d'installer ou de réceptionner un serveur. Il est tout beau, tout neuf, tout vide, en dehors du système de base. Quel que soit son usage (hébergement de sites web, d'un serveur de jeu, de mails, etc…), il faut réaliser quelques opérations pour démarrer sur de bonnes bases et éviter d'avoir des soucis par la suite.
Les commandes sont présentées pour Debian.
===== Installation =====
Lorsque c'est possible, les options qui font que c'est mieux...
==== Partitions et LVM ====
Utiliser la puissance de LVM... En partition primaire :
* /boot = 510MB. Debian le met en ext2 par défaut (bookworm). Ni trop ni trop peu.
* /swap = 2GB. Potentiellement autant que de RAM ; 2GB c'est pas mal ceci dit.
* "/" = le reste qui va en réalité être en VG
En LVM, faire un VG avec le reste du disque, puis faire les premiers lv :
* / = 50GB (chez moi ce VG est appelé "root").
* /tmp = 5GB, ext4
=== Mémo de commandes LVM ===
Plus de détail sur [[https://khaganat.net/wikhan/fr:lvm_snapshot]].
Créer un snaphshot de root (si sur le VG appelé VgPoste) :
sudo lvcreate -L 20g -s -n snap_root_$(date --iso) /dev/VgPoste/root
S'il y a un souci, on revient en arrière :
sudo lvconvert --merge /dev/VgPoste/snap_root_XXX
Et s'il y a un souci pour recréer un snapshot après ça, c'est :
sudo lvchange --refresh VgPoste
Ne pas oublier de redémarrer après un retour en arrière sur root...
Pour supprimer un volume, s'assurer qu'il est démonté, puis simplement :
lvremove /dev/NOM_VG/NOM_LV
===== Apt : logiciels à installer =====
Révisé avec Bookworm.
apt update
apt install nano bash-completion cron logrotate apt-listbugs debsums apt-listchanges sudo rsyslog net-tools htop iotop-c nload binutils dnsutils
apt install msmtp msmtp-mta bsd-mailx sshguard git
apt upgrade
La première ligne, un peu forcé (et certains sont déjà installés suivant les versions de debian). La seconde, ça dépend un peu des serveurs.
* **nano** sauf si vous aimez vim. Si vous êtes à l'aise avec vim, il est installé de base. Sinon, nano est un éditeur de texte un peu plus facile à utiliser pour les néophytes, car les raccourcis sont affichés et son comportement est assez proche des éditeurs de textes plus classiques.
* **bash-completion** qui peut aider (mais on va surtout modifier le .bashrc rapidement)
* **cron et logrotate** sont par défaut en principe, mais mieux vaut s'en assurer. [[https://doc.ubuntu-fr.org/cron|Cron]] permet de configurer des actions de façon automatique. [[https://doc.ubuntu-fr.org/logrotate|Logrotate]] évite que les logs ne saturent la mémoire. Suivre les liens pour leurs configurations.
* **bsd-mailx, msmtp et msmtp-mta** pour recevoir les mails systèmes (voir [[pratique:informatique:mail:mail_relai]]).
* **apt-listbugs, debsums et apt-listchanges** éviteront de mettre des paquets bugués. D'où l'upgrade après.
* **apt-listbugs** prévient s'il y a des soucis
* **debsums** : vérifie l'intégrité des fichiers des paquets installés avec les sommes de contrôle MD5
* **apt-listchange**s informe des changements importants dans les paquets, par exemple les nouvelles fonctionnalités, les changements de comportement
* **sudo** pour la sécurité, on va éviter de trop agir en root...
* **sshguard** ajoute un peu d'ennui aux attaquants par SSH, pourquoi s'en priver ? Rien à configurer, de base ça marche.
* **rsyslog** permet d'avoir des fichiers de log lisible avec systemd, sans pour autant gêner son fonctionnement de base.
* **net-tools**, **htop**, **iotop-c**, **binutils**, **dnsutils** et **nload** fournissent des utilitaires fort utiles quand on croise un souci. Plus d'infos [[pratique:informatique:debug_problem|ici]].
Pour la suite, modifier apt pour avoir plus de choix :
nano /etc/apt/sources.list
Voir [[https://debian-facile.org/doc:system:apt:sources.list:buster|Debian Facile]] pour plus d'informations.
Proposition :
# Debian Buster, dépôt principal + paquets non libres
deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free
# Debian Buster, mises à jour de sécurité + paquets non libres
deb http://deb.debian.org/debian-security/ buster/updates main contrib non-free
deb-src http://deb.debian.org/debian-security/ buster/updates main contrib non-free
# Debian Buster, mises à jour "volatiles" + paquets non libres
deb http://deb.debian.org/debian/ buster-updates main contrib non-free
deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free
Éviter aussi d'installer plus que nécessaire en créant dans ''/etc/apt/apt.conf.d/'' le fichier qui va bien :
sudo nano /etc/apt/apt.conf.d/00recommandperso
Mettre le contenu suivant :
APT::Install-Recommends "0";
APT::Install-Suggests "0";
==== Xen ====
On peut installer Xen, histoire de containeriser les besoins. Attention ça pompe autrement les ressources. Plus d'infos [[pratique:informatique:xen|ici]].
===== Sécurité =====
==== Mot de passe ====
Suivant la façon dont le mot de passe a été transmis, il faut le mettre à jour. À répéter ensuite pour les utilisateurs nouvellement créés.
passwd
==== Ajouter des utilisateurs ====
Voir aussi [[https://khaganat.net/wikhan/fr:addsysadmin]], script utile s'il y a plusieurs users à ajouter.
Sinon :
* -m : crée un home ;
* -U : crée un groupe du même nom ;
* -G : ajoute aux groupes ;
* -p : mot de passe, nécessaire sinon impossible de se co la première fois... (et même comme ça, ça veut pas toujours ?)
* -s /bin/bsh : évite l'erreur d'un shell non déclaré et bloquant les utilisatrices
useradd zatalyz -m -U -G sudo,www-data -p MotdePa55e -s /bin/bash
Ajouter la clé ssh pour pouvoir se co :
mkdir /home/zatalyz/.ssh
nano /home/zatalyz/.ssh/authorized_keys
# Mettre la clé publique dans ce fichier
chown -R zatalyz: /home/zatalyz/.ssh
chmod 0700 /home/zatalyz/.ssh/
chmod 0600 /home/zatalyz/.ssh/authorized_keys
Tester la connexion avec cet user avant de quitter root, ou c'est un risque à rester coincé.
==== Ajouter les sudoers (alternatif) ====
En principe, ajouter les utilisateurs au groupe ''sudo'' suffit.
usermod -a -G sudo utilisateur
Si ce n'est pas le cas ou si vous voulez faire autrement, voici le pense-bête.
Si on veut créér un groupe ''wheel'' qui aura les droits pour tout :
groupadd wheel
Pour modifier les permissions :
sudo visudo
Oui, même en root, on fait sudo pour que ça marche. Dans ce fichier, ajouter la ligne idoine :
%wheel ALL=(ALL:ALL) ALL
==== Paramétrer SSH sur le serveur ====
Voir [[https://khaganat.net/wikhan/fr:ssh#configurer_ssh_sur_ses_serveurs]] pour les détails. Sinon, le fichier ''/etc/ssh/sshd_config'' doit ressembler à ça :
Port 228
Protocol 2
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
PermitRootLogin no
StrictModes yes
UsePrivilegeSeparation sandbox
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
UsePAM yes
PermitEmptyPasswords no
MaxAuthTries 6
LoginGraceTime 30
AllowGroups sudo
# Alternative si peu d'admins et pas de risque que ça évolue :
# AllowUsers zatalyz
AllowTcpForwarding no
X11Forwarding no
PrintLastLog yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
N'oubliez pas de relancer le daemon ssh après avoir modifié ce fichier.
service ssh restart
Testez bien la connexion avant de vous déconnecter, dans un autre terminal ! Un mauvais paramétrage peut vous empêcher d'accéder à votre serveur !
==== Autres logiciels de sécurité ====
=== Rkhunter ===
rkhunter (pour Rootkit Hunter) est un programme qui essaye de détecter les rootkits, portes dérobées et exploits. Pour cela, il compare le hash SHA256, SHA512, SH1 et MD5 des fichiers importants avec les hash connus, qui sont accessibles à partir d'une base de données en ligne. Il alerte également l'utilisateur lorsqu'il trouve des permissions qu'il juge anormales, des fichiers cachés, des chaînes suspectes dans le kernel etc.
De par l'exhaustivité des tests qu'il effectue, et à cause du nombre de systèmes sur lesquels il tourne, rkhunter renvoie généralement de nombreux avertissements. L'analyse de ces avertissements (warnings) nécessite une bonne connaissance des systèmes Unix. Dans une écrasante majorité des cas, ces avertissements sont bénins et peuvent être ignorés.
Source : [[https://doc.ubuntu-fr.org/rkhunter|Ubuntu-fr]]
J'ai souvenir qu'il est effectivement bavard. Et aussi que ce n'est pas une sécurité en soi, juste un outil permettant de détecter certains problèmes.
sudo apt install rkhunter
On le configure un chouia :
sudo nano /etc/rkhunter.conf
Modifier les options suivantes pour qu'elles aient ces valeurs :
UPDATE_MIRRORS=1
MIRRORS_MODE=0
#WEB_CMD="/bin/false"
ALLOWHIDDENDIR=/etc/.git
ALLOWHIDDENDIR=/dev/.lxc
ALLOWHIDDENDIR="/dev/.udev"
ALLOWHIDDENDIR="/dev/.static"
ALLOWDEVFILE="/dev/.udev/rules.d/root.rules"
PKGMGR=DPKG
ALLOW_SSH_PROT_V1=0
Après ces modifications, exécuter ceci :
rkhunter -C
rkhunter --propupd
Modifier aussi ''/etc/default/rkhunter''.
CRON_DAILY_RUN="true"
CRON_DB_UPDATE="true"
APT_AUTOGEN="yes"
Quand à envoyer un mail quotidien... ça fait du bruit, qu'il se passe un truc ou non. Et il faut configurer l'envoi de mail.
On se fait un petit test en mettant à jour l'ensemble puis en affichant juste ce qui est avec des warnings :
rkhunter --update
rkhunter --list
rkhunter -c --rwo
=== Fail2ban/Reaction et Pare-feu (iptables, nftable, ipset, etc) ===
Tout est noté dans un article à part, parce que ça commençait à être long : [[pratique:informatique:parefeu:start]].
=== Logwatch ===
sudo apt install logwatch
Logwatch n'est pas un outil qui va agir, par contre il analyse les logs et en rends un rapport plus digeste. Si, vraiment plus digeste, ça permet de voir les bots.
C'est donc utile pour améliorer ses filtres. Une fois msmtp configuré (ou autre solution d'envoi de mail), créer le dossier pour Logwatch :
sudo mkdir /var/cache/logwatch
Et le paramétrer
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
sudo nano /etc/logwatch/conf/logwatch.conf
Dans mon cas je permet surtout l'envoi du rapport par mail, mais à adapter si besoin (entre autre l'émetteur/Récepteur), et la quantité de détails (à adapter au fil des filtres...) :
Output = mail
Detail = 5
Pour ''MailTo '' on peut déclarer plusieurs adresses mails, séparées par un espace :
MailTo = mail1@moi.net mail2@moi.net
Et un coup de cron journalier (sur root) :
15 1 * * * /usr/sbin/logwatch >/dev/null 2>&1 #logwatch
=== Lynis ===
Lynis aide à auditer son système. Il ne fait rien seul, mais il aide à voir là où on est pas forcément top. Simplement ''sudo apt install lynis''.
Pour voir la liste des options :
sudo lynis
Pour un check du systeme, en root :
lynis audit system
Des recommendations et conseils sont présents à la fin de l'analyse, suivant ce qui a été détecté. Moralité je vais pouvoir encore améliorer ma doc...
===== Grub =====
Attention, chez OVH (et d'autres potentiellement ?) grub/le système a tendance à ne pas être sur notre noyau mis à jour. Faudrait que je retrouve les détails, mais ça finit par mettre un sacré bazar...
Paramétrer Grub pour qu'il ne mette pas 4 secondes à se lancer…
* ''nano /etc/default/grub''
* ''GRUB_TIMEOUT=1''
* ''grub-mkconfig -o /boot/grub/grub.cfg''
===== Confort personnel dans l'interface =====
==== Modifier les locales ====
Tapez quelques accents en console.
Si les accents ne passent pas, il faut reconfigurer les locales :
dpkg-reconfigure locales
Une liste de locales apparaît, cochez les FR si ce n'est pas déjà fait puis validez. Ensuite, indiquez que vous préférez utiliser utf-8, comme ça tout sera lisible. Voir aussi [[https://wiki.debian.org/fr/UTF-8|Debian et UTF8]].
Pas forcément une bonne idée sur root, ceci dit : certains paquets exotiques foireux ne comprennent pas si les messages ne sont pas transmis en anglais. Je ne dis pas que ça a du sens, mais ça arrive. Dans ce cas, favoriser de l'english AVEC UTF8 (afin de lire les accents), et paramétrez les variables pour les utilisateurs.
Pour modifier juste les variables de l'utilisateur, ajoutez la ligne suivante dans le ''.bashrc'' :
export LANG=fr_FR.UTF-8
==== Bashrc ====
Modifier le bashrc pour avoir une session plus agréable à utiliser.
nano .bashrc
Décommenter les lignes suivantes pour avoir les couleurs lorsque vous utilisez “ls”, ce qui permet de mieux repérer dossiers, fichiers et leurs droits.
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
Pour avoir l’auto-complétion fonctionnelle
# Autocompletion
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
Pour personnaliser le prompt, vérifier que la ligne ''force_color_prompt=yes'' soit décommentée.
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
Pour avoir le prompt qui affiche le nom d'utilisateur, le nom du serveur, le chemin du répertoire et la date :
export PS1='\[\033[00;31m\]\u@\h\w\[\033[00;36m\]:\t\[\033[00;34m\]$\n\[\033[00;32m\]\$\[\033[00m\] '
Des explications peuvent être trouvées sur les pages :
* https://wiki.archlinux.org/index.php/Bash/Prompt_customization
* https://help.ubuntu.com/community/CustomizingBashPrompt
Et pour générer autre chose :
* https://bash-prompt-generator.org/
==== Changer le nom de la machine ====
Si vous avez un VPS ou un dédié, vous avez peut-être un début de ligne en console qui ressemble à "root@vps158745547". C'est moche et surtout, c'est vite fait de s'emmêler les pinceaux si vous avez plusieurs consoles ouvertes sur plusieurs VPS.
Pour renommer ce qu'il y a derrière @, il faut changer l'hostname.
nano /etc/hostname
Mettez le nom que vous voulez, pour notre exemple "MonNom.localdomain".
Modifiez aussi ''/etc/hosts'' pour avoir quelque chose comme ceci :
127.0.0.1 localhost
127.0.0.1 MonNom.localdomain
Ensuite, lancez la commande suivante si vous voulez que ça soit actif immédiatement :
hostname MonNom.localdomain
Remplacez "MonNom" par ce que vous avez mis dans hostname. Déconnectez-vous et reconnectez-vous, ça devrait être pris en compte. Sinon, redémarrez (mais en théorie y'a pas besoin).
==== Changer le message à la connexion ====
Lorsque vous vous connectez à votre serveur, un message vous accueille, qui ressemble généralement à ça :
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Dec 28 06:56:13 2015 from 100-200-100-100.dsl.sfr.fr
Ça manque de poésie.
Pour modifier ce texte :
nano /etc/motd
Mettez ce que vous voulez :-)
Il existe plein de pistes sur la page : http://www.mewbies.com/how_to_customize_your_console_login_message_tutorial.htm
Et le site http://ruletheweb.co.uk/figlet/ pour l'ASCII art.
==== Améliorer un peu systemd ====
Voir [[pratique:informatique:systemd_error#limiter_la_taille_des_logs|là]].