KVM Debian jessie serveur (nginx+php7+mariadb)

Package: 4 GB Mémoire, 2 CPU, 30 GB SSD, 100 Mbps
Selected Location: Paris
Debian jessie 64
Livraison : vps-26381 93.115.96.97

  • IPv4 du serveur : 93.115.96.97
  • IPv6 du serveur : 2a03:75c0:35:670d::1

Première connexion SSH

Via SSH
ssh root@93.115.96.97
Màj
apt update && apt upgrade

Locales

Locales : fr_FR.UTF-8
dpkg-reconfigure locales

Generating locales (this might take a while)...
  fr_FR.UTF-8... done
Generation complete.

TimeZone

Europe/Paris
dpkg-reconfigure tzdata

Current default time zone: 'Europe/Paris'
Local time is now:      Mon Oct  2 19:48:09 CEST 2017.
Universal Time is now:  Mon Oct  2 17:48:09 UTC 2017.

Création utilisateur

Utilisateur jessie
useradd -m -d /home/jessie/ -s /bin/bash jessie
Mot de passe jessie
passwd jessie
Visudo pour les accès root via utilisateur jessie

apt install sudo
echo "jessie     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Déconnexion puis connexion ssh en mode utilisateur
ssh jessie@93.115.96.97

DNS OVH

Configuration des champs DNS domaine yanfi.net

$TTL 3600
@	IN SOA dns110.ovh.net. tech.ovh.net. (2017123100 86400 3600 3600000 300)
         IN NS     ns110.ovh.net.
         IN NS     dns110.ovh.net.
         IN A      93.115.96.97
         IN AAAA   2a03:75c0:35:670d::1
*        IN CNAME  yanfi.net.

SSH

connexion avec clé
sur l'ordinateur de bureau Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé kvm-vps-26381 pour une liaison SSH avec le serveur KVM.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/kvm-vps-26381
Envoyer la clé publique sur le serveur KVM
scp ~/.ssh/kvm-vps-26381.pub jessie@93.115.96.97:/home/jessie/

sur le serveur KVM On se connecte
ssh jessie@93.115.96.97
Copier le contenu de la clé publique dans /home/$USER/.ssh/authorized_keys
$ cd ~
Sur le KVM ,créer un dossier .ssh

pwd  #pour vérifier que l'on est sous /home/$USER
mkdir .ssh
cat /home/$USER/kvm-vps-26381.pub >> /home/$USER/.ssh/authorized_keys

et donner les droits
chmod 600 /home/$USER/.ssh/authorized_keys
effacer le fichier de la clé
rm /home/$USER/kvm-vps-26381.pub
Modifier la configuration serveur SSH
sudo nano /etc/ssh/sshd_config
Modifier

Port = 55026
PermitRootLogin no
PasswordAuthentication no

session SSH ne se termine pas correctement lors d'un "reboot" à distance
Si vous tentez de redémarrer/éteindre une machine distance par ssh, vous pourriez constater que votre session ne se termine pas correctement, vous laissant avec un terminal inactif jusqu’à l’expiration d’un long délai d’inactivité. Il existe un bogue 751636 à ce sujet. Pour l’instant, la solution de contournement à ce problème est d’installer :
sudo apt install libpam-systemd #Installer par défaut sur debian jessie
cela terminera la session ssh avant que le réseau ne tombe.
Veuillez noter qu’il est nécessaire que PAM soit activé dans sshd.

Relancer openSSH
sudo systemctl restart sshd

Accès depuis le poste distant avec la clé privée
$ ssh -p 55028 -i ~/.ssh/kvm-vps-26381 jessie@93.115.96.97

Exécution script sur connexion
Exécuter un fichier utilisateur nommé $HOME/.ssh/rc si présent
Pour tous les utilisateurs exécuter un fichier nommé /etc/ssh/sshrc si présent
Installer les utilitaires curl jq figlet
sudo apt install curl jq figlet

Le batch
nano ~/.ssh/rc

#!/bin/bash

#clear
PROCCOUNT=`ps -Afl | wc -l`  		# nombre de lignes
PROCCOUNT=`expr $PROCCOUNT - 5`		# on ote les non concernées
GROUPZ=`users`
ipinfo=$(curl -s ipinfo.io) 		# info localisation format json
publicip=$(echo $ipinfo | jq -r '.ip')  # extraction des données , installer préalablement "jq"
ville=$(echo $ipinfo | jq -r '.city')
pays=$(echo $ipinfo | jq -r '.country')
cpuname=`cat /proc/cpuinfo |grep 'model name' | cut -d: -f2 | sed -n 1p`

echo "\033[0m\033[1;31m"  
figlet "yanfi.net"
echo "\033[0m"
echo "\033[1;35m  \033[1;37mHostname \033[1;35m= \033[1;32m`hostname`
\033[1;35m  \033[1;37mWired Ip \033[1;35m= \033[1;32m`ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1`
\033[1;35m    \033[1;37mKernel \033[1;35m= \033[1;32m`uname -r`
\033[1;35m    \033[1;37mDebian \033[1;35m= \033[1;32m`cat /etc/debian_version`
\033[1;35m    \033[1;37mUptime \033[1;35m= \033[1;32m`uptime | sed 's/.*up ([^,]*), .*/1/' | sed -e 's/^[ \t]*//'`
\033[1;35m       \033[1;37mCPU \033[1;35m= \033[1;32m`echo $cpuname`
\033[1;35m\033[1;37mMemory Use \033[1;35m= \033[1;32m`free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'`
\033[1;35m  \033[1;37mUsername \033[1;35m= \033[1;32m`whoami`
\033[1;35m  \033[1;37mSessions \033[1;35m= \033[1;32m`who | grep $USER | wc -l`
\033[1;35m\033[1;37mPublic Ip  \033[1;35m= \033[1;32m`echo $publicip $pays`
\033[0m"
curl fr.wttr.in/Paris?0

Effacer motd
sudo rm /etc/motd
Déconnexion puis connexion

Yunohost

Une fois que vous avez accès à votre serveur, directement ou par SSH, vous pouvez installer YunoHost avec le script d’installation.
Installer git
sudo apt install git
Cloner le dépôt du script d’installation de YunoHost
git clone https://github.com/YunoHost/install_script /tmp/install_script
Lancer le script d’installation
cd /tmp/install_script && sudo ./install_yunohost

Postinstall

Domaine principal : yanfi.net
Mot de passe administration : xxxxxxx

Erreur dnsmasq , il faut désactiver bind9
sudo systemctl stop bind9 && sudo systemctl disable bind9
Puis relancer dnsmasq
sudo systemctl restart dnsmasq

Connexion administrateur sur https://yanfi.net/yunohost/admin/#/login

DNS OVH

$TTL 3600
@	IN SOA dns110.ovh.net. tech.ovh.net. (2017123111 86400 3600 3600000 300)
                         IN NS     ns110.ovh.net.
                         IN NS     dns110.ovh.net.
                         IN MX 10  yanfi.net.
                         IN A      93.115.96.97
                         IN AAAA   2a03:75c0:35:670d::1
                     600 IN TXT    "v=spf1 a mx ip4:93.115.96.97 ip6:2a03:75c0:35:670d::1 -all"
_dmarc                   IN TXT    "v=DMARC1; p=none"
_xmpp-client._tcp   3600 IN SRV    0 5 5222 yanfi.net.
_xmpp-server._tcp   3600 IN SRV    0 5 5269 yanfi.net.
mail._domainkey          IN TXT    ( "v=DKIM1; k=rsa; t=s; s=email; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChqgKsvUMn3XJb+GEowf0CTRrE4PHDJh/M13d5lNKKKI0hzcB62yb0hAaIubKFU22/eYqAEIzHjxsqyHwOTSKRnpzYneHL0+ZAz+q/1cwrufHByTsXLg36GbLDLaLvgCTVdjMSmnsfOZBTg8XBcDWxQQeANwLYupYmLbckgyvXNQIDAQAB" )
muc                 3600 IN CNAME  yanfi.net.
pubsub              3600 IN CNAME  yanfi.net.
vjud                3600 IN CNAME  yanfi.net.

Utilisateurs

Création des utilisateurs

Applications

nextcloud

Se connecter à nextcloud avec l’utilisateur qui a été désigné comme administrateur
Clic sur la “roue dentelée” et “+ Applications” , sélectionner “Pack d’applications” puis “Pack pour travail collaboratif” et Tout activer
Cette opération va activer Calendar , Contacts et Talk

Erreurs VPS

Des erreurs non blocantes au démarrage du vps
sudo journalctl -b 0 -p err

-- Logs begin at dim. 2017-12-31 16:33:23 CET, end at dim. 2017-12-31 19:30:02 CET. --
déc. 31 16:33:23 yanfi.net kernel: [drm:vmw_driver_load] *ERROR* Hardware has no pitchlock
déc. 31 16:33:23 yanfi.net systemd-udevd[200]: Failed to apply ACL on /dev/dri/card0: No such file or directory
déc. 31 17:32:17 yanfi.net kernel: do_IRQ: 0.66 No irq handler for vector (irq -1)
déc. 31 18:30:34 yanfi.net kernel: do_IRQ: 1.196 No irq handler for vector (irq -1)

Correction des erreurs
sudo nano /etc/default/grub
Modifier comme suit les lignes

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"
GRUB_CMDLINE_LINUX="pci=nomsi,noaer"

Générer un nouveau fichier de configuration avec la commande “grub-mkconfig”
sudo grub-mkconfig -o /boot/grub/grub.cfg

Création du fichier de configuration GRUB…
Image Linux trouvée : /boot/vmlinuz-3.16.0-4-amd64
Image mémoire initiale trouvée : /boot/initrd.img-3.16.0-4-amd64
fait

Redémarrer et vérifier
sudo journalctl -b 0 -p err
-- Logs begin at dim. 2017-12-31 20:16:09 CET, end at dim. 2017-12-31 20:17:42 CET. --

Sauvegarde distante (shuttle )

Autoriser un serveur distant à se connecter via ssh pour y exécuter rsync

Installer rsync
sudo apt install rsync # debian

Ajout utilisateur de backupuser qui ne peut exécuter que rsync et de la clé publique du “serveur de sauvegarde”

#création utilisateur backup
sudo useradd backupuser -c "limited backup user" -m -u 4210
#ajout clé publique ssh dans le fichier authorized_keys du nouvel utilisateur
sudo mkdir /home/backupuser/.ssh
sudo nano /home/backupuser/.ssh/authorized_keys    #coller le contenu /home/backupuser/.ssh/id_rsa.pub copié sur terminal du serveur shuttle (yanspm.com)

Création script bash rsync-wrapper.sh
sudo nano /home/backupuser/rsync-wrapper.sh
Contenu du script

#!/bin/sh
 
date > /home/backupuser/backuplog
#echo $@ >> /home/backupuser/backuplog
/usr/bin/sudo /usr/bin/rsync "$@";

Droits sur le fichier

sudo chown backupuser:backupuser /home/backupuser/rsync-wrapper.sh
sudo chmod 755 /home/backupuser/rsync-wrapper.sh

Edition fichier sudoers pour un accès root à l’exécution de rsync
sudo -s
Ajouter ligne suivante en fin de fichier,exécution en mode root de rsync

echo "backupuser ALL=NOPASSWD: /usr/bin/rsync" >> /etc/sudoers
exit

Mémoire cache

Libère la mémoire des données cache et tampon
sudo -s
sync; echo 3 > /proc/sys/vm/drop_caches
La commande sync permet de s’assurer que toutes les informations en mémoire en attente d’écriture soient bien répercutées sur le disque
Créer une tâche pour vider le cache tous les jours

sudo -s
crontab -e

Ajouter en fin de fichier
0 12 * * * sync; echo 3 > /proc/sys/vm/drop_caches

Sauvegarde locale (yunohost backup)

Prérequis : vérifier que le dossier archives existe bien dans le dossier /home/yunohost.backup/
sinon le créer via un
sudo mkdir -p /home/yunohost.backup/archives
Donner les droits d’accès aux archives au groupe de l’utilisateur $USER :
sudo chown -Rv root:$USER /home/yunohost.backup

Automatiser la sauvegarde locale

UNIQUEMENT VALABLE si vous avez installé “Sauvegarde distante (shuttle )”

Créer un bash pour la sauvegarde yunohost
sudo nano /home/backupuser/savyuno.sh

#!/bin/bash

DOMAINE="yanfi.net"
rm /home/backupuser/$DOMAINE.info.json
rm /home/backupuser/$DOMAINE.tar.gz
/usr/bin/yunohost backup create -n $DOMAINE
mv /home/yunohost.backup/archives/$DOMAINE.info.json /home/backupuser/
mv /home/yunohost.backup/archives/$DOMAINE.tar.gz /home/backupuser/

droits
sudo chmod +x /home/backupuser/savyuno.sh Ordonnancement des tâches via Cron ,sauvegarde yunohost tous les jours à 2h15
sudo -s
crontab -e
Ajouter en fin de fichier
15 2 * * * /home/backupuser/savyuno.sh

Mises à jour de sécurité Debian

Toutes les instructions suivantes sont exécutées après passage en mode su ou sudo

Vérifier si la redirection des messages “root” est paramétrée (normalement réalisée à l’installation yunohost)
echo "hello world" |mail -s test root si ok, on pourra paramétrer MAILTO=”root” L’automatisation sera prise en charge par l’outil cron-apt. Cron-apt permet de vérifier à intervalle régulier, via le crontab , si des mises à jours sont disponibles et va les installer.
apt install cron-apt
Création du fichier security.sources.list utilisé par cron-apt et qui ne contiendra que le(s) dépôt(s) de sécurité Debian.
grep security /etc/apt/sources.list > /etc/apt/security.sources.list
Création du fichier de configuration de cron-apt /etc/cron-apt/config

APTCOMMAND=/usr/bin/apt
OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"
MAILTO="root"
MAILON="always"

Pour déclencher la mise à jour automatique après téléchargement , supprimer option -d dans le fichier /etc/cron-apt/action.d/3-download
dist-upgrade -y -o APT::Get::Show-Upgraded=true
Test immédiat cron-apt
Patienter quelques minutes!
Par défaut l’exécution est programmée à 4h00 chaque jour, pour spécifier un créneau horaire modifier le fichier /etc/cron.d/cron-apt.