(Modifié le 14/01/2019)

KVM Debian jessie 64

La migration Yunohost 3.0 vers Debian Stretch a été effectuée sur ce serveur yunohost yanfi.net

KVM OpenStack
1 vCore(s)
2,4 GHz
4 Go de RAM
20 Go SSD
Local RAID 10
Selected Location: Strasbourg
Debian jessie 64
Livraison : vps506197

  • IPv4 du serveur : 164.132.104.145
  • IPv6 du serveur : 2001:41d0:0401:3200:0000:0000:0000:06e7

Première connexion SSH

Via SSH
ssh root@164.132.104.145
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:      Sun Jan 21 08:26:54 CET 2018.
Universal Time is now:  Sun Jan 21 07:26:54 UTC 2018.

Création utilisateur

Utilisateur jessie

useradd -m -d /home/jessie/ -s /bin/bash jessie

Mot de passe jessie et root

passwd jessie
passwd root

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@164.132.104.145

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      164.132.104.145
         IN AAAA   2001:41d0:401:3200::6e7
*        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é ovh-vps506197 pour une liaison SSH avec le serveur KVM.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/ovh-vps506197
Envoyer la clé publique sur le serveur KVM
scp ~/.ssh/ovh-vps506197.pub jessie@164.132.104.145:/home/jessie/

sur le serveur KVM On se connecte
ssh jessie@164.132.104.145
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/ovh-vps506197.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/ovh-vps506197.pub
Modifier la configuration serveur SSH
sudo nano /etc/ssh/sshd_config
Modifier

Port = 55030
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
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 55030 -i ~/.ssh/ovh-vps506197 jessie@164.132.104.145

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 -y

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/Strasbourg?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 -y
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

DNS OVH

Activer les DNS

$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      164.132.104.145
			 IN AAAA   2001:41d0:401:3200::6e7

Activer le reverse DNS : yanfi.net

Certificat SSL

Installer les certificats Lestsencrypt pour le domaine yanfi.net

sudo yunohost domain cert-install
Succès ! La configuration de SSOwat a été générée
Succès ! Installation avec succès d’un certificat Let’s Encrypt pour le domaine yanfi.net !

Utilisateurs

Création des utilisateur yanfi

sudo yunohost user create yanfi
Mot de passe d'administration :
Prénom : yan
Nom : fi
Adresse courriel : yanfi@yanfi.net
Mot de passe :
Confirmez : mot de passe :
Création du répertoire « /home/yanfi ».
Succès ! La configuration de SSOwat a été générée
Succès ! L'utilisateur a été créé
fullname: yan fi
mail: yanfi@yanfi.net
username: yanfi

Pour créer les autres utilisateurs se connecter en administrateur https://yanfi.net/yunohost/admin/#/login

Réseau ipv6

Ajout adressage ipv6 sur le réseau

sudo nano /etc/network/interfaces

Ajouter en fin de fichier

iface eth0 inet6 static
        address 2001:::::7
        netmask 64
        gateway 2001:::::1

REDEMARRER LE VPS

Mises à jour de sécurité Debian

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

Installer les outils de messagerie mailutils
apt install mailutils
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! Un mesage sera expédié…
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.

Applications Yunohost

Nextcloud

Installation nextcloud en ligne de commande

sudo -s
yunohost app install nextcloud
Domaines disponibles :
- yanfi.net
Choisissez un domaine pour Nextcloud (default: yanfi.net) : 
Choisissez un chemin pour Nextcloud (default: /nextcloud) : 
Choisissez l'administrateur de Nextcloud (doit être un utilisateur YunoHost existant) : yanfi
Accéder au dossier personnel des utilisateurs depuis Nextcloud ? [0 | 1] (default: 0) : 1
Extraction des modèles depuis les paquets : 100%
Attention : 2018-06-20 13:42:45 URL:https://download.nextcloud.com/server/releases/nextcloud-13.0.2.tar.bz2 [44842305/44842305] -> "app.tar.bz2" [1]
Attention : 2018-06-20 13:43:09 URL:https://codeload.github.com/YunoHost-Apps/yunohost.multimedia/tar.gz/v1.0 [15907/15907] -> "v1.0.tar.gz" [1]
Succès ! La configuration de SSOwat a été générée
Succès ! Installation terminée

Baïkal

Baïkal est un serveur de calendriers et de contacts accessible par les protocoles CalDAV (calendriers) et CardDAV (carnets d’adresses), autorisant ainsi la synchronisation avec de nombreux clients (Thunderbird + Lightning par exemple).

Installation par l’interface yunohost administrateur , applications

Connexion à l’interface d’admin
Sur le portail SSO Yunohost, si on clique sur la tuile « Baïkal », on tombe sur une page bien peu conviviale qui explique que le service fonctionne.
Pour accéder à l’admin, il faut rajouter /admin. Par exemple : https://example.com/baikal/admin

Le nom d’utilisateur à spécifier est « admin » suivi du mot de passe spécifique que vous avez choisi lors de l’installation de Baïkal. Attention, le mot de passe ne doit pas contenir de caractères spéciaux.

Création d’un nouvel utilisateur
Aller dans l’onglet « settings », sélectionner « Digest » dans « WebDAV authentication type ».
Ajouter les utilisateurs dans l’onglet « Users and resources ».

Connexion Thunderbird + Lightning
Ajoutez un nouvel agenda de type « Réseau » puis « CalDAV ».
L’URL à entrer est la suivante : https://example.com/baikal/cal.php/calendars/utilisateur/default

Caldav et cardav DAVdroid ,on utilise la Connexion avec une URL et nom d’utilisateur pour l’ajout d’un compte

  • calendrier : https://exemple.com/baikal/cal.php/calendars/utilisateur/default
  • contacts : https://exemple.com/baikal/card.php/addressbooks/utilisateur/default

En prenant soin de remplacer « exemple.com » par votre domaine puis « utilisateur » par votre nom d’utilisateur

Rainloop

Installation
sudo yunohost app install rainloop

Choisissez un domaine pour Rainloop (default: yanfi.net) :
Choisissez un chemin pour Rainloop (default: /rainloop) :
Est-ce une page publique ? [Yes | No] (default: No) :
Choisissez un mot de passe fort pour l'administrateur 'admin' :
Souhaitez-vous ajouter les utilisateurs YunoHost dans les suggestions de destinataires ? [Yes | No] (default: Yes) :
Definir la langue par defaut [English | Francais] (default: English) : Francais

Transmission

Transmission

Transmission permet le téléchargement et la création de torrents. Ce logiciel supporte les technologies décentralisées sans tracker, tel que PEX, DHT et les liens magnets.

A-Installation yunohost transmission en ligne de commande (mode su)

yunohost app install transmission
Choose a domain for Transmission (default: yanfi.net) : 
Choose a path for Transmission (default: /torrent) : 
Succès ! La configuration de SSOwat a été générée
Succès ! Installation terminée

Dossiers

ls -la /home/yunohost.transmission/
drwxrwxr-x+  5 debian-transmission www-data            4096 août   2 11:49 .
drwxr-xr-x  19 root                root                4096 août   2 11:49 ..
drwxrwxr-x+  2 debian-transmission www-data            4096 août   2 11:49 completed
drwxrwxr-x+  2 debian-transmission debian-transmission 4096 août   2 11:49 progress
drwxrwxr-x+  2 debian-transmission debian-transmission 4096 août   2 11:49 watched

B-Configurer les utilisateurs et les permissions

Il est recommandé que Transmission fonctionne sous son propre nom d’utilisateur pour des raisons de sécurité.Cela crée quelques problèmes avec l’accès aux fichiers et dossiers par transmission ainsi qu’avec votre compte utilisateur).
Deux possibilités , l’une avec l’ utilisateur et l’autre en créant un groupe sur lequel on ajoute des utilisateurs

utilisateur
Modifier le groupe du dossier completed (remplacer www-data par debian-transmission)

sudo chown debian-transmission.debian-transmission -R /home/yunohost.transmission/completed

Ajoutez le nom d’utilisateur au groupe debian-transmission :

sudo usermod -a -G debian-transmission user

NOTE : Changez “user” à votre propre nom d’utilisateur.

REMARQUE : Lors de l’ajout d’un utilisateur à un nouveau groupe, l’utilisateur doit se déconnecter et se reconnecter pour qu’il prenne effet. Un redémarrage permettra également d’atteindre cet objectif.

groupe
Création d’un groupe

groupadd transmission-completed

Ajout des utilisateurs au groupe

usermod -a -G transmission-completed nextcloud
usermod -a -G transmission-completed www-data
usermod -a -G transmission-completed debian-transmission

Modification groupe du dossier completed (remplacer www-data par transmission-completed)

chown -R debian-transmission:transmission-completed /home/yunohost.transmission/completed/

C-Nextcloud stockage externe

On ajoute le partage local dans nextcloud via les stockages externes
Nom du dossier : Transmission
Stockage externe : local
Configuration : /home/yunohost.transmission/completed
Paramètres

trans-nc

Sauvegarde BorgBackup

Préparation de la machine à sauvegarder

On se connecte sur la machine et on passe en mode su

sudo -s

Installation BorgBackup
Installation en utilisant les dépôts “backports”

apt edit-sources # pour ajouter la ligne pour les dépôts "backports"
deb http://deb.debian.org/debian stretch-backports main contrib non-free

Votre fichier « /etc/apt/sources.list » a changé, veuillez lancer « apt-get update »

apt update

Installer borgbackup

apt -V -t=stretch-backports install borgbackup

Créer un jeu de clé sur machine à sauvegarder (yanfi.net)
Créer un utilisateur borg dédié aux sauvegardes par BorgBackup :

useradd borg

Générer un jeu de clé sur /root/.ssh

mkdir -p /root/.ssh
ssh-keygen -t ed25519 -o -a 100 -f /root/.ssh/yanfi_ed25519

Le jeu de clé

ls /root/.ssh
    yanfi_ed25519  yanfi_ed25519.pub

Autoriser utilisateur borg à exécuter /usr/bin/borg uniquement

echo "borg ALL=NOPASSWD: /usr/bin/borg" >> /etc/sudoers

Ajout clé publique sur la machine qui stocke les sauvegardes

Se connecter sur la machine xoyize.xyz en ssh et ajouter de la clé publique

sudo -s
mkdir -p /srv/ssd-two/borg-backups/.ssh
cat >> /srv/ssd-two/borg-backups/.ssh/authorized_keys

Copier/coller le contenu du fichier du fichier de clef publique (fichier /root/.ssh/yanfi_ed25519.pub de la machine à sauvegarder ) dans ce terminal, et presser [Ctrl]+[D] pour valider.

Le dossier de base pour les sauvegardes sur le serveur xoyize.xyz : /srv/ssd-two/borg-backups/

Création dépôt et lancement des sauvegardes depuis la machine à sauvegarder

machine cliente yanfi.net
On se connecte sur la machine et on passe en mode su

sudo -s

Création du dépôt distant (A FAIRE UNE SEULE FOIS)

export BORG_RSH='ssh -i /root/.ssh/yanfi_ed25519' # ce n'est pas la clé par défaut id_rsa
borg init --encryption=repokey-blake2 ssh://borg@xoyize.xyz:55029/srv/ssd-two/borg-backups/yanfi.net
The authenticity of host '[xoyize.xyz]:55029 ([2a01:e34:eebf:df3::1]:55029)' can't be established.
ECDSA key fingerprint is SHA256:RQJzuV1z2w3o8NHlbQ3110/822ozKiosobS6ohpIrTs.
Are you sure you want to continue connecting (yes/no)? yes
Remote: Warning: Permanently added '[xoyize.xyz]:55029,[2a01:e34:eebf:df3::1]:55029' (ECDSA) to the list of known hosts.
Enter new passphrase: 
Enter same passphrase again: 
Do you want your passphrase to be displayed for verification? [yN]: 

By default repositories initialized with this version will produce security
errors if written to with an older version (up to and including Borg 1.0.8).

If you want to use these older versions, you can disable the check by running:
borg upgrade --disable-tam ssh://borg@xoyize.xyz:55029/srv/ssd-two/borg-backups/yanfi

See https://borgbackup.readthedocs.io/en/stable/changes.html#pre-1-0-9-manifest-spoofing-vulnerability for details about the security implications.

IMPORTANT: you will need both KEY AND PASSPHRASE to access this repo!
Use "borg key export" to export the key, optionally in printable format.
Write down the passphrase. Store both at safe place(s).

Sauvegarder la “passphrase” dans un fichier pour une procédure automatique

mkdir -p /root/.borg
nano /root/.borg/passphrase

Générer une sauvegarde d’un dossier local vers le dépôt distant

borg create ssh://borg@xoyize.xyz:55029/srv/ssd-two/borg-backups/yanfi.net::2019-01-11 /home/yanfi
Enter passphrase for key ssh://borg@xoyize.xyz:55029/srv/ssd-two/borg-backups/yanfi.net: 

Automatiser la procédure de sauvegarde pour le client yanfi.net
script de sauvegarde (notez l’usage de borg prune pour supprimer les archives trop anciennes)

nano /etc/cron.daily/borg-backup

Pour lancement à une heure précise

nano /root/.borg/borg-backup # après création on exécute crontab -e
#!/bin/sh
#
# Script de sauvegarde.
#
# Envoie les sauvegardes sur un serveur distant, via le programme Borg.
# Les sauvegardes sont chiffrées
#
 
set -e
 
BACKUP_DATE=`date +%Y-%m-%d-%Hh%M`
LOG_PATH=/var/log/borg-backup.log
 
export BORG_PASSPHRASE="`cat ~root/.borg/passphrase`"
export BORG_RSH='ssh -i /root/.ssh/yanfi_ed25519'
BORG_REPOSITORY=ssh://borg@xoyize.xyz:55029/srv/ssd-two/borg-backups/yanfi.net
BORG_ARCHIVE=${BORG_REPOSITORY}::${BACKUP_DATE}
 
borg create \
-v --stats --compression lzma,9 \
$BORG_ARCHIVE \
/bin /boot /etc /home /lib /lib64 /opt /root /sbin /srv /usr /var \
>> ${LOG_PATH} 2>&1
 
# Nettoyage des anciens backups
# On conserve
# - une archive par jour les 7 derniers jours,
# - une archive par semaine pour les 4 dernières semaines,
# - une archive par mois pour les 6 derniers mois.
 
borg prune \
-v --list --stats --keep-daily=7 --keep-weekly=4 --keep-monthly=6 \
$BORG_REPOSITORY \
>> ${LOG_PATH} 2>&1

Le rendre exécutable

chmod +x /root/.borg/borg-backup

Programmer la tâche à 2h30 du matin

crontab -e
# Sauvegarde sur distant avec BorgBackup
30 02 * * * /root/.borg/borg-backup > /dev/null