Debian Jessie sur un Kimsufi KS-2A
Petite marche à suivre à peu près généraliste pour configurer un serveur dédié Kimsufi.
Installation
Le schéma d’installation que j’ai utilisé diverge de celui par défaut pour Debian Jessie proposé par OVH.
Est configuré par défaut dans le template d’installation Debian 8.3 stable (Jessie) :
- une large partition
/home
dans le schéma de partition par défaut :- une partition primaire
/
de 20Go ; - une partition primaire
/home
prenant l’espace restant, soit un peu moins de 980Go dans mon cas ; - une partition
swap
obligatoire de 512Mo ;
- une partition primaire
- un noyau Linux « maison ».
Inconvénients pour un serveur web comme le mien :
- j’utilise majoritairement les partitions
/var
(/var/www
pour les sites en PHP,/var/lib
pour le stockage de données des applications comme MariaDB, Prosody, etc.) et/srv
(services divers balancés sur un port public) - avoir une partition
/home
séparée et prenant 98% de l’espace disque ne me sert à rien ; - le noyau maison n’est disponible dans aucun dépôt
apt
et doit être mis à jour à la main (wget
), en allant le chercher depuis un serveur FTP, ce qui est rédhibitoire pour moi.
Donc, pour installer à ma façon :
- template d’installation Debian 8.3 stable (Jessie) ;
- cocher l’utilisation du noyau de la distribution à la place du noyau ;
- éditer le schéma de partitionnement pour supprimer la place indue que prendrait
/home
et maximiser l’espace de la racine/
.
Considérations d’installation
- une partition
/boot
séparée de/
; - un partitionnement du disque (
/var
,/src
) plus fin, en essayant de prévoir la place que prendraient ces partitions ; - utiliser le noyau avec les patchs de sécurité
grsecurity
, à l’instar du noyau OVH qui les intègre ; - ne pas activer de compte
root
mais directement un utilisateur appartenant au groupesudo
pour ne pas avoir à le désactiver par la suite.
Première connexion
Après l’installation de la distribution, OVH envoie un mail contenant le code du compte root
permettant de se connecter au serveur. On va donc s’y connecter en forçant la demande de mot de passe (puisqu’il n’y a pas encore de clé SSH forgée est installée).
ssh root@ip.du.serveur -o PreferredAuthentications=password
Une fois connecté, je conseille de changer au plus vite le mot de passe du compte root
:
passwd
Entrez le mot de passe actuel une première fois, puis entrez-en un nouveau par deux fois. Voilà, il ne devrait plus exister de copie de votre mot de passe root
.
Pour désactiver complètement le login du compte root
(après avoir créé un nouvel utilisateur appartenant au groupe sudo
) :
sudo passwd -dl root
Pour continuer, mettre à jour des dépôts.
apt update
systemd
Utiliser les différents services de systemd
renvoie l’erreur suivante :
Failed to create bus connection
Pour corriger, il suffit d’installer le paquet dbus
manquant.
apt install dbus
NTP
Maintenant que systemd
est réparé, on peut l’utiliser comme service de synchronisation du temps de la machine au lieu d’installer un second paquet pour NTP.
timedatectl set-ntp 1
Hostname
Le nom d’hôte (hostname) inscrit dans le fichier /etc/hostname
est un nom de domaine hostname.ip-x-y-z.eu
. Pour n’avoir que le nom court :
hostnamectl set-hostname $(hostname -a)
Puis éditer /etc/hosts
pour remplacer hostname.ip-x-y-z.eu
avec hostname.sondomaine.tld
tel que défini dans sa zone DNS (sinon, le faire, j’utilise celle de Gandi).
Pour plus d’informations sur le renommage de la machine, voir le Debian Wiki HowTo/ChangeHostname.
Firewall et Fail2ban
Pas envie de m’emmerder à maintenir un pare-feu complexe, je teste UFW (Uncomplicated Firewall).
apt install ufw
ufw allow SSH # ouvre le port 22
ufw allow ’Nginx Full’ # ouvre les ports 80 et 443
ufw enable # active ufw
Si vous voulez utiliser fail2ban
pour prévenir des attaques par force brute, il est possible de le faire utiliser directement ufw
plutôt qu’iptables
.
apt install fail2ban
Pour configurer la bête, créer un fichier /etc/fail2ban/jail.local
: chargé après le fichier de configuration principal /etc/fail2ban/jail.conf
, les valeurs qu’il contient écrasent celles contenues dans le premier, inutile donc de copier intégralement le contenu du fichier de configuration (comme j’ai pu le voir par-ci par-là). Y changer l’adresse à laquelle les notifications sont envoyées, et configurer le programme pour utiliser ufw
:
[DEFAULT]
destemail = mail@domaine.truc
banaction = ufw
Yapyt
Yapyt est clone de yaourt
(commande Arch Linux) développé par Thuban pour Debian. Très utile pour nettoyer son système et supprimer les résidus d’applications désinstallées.
wget http://git.yeuxdelibad.net/coolrepo/plain/yapyt/yapyt.py -O /usr/local/bin/yapyt
chmod +x /usr/local/bin/yapyt
Pour le nettoyage, yapyt
nécessite deborphan
et aptitude
:
apt install aptitude deborphan
Certificats
Installer le client Let’s Encrypt disponible dans le dépôt jessie-backports
activé par défaut dans le source.list
déployé par OVH (qui utilise les miroirs d’OVH également), mais aussi les certificats racine de CACert qui sont à nouveau disponible dans un paquet séparé.
apt -t jessie-backports install letsencrypt ca-cacert
Dotdeb
Dotdeb is an extra repository providing up-to-date packages for your Debian servers : Nginx ; PHP 7.0, 5.6, 5.5, 5.4 (obsolete) and 5.3 (obsolete) ; useful PHP extensions : apcu, imagick, mongo, Pinba, xcache, Xdebug, XHprof… ; MySQL 5.5 and 5.6 ; Zabbix ; etc.
Installer la clé du dépôt :
wget https://www.dotdeb.org/dotdeb.gpg -O- | apt-key add -
Dans /etc/apt/source.list.d/dotdeb.list
:
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all
Mettre à jour les dépôts :
apt update
Installer le serveur web :
apt install nginx-extras php5-fpm
MariaDB
MariaDB is one of the most popular database servers in the world. It’s made by the original developers of MySQL and guaranteed to stay open source. Notable users include Wikipedia, Facebook and Google.
Installer la clé du dépôt :
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
Dans /etc/apt/source.list.d/mariadb.list
:
deb [arch=amd64,i386] http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.1/debian jessie main
deb-src http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.1/debian jessie main
Mettre à jour les dépôts :
apt update
Installer :
apt install mariadb-server
Prosody
Prosody is a modern XMPP communication server. It aims to be easy to set up and configure, and efficient with system resources. Additionally, for developers it aims to be easy to extend and give a flexible system on which to rapidly develop added functionality, or prototype new protocols.
Installer la clé du dépôt :
wget https://prosody.im/files/prosody-debian-packages.key -O- | apt-key add -
Dans /etc/apt/source.list.d/prosody.list
:
deb http://packages.prosody.im/debian jessie main
Mettre à jour les dépôts :
apt update
Installer Prosody et ses dépendances optionnelles :
apt install prosody-trunk lua-event lua-zlib lua-dbi-sqlite3 lua-bitop
Je renvoie à mon article Prosody sur Debian Wheezy/Jessie pour plus d’informations quant à la configuration du service.
NodeJS LTS
Installer nodejs
(v0.10.29) et npm
(v1.4.21) depuis les dépôts Debian, dans /usr/bin
.
apt install npm
Installer le gestionnaire de version n
dans /usr/local/bin
.
npm install -g n
Utiliser n
pour installer la dernière version LTS de nodejs (v4.3.2) dans /usr/local/bin
.
n lts
Installer la dernière version de npm
(v2.14.12) dans /usr/local/bin
.
npm install -g npm node-gyp
Supprimer les binaires de npm et nodejs qui trainent dans /usr/bin
pour ne plus avoir que les derniers installés.
apt remove npm
apt-get autoremove
Superutilisateur
Plutôt que de continuer à utiliser le compte root, je me crée un utilisateur aux droits restreints, que j’ajoute néanmoins au groupe sudo
pour l’utiliser à des fins de maintenance du système.
apt install sudo
adduser username
gpasswd -a username sudo
Pour désactiver complètement le login du compte root
:
sudo passwd -dl root
SSH
Depuis un terminal sur mon ordinateur, je forge une clé SSH (inutilement grosse, pour tester) que j’autoriserai à servir d’authentification sur le compte utilisateur créé ci-dessus.
ssh-keygen -b 16384
Je la renomme $HOME/.ssh/id_rsa-nomduserver
, lui met un gros gros mot de passe, puis je la copie dans les clés autorisées sur mon serveur.
ssh-copy-id -i $HOME/.ssh/id_rsa-nomduserver username@adresse.ip -o PreferredAuthentications=password
Je peux dorénavant me connecter à mon serveur par SSH avec une authentification par clé sur un utilisateur qui après entrée d’un (inutilement tarabiscoté) mot de passe, me confère des droits élevés.
ssh username@adress.ip -i $HOME/.ssh/id_rsa-nomduserver
Je renvoie au Debian Wiki pour la sécurisation de SSH : désactiver la connexion au compte root
et l’authentification par mot de passe dans /etc/ssh/sshd_config
.
PasswordAuthentication no
PermitRootLogin no
Shell ZSH et Byobu
Plutôt qu’une session SSH toute moche avec seulement BASH, j’utilise le gestionnaire de multiplexeurs de terminal Byobu (backend tmux
) et ai remplacé BASH par ZSH.
apt install zsh byobu git
byobu-enable
La commande byobu-enable
active byobu
si et seulement si le shell par défaut est bash
. Donc plutôt que modifier le shell de l’utilisateur (chsh -s /bin/zsh
) qui empêcherait l’activation automatique de byobu, il suffit d’ajouter les lignes suivantes à $HOME/.byobu/.tmux.conf
pour changer l’interpréteur de commandes du programme :
set -g default-shell /usr/bin/zsh
set -g default-command /usr/bin/zsh
Installation de Prezto, un framework de configuration de ZSH. Lancer zsh
et ne pas créer de fichier de configuration (touche q
)
zsh
Copier le répertoire de prezto
:
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
Activer prezto
pour mon profil utilisateur :
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
Etherpad Lite
Installation des dépendances :
apt install gzip git curl python libssl-dev pkg-config build-essential
Déploiement d’Etherpad Lite comme service, dans son propre dossier avec son propre user
/group
.
adduser --system --home=/srv/etherpad-lite --group etherpad-lite
Il faut utiliser le compte adéquat pou r la suite : pour ce faire, faire précéder les commandes suivantes de :
sudo su etherpad-lite -s /bin/bash -c "ici la commande entre guillemets"
Clônage du répertoire à la racine du dossier nouvellement créé.
cd /srv/etherpad-lite;
git clone git://github.com/ether/etherpad-lite.git .
Copier le fichier de configuration.
cp /srv/etherpad-lite/settings.json.template /srv/etherpad-lite/settings.json
Configuration du backend (j’aime bien utiliser redis
qui me nécessite aussi peu de configuration qu’un fichier SQLite pour des performances plus hautes) :
apt install redis-server
Dans /srv/etherpad-lite/settings.json
:
//the type of the database
"dbType" : "redis",
//the database specific settings
"dbSettings" : {
"host" : "localhost",
"port" : 6379,
"database": 1
},
Dépendances optionnelles pour l’import/export :
apt install tidy libreoffice-writer
Dans /srv/etherpad-lite/settings.json
:
/* This is the absolute path to the soffice executable. Setting it to null, disables LibreOffice exporting.
LibreOffice can be used in lieu of Abiword to export pads */
"soffice" : "/usr/bin/soffice",
/* This is the path to the Tidy executable. Setting it to null, disables Tidy.
Tidy is used to improve the quality of exported pads*/
"tidyHtml" : "/usr/bin/tidy",
Documentation :
- How to put Etherpad Lite behind a reverse Proxy, Nginx en l’occurence ;
- How to deploy Etherpad Lite as a service ;
- How to use Etherpad Lite with Redis.
Ghost
Ghost is a platform dedicated to one thing: Publishing. It’s beautifully designed, completely customisable and completely Open Source. Ghost allows you to write and publish your own blog, giving you the tools to make it easy and even fun to do.
Pareillement qu’Etherpad Lite ci-dessus, je déploie Ghost comme un service, ayant son propre utilisateur et groupe.
adduser --system --home=/srv/ghost --group ghost
Comme pour etherpad
, il faut utiliser le compte adéquat : pour ce faire, faire précédér les commandes suivantes de :
sudo su ghost -s /bin/bash -c "ici la commande entre guillemets"
Dans le dossier de l’utilisateur ghost
, je décompresse l’archive de la dernière version disponible :
cd /srv/ghost;
wget http://ghost.org/zip/ghost-latest.zip;
unzip -uo ghost-latest.zip -d /srv/ghost;
rm ghost-latest.zip
Ne reste plus qu‘à installer le tout.
npm install --production
Pour la configuration de Ghost, je renvoie à la documentation :
- Installation de Ghost : Installation sur Linux
- Faire tourner en permanence Ghost : Supervisor
- Configuring Ghost
- How to upgrade Ghsost
Pour aller plus loin :
- Isso, un serveur de commentaires à intégrer à Ghost
- Supervisor tes nodes, liste de services pouvant être lancés avec
supervisor
- Message de service annonçant mon passage à Ghost en novembre 2013
ownCloud
ownCloud gives you universal access to your files through a web interface or WebDAV. It also provides a platform to easily view & sync your contacts, calendars and bookmarks across all your devices and enables basic editing right on the web. Installation has minimal server requirements, doesn’t need special permissions and is quick. ownCloud Server is extendable via a simple but powerful API for applications and plugins.
Pour plus de facilité quant à l’installation d’ownCloud, j’utilise le dépôt. Installer la clé :
wget https://download.owncloud.org/download/repositories/stable/Debian_8.0/Release.key -O- | apt-key add -
Créer /etc/apt/source.list.d/owncloud.list
avec le dépôt :
sh -c "echo ’deb http://download.owncloud.org/download/repositories/stable/Debian_8.0/ /’ >> /etc/apt/sources.list.d/owncloud.list"
Mettre à jour les dépôts et installer owncloud
:
apt-get update
apt-get install owncloud
Documentation :
Pour une première salve, ça suffira je crois. N’hésitez pas à commenter si je dois préciser un élément de configuration, je verrai si j’ai le temps pour compléter.