Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web Owncloud à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Ce chapitre n’a pour but que de vous faire un petit résumé des différentes étapes à partir de l’installation de Owncloud sur un Raspberry Pi, jusqu’à avoir un server fonctionnel.

Je vais aussi en profiter de cette partie pour tester la dernière version en date de Owcloud.

Pour rappel, nous avons besoin de:

  1. Matériel:

    – Raspberry Pi 2 B
    – Carte micro SD, Classe 10
    – Câble HDMI avec un moniteur (écran télé) qui supporte le HDMI
    – Câble Ethernet

  2. Firmware:

    – Owncloud 9.1.3
    – Raspbian 8.0

  3. Configuration:

    – Adresse IP Publique
    – Adresse IP Privée statique (LAN) pour le RPi
    – Nom de domaine (NetLibre, nsupdate)
    – Certificat LE (Lets encrypt)

Ne vous attendez donc pas à ce que je détaille les différentes étapes de l’installation, puisque çà a déjà été abordé dans les différents chapites associés. Je vous renvoie donc vers les différentes sections pour plus d’information.

Chap 1. Prise en main du RPi
—————————————–

$ df -h

$ sudo umount /dev/sdb1

$ sudo apt install dcfldd

$ sudo dcfldd if=20XX-YY-ZZ-raspbian-jessie-lite.img of=/dev/sdb bs=1M
$sync

$ sudo cat >  /etc/network/interfaces.d/eth0 << eof > auto eth0
>
> iface eth0 inet static
>     address 172.16.1.16
>      netmask 255.255.255.0
>      gateway 172.16.1.1
> eof

# ifdown eth0

# ifup eth0

# vi /etc/resolv.conf
# Generated by resolvconf
nameserver 8.8.8.8
nameserver 8.8.4.4

# chattr +i /etc/resolv.conf 


$ sudo apt update
$ sudo apt upgrade

$ sudo apt install vim

$ sudo raspi-config 

Un petit plus,

pi@raspberrypi:~ $ sudo hostname nouveau-nom
pi@nouveau-nom:~ $ sudo vim /etc/hosts
!--sortie tronquée--!
127.0.1.1	nouveau-nom

Faite une copie de sauvegarde du système installé sur la carte SD vers un autre support (disque dur local par exemple):

$ sudo umount /dev/sdb1
$ sudo umount /dev/sdb2

mon@ordi$ cd ~/Backup

$ sudo dcfldd if=/dev/sdb of=sd.img bs=4M

Chap 3. Sécuriser votre RPi
—————————————–

mon@ordi$ ssh pi@10.1.2.3

$ sudo adduser USERNAME
$ sudo adduser USERNAME sudo

$ groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio
$ groups USERNAME
USERNAME : USERNAME sudo

$ sudo usermod -a -G adm,dialout,cdrom,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio USERNAME

mon@ordi$ ssh USERNAME@10.1.2.3

sudo deluser --remove-home pi

Je n’ai pas réussi à supprimer l’utilisateur pi du premier coup, car la commande renvoie l’erreur que cet utilisateur a un process actif (bash). J’ai du redémarrer le RPi et relancer la même commande. Une autre alternative serait d’utiliser la commande ci-dessous:

$ sudo userdel -f pi

$ sudo passwd -dl root

$ sudo vim /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no
$ sudo service ssh restart

*Connection SSH côté client
—————————————

mon@ordi$ sudo apt-get install openssh-client
mon@ordi$ ssh-keygen -t rsa

N’ommetez pas la passphrase!!!

Les clés générées devraient se trouver dans le répertoire ~/.ssh:
– clé privée: id_rsa (vous devez ne jamais fournir cette clé à personne)
– clé publique: id_rsa.pub

mon@ordi$ ssh-copy-id -i ~/.ssh/id_rsa.pub USERNAME@10.1.2.3

*Connection SSH côté server
—————————————

USERNAME@raspberrypi$ sudo apt-get install openssh-server

Vérifier et modifier les permissions pour les fichiers et dossiers si nécessaire.

drwx------ .ssh
-rw------- .ssh/authorized_keys


$ sudo vim /etc/ssh/sshd_config
PasswordAuthentication no

$ sudo service ssh restart

*Parefeux
—————————————

$ sudo vim /etc/iptables.firewall.rules
*filter

# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# Allow RDP connections from anywhere (uncomment if rdp connection is needed)
# -A INPUT -p tcp --dport 3389 -j ACCEPT

# Allow SSH connections
# The -dport number should be the same port number you set in sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Allow ping
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT
$ sudo iptables-restore < /etc/iptables.firewall.rules
$ sudo iptables -L

sudo vim /etc/network/if-pre-up.d/firewall
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules

$ sudo chmod +x /etc/network/if-pre-up.d/firewall

$ sudo apt install fail2ban

Chap 2. Installation de OwnCloud sur un Raspberry Pi
—————————————–

$ mkdir /home/USERNAME/www-dev
$ cd /home/USERNAME/www-dev


$ sudo wget http://download.owncloud.org/community/owncloud-9.1.3.tar.bz2
$ sudo wget http://download.owncloud.org/community/owncloud-9.1.3.tar.bz2.md5
$ md5sum -c owncloud-9.1.3.tar.bz2.md5 < owncloud-9.1.3.tar.bz2
owncloud-9.1.3.tar.bz2: OK

$ sudo tar -xvf owncloud-9.1.3.tar.bz2

$ sudo chown -R www-data:www-data /home/USERNAME/www-dev

*Apache
—————————————

$ sudo vim /etc/apache2/sites-available/owncloud.conf
Alias /owncloud "/home/USERNAME/www-dev/owncloud/"
<Directory /home/USERNAME/www-dev/owncloud/>
 Options +FollowSymlinks
 AllowOverride All

 <IfModule mod_dav.c>
 Dav off
 </IfModule>

 SetEnv HOME /home/USERNAME/www-dev/owncloud
 SetEnv HTTP_HOME /home/USERNAME/www-dev/owncloud

</Directory>


Lier symboliquement /etc/apache2/sites-enable/owncloud.conf à /etc/apache2/sites-avaibled/owncloud.conf:
$ sudo a2ensite owncloud.conf

Remplacer a2ensite par a2dissite pour supprimer le lien symbolique.

$ sudo a2enmod rewrite
$ sudo a2enmod headers

$ sudo service apache2 restart
$ sudo systemctl daemon-reload

$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
$ sudo service apache2 reload

$ sudo cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.bak
$ sudo vim /etc/php5/apache2/php.ini
upload_max_filesize = 2G
post_max_size = 2G

$ sudo service apache2 restart

 

*MySQL/MariaDB
—————————————

$ sudo mysql_secure_installation
Enter current pasword for root, #taper le mot de passe root de MariaDB, qui devrait être le même que celui lors de l'installation du service
Change root password, #taper “n” pour NON
Remove anonymous users, #taper “y” pour OUI
Disallow root login remotely, #taper “y” pour OUI
Remove test database and access to it, #taper “y” pour OUI
Reload privilege tables no, #taper “y” pour OUI

$ sudo mysql -u root -p
Enter password: #taper le mot de passe root de MariaDB

MariaDB [(none)]> CREATE USER 'ownclouduser'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS owncloudDB;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON owncloudDB.* TO 'ownclouduser'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> quit

 

Si vous rencontrez un message du type:

Error 403: Forbidden
You don’t have permission to access/owncloud/ on this server

Il suffit d’ajouter dans le fichier de configuration de apache2 les lignes ci-dessous. Pour rappel, ce n’est pas nécessaire de le faire avec la version 8 de Owncloud.

$ sudo vim /etc/apache2/apache2.conf

<Directory /home/USERNAME/www-dev/>
 Options Indexes FollowSymLinks
 AllowOverride All
 Require all granted
</Directory>

Chap 5. Connection en SSH
—————————————–

*SSH serveur
---------------------------------------

raspi$ sudo vim /etc/ssh/ssh_config
ClientAliveInterval 60
$ sudo service sshd restart

*SSH client
---------------------------------------

monOrdi$ vim ~/.ssh/config
Host *
ServerAliveInterval 60

Modification/mise-à-jour de la passephrase:

monOrdi$ cd ~/.ssh/

monOrdi:~/.ssh $ ls 
id_rsa id_rsa.pub 
monOrdi:~/.ssh $ ssh-keygen -f id_rsa -p

Chap 4. Accès au serveur Web Owncloud à partir
—————————————–

Je vous propose de revoir ce chapitre pour les détails du comment pointer votre adresse IP publique à votre nom de domaine.

$ sudo cp  /etc/apache2/apache2.conf  /etc/apache2/apache2.conf.bak
$ sudo vim /etc/apache2/apache2.conf

Ajouter les deux lignes a la fin de la page

ServerSignature Off
ServerTokens Prod

$ sudo service apache2 restart

$ sudo vim ~/www-dev/owncloud/config/config.php
'trusted_domains' =>
  array (
    0 => 'localhost',
    1 => '10.1.2.3',
    2 => 'Mon.Adresse.IP.Publique',
    3 => '.netlib.re',
    4 => '.nsupdate.info',
  ),

$ sudo service apache2 restart

Voici le contenu de mon fichier /etc/apache2/site-enabled/owncloud.conf
=====================================================
Alias /owncloud "/home/USERNAME/www-dev/owncloud"

 <VirtualHost *:80>
 ServerName MaPage.netlib.re
 Redirect permanent / https://MaPage.netlib.re/
</VirtualHost>

<VirtualHost *:80>
 ServerName MaPage.nsupdate.info
 Redirect permanent / https://MaPage.nsupdate.info/
</VirtualHost>

# Web server configuration

<VirtualHost *:443>
 ServerName MaPage.netlib.re/
 ServerAlias MaPage.nsupdate.info/

 # SSL configuration
 #SSLEngine on

 # Restrict/deny/allow access to certain directories

 <Directory /home/USERNAME/www-dev/owncloud/>
 Options +FollowSymlinks
 AllowOverride All

 <IfModule mod_dav.c>
 Dav off
 </IfModule>

 SetEnv HOME /home/USERNAME/www-dev/owncloud
 SetEnv HTTP_HOME /home/USERNAME/www-dev/owncloud
 </Directory>

 <Directory "/home/USERNAME/www-dev/owncloud/data/">
 # just in case if .htaccess gets disabled
 Require all denied
 </Directory>

</VirtualHost>



# modern configuration, tweak to your needs
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !--Sortie Tronquee--!
SSLHonorCipherOrder     on
SSLCompression          off

# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling          on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache        shmcb:/var/run/ocsp(128000) 

 

Ci-dessous, quelques commandes utile pour vérifier les erreurs de syntax dans /var/apache2/site-enabled/owncloud.conf

$ sudo apache2ctl configtest
$ sudo journalctl | tail


$ systemctl status apache2.service 

Pour régler les problèmes annoncés dans la page d'administration de Owncloud, il suffit d'installer php5-apcu

$ sudo apt install php5-apcu 

Puis d'ajouter la ligne ci-dessous dans ~/www-dev/USERNAME/owncloud/config/config.php

<?php
$CONFIG = array (
!--Sortie Tronquee--!
'memcache.local' => '\OC\Memcache\APCu',
);
$ sudo service apache2 restart


Chap 7. Let's Encrypt (LE)
-----------------------------------------

Le nouveau système pour l'installation de LE est beaucoup plus simple qu'auparavant.


$ mkdir ~/Letsencrypt
$ cd Letsencrypt/
~/Letsencrypt $ wget https://dl.eff.org/certbot-auto
~/Letsencrypt $ chmod a+x certbot-auto $ ./certbot-auto

Puis faites un test de verification du renouvellement automatique.

~/Letsencrypt $ certbot-auto renew --dry-run 

Créer ensuite une règle dans crontab, qui va lancer automatiquement, une demande de renouvellement du certificat une fois tous les 12 heures.

$ sudo crontab -e
  #Minute Hour Day of Month Month Day of Week Command
  #(0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat)

crontab
* */12 * * * /home/matakasi/letsencrypt/certbot-auto renew --quiet --no-self-upgrade >> /var/log/apache2/letsencrypt-renew.log 2>&1

Référence:

Apache on Debian (other)

Suppression et ajout d’une interface graphique

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web Owncloud à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 9. Suppression et ajout d’une interface graphique

Dans ce chapitre, je vais essayer de donner le maximum d’information sur les différentes commandes à entrer pour désinstaller et réinstaller l’interface graphique (ou GUI, de Graphique User Interface) de notre système d’exploitation, qui est ici du Raspbian. Les différentes étapes que je vais décrire ici peuvent s’appliquer ailleurs, toujours dans le monde de linux bien sur.

I. Suppression de l’interface graphique et des différents composés qui y sont associés

J’espère qu’avec le temps, vous utiliserez moins, si ce n’est plus du tout, l’interface graphique pour gérer votre serveur sous linux. Il est donc temps de supprimer définitivement le GUI, d’autant plus que celà vous faira gagner un peu d’espace sur votre carte SD. Cet espace de gagné est loin d’être négligable.

Qu’est-ce que donne la commande « df »?

En général, pour avoir des informations pour chaque commande, il faut passer par un « man [nom_de_la_commande]« . Pour changer, je vous propose de découvrir la commande « apropos« . Comme le nom l’indique, on veut avoir les informations à propos de la commande « df« .

Notez bien que cette commande va chercher toutes les commandes qui contiennent « df » dans le nom. Tapez « apropos df » dans une console, et voyez le résultat.

Comme on connait exactement (option -e) le nom de notre commande, on ne va pas s’embêter à afficher tout le résultat de la commande « df ».

$ apropos -e df
df (1) - report file system disk space usage

La commande « df » nous donne donc l’espace disponible sur notre disque. Voyons ce qu’on a:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
 /dev/root       7.2G  5.6G  1.4G  81% /
 devtmpfs        483M     0  483M   0% /dev
 /dev/mmcblk0p1   60M   21M   40M  35% /boot

L’option -h de la commande « df » nous permet de lire plus facilement le résultat.

Il ne me reste plus que 1,4Go d’espace libre sur ma carte SD. Je tiens à préciser à ceux qui n’ont pas suivit ce chapitre depuis le début que j’ai branché un disque dur externe pour le stockage de données dans Owncloud.

Il est à noter que cette commande va de paire avec la commande « du » qui, par contre nous affiche l’espace utilisé par un ou plusieurs fichier. Comme example, vérifiez ce que contient le dossier tmp qui, je le rappelle, devrait se vider automatiquement à chaque démarrage de l’ordinateur.

$ sudo du -h /tmp/

Voyez le même résultat sans l’option -h.

Qu’est ce qu’on peut supprimer sur Raspbian pour gagner de l’espace?

Les étapes suivantes peuvent s’appliquer à la suppression de tout environement de bureau. Initialement, Mate a été installé par défaut avec Raspbian.

Pour ceux qui n’ont pas besoin d’explication, vous pouvez directement supprimer Mate, ou tout autre environement de bureau (DE, Desktop Environment) comme suit.

$ sudo aptitude purge `dpkg --get-selections | grep 'gnome\|mate\|xorg\|lightdm' | cut -f 1`
$ sudo aptitude -f install
$ sudo aptitude purge `dpkg --get-selections | grep deinstall | cut -f 1`
$ sudo aptitude -f install

Vous avez certaintement remarqué que j’ai utilisé aptitude au lieu de apt. Il y a une raison pour celà.

II. Aptitude vs apt-get vs apt

Je ne vais pas rentrer dans les détails concernant laquelle de ces commandes il est préférable d’utiliser. Par contre, je ne peux m’empécher de vous inciter à n’utiliser que APT tant que possible, qui est en fait une amélioration de la commande apt-get.

Si vous êtes familier avec aptitude ou apt-get, alors l’utilisation de apt ne devrait pas trop vous poser de problèmes.

apt install       Installe le paquet
apt remove     Supprime le paquet
apt purge         Supprime le paquet ainsi que ses fichiers de configuration
apt autoremove                         Supprime les dépendances du/des paquets désinstallés

apt update                                  Met à jour les métadonnées de l’archive du paquet
apt upgrade                                Installe les version candidates des paquets installés sans supprimer les anciens
apt full-upgrade                        Idem que « apt upgrade » mais cette commande peut aussi supprimer les anciens paquets
apt -f install                               Répare les fichiers « cassés »

apt list –installed                     Affiche la liste des paquets installés
apt list –upgradable                Affiche la liste des paquets installables

Il est possible d’installer et de supprimer plusieurs paquets en même temps, en ajoutant le signe « + » ou « – » juste après le nom du ou des packets. Voici deux exemples qui donnent les mêmes résultats: suppression du packet2 puis installation du packet1.

# apt install packet1 packet2-

# apt remove packet2 packet1+

N’hésitez pas à taper « man apt » pour plus d’information.

 

Pourquoi continuer d’utiliser aptitude pour certaines tâches?

Ce qui m’embête le plus avec apt, c’est résultat donné suite à une rechercher de paquets.

Voyez la différence entre apt search et aptitude search. Personnellemment, je trouve que le résultat donné par aptitude search est beaucoup plus lisible.

$ aptitude search 

 

selection_036

« i » indique que le paquet est installé, « p » quand il est installable. Pour n’afficher que les paquets installés,

$ aptitude search | grep ^i

Effectuer ensuite le même test avec apt search.

$ apt search
$ apt search | grep installed

 

selection_035

Noter l’alerte qui nous prévient que cette commande n’est pas tout à fait au point pour les scripts.
Ci-dessous deux options de aptitude qui me paraissent incontournables, et dont je n’ai pas encore réussit à trouver les équivalents avec apt:

-s               simule le résultat de la commandes
-d               télécharge seulement les paquets sans les installer ni les mettre à jour

 

Si malgré celà vous souhaitez n’utiliser que apt, sachez que si vous rencontrez des problèmes de dépendances et qui n’arrivent pas à s’installer avec apt, mieux vaut utiliser aptitude dans ce cas.

L’option « why » vous donne la liste de dépendances nécessaire à l’installation du paquet, tandis que « why-not » vous donne une indication pour laquelle le(s) paquet(s) ne peut/peuvent pas être installé(s).

 

selection_019

Comme vous pouvez le constater, avant de pouvoir supprimer définitivement xorg, il faudrait commencer par supprimer ces dépendances.

$ sudo aptitude purge `dpkg --get-selections | grep  | cut -f 1`
$ sudo aptitude -f install
$ sudo aptitude purge `dpkg --get-selections | grep deinstall | cut -f 1`
$ sudo aptitude -f install

Ici, est à remplacer successivement par la liste de dépendance des paquets de mate, xorg, lightdm et gnome.

En prenant le cas de xorg qui a pour dépendance plymouth et desktop-base,

$ sudo aptitude purge `dpkg --get-selections | grep -e plymouth -e desktop-base -e xorg | cut -f 1`
$ sudo aptitude -f install
$ sudo aptitude purge `dpkg --get-selections | grep deinstall | cut -f 1`
$ sudo aptitude -f install

Pourquoi utiliser dpkg dans la commande aptitude purge?

III. DPKG

Il faut savoir que la commande « aptitude purge » ne supprime que le/les paquets spécifiés dans la commande, ainsi que son/ses fichiers de configuration.

De ce fait, le fait de lancer la commande « aptitude purge gnome » ne supprime que l’environement de bureau du même nom, en laissant toute une liste de packets et de programmes, orphelins. Certes, ces paquets ne prennent pas de place, mais quand même.

L’astuce pour tout supprimer serait d’afficher la liste des paquets contenant le nom de celui qui nous intéresse, puis de lancer la commande aptitude purge sur résultat de la première commande.

Voyons pas à pas ce qu’il faut faire.

1. Afficher de la liste de tous les packets

$ dpkg --get-selections

2. Faire le tri parmis ces paquets afin de n’afficher que ceux qui contiennent gnome dans leurs noms

$ dpkg --get-selections | grep gnome

Comme la commande dpkg nous donne pas mal d’informations étalées sur plusieurs colones, concernant le packet installées

3. Supprimer toutes les colonnes, autre que celle qui affiche le nom du packet

Le champ (en anglais: Field, d’où l’option -f de cut) qui nous intéresse est exactement la première colone.

$ dpkg --get-selections | grep gnome | cut -f 1

 

selection_020

Vous pouvez jouer avec des valeurs entre 1 à 10 par exemple, de l’option -f de « cut » pour voir comment cet outil fonctionne. Amusez-vous bien!

4. Suppression des packets donnés par dpkg

$ sudo aptitude purge `dpkg --get-selections | grep gnome | cut -f 1`

Notez les deux accents graves à l’intérieur de la commande aptitude purge, pour lancer une commande à l’intérieur d’une autre. La commande ci-dessus revient dont à taper la série de commandes suivantes.

$ sudo aptitude purge gnome
$ sudo aptitude purge gnome-icon-theme
$ sudo aptitude purge gnome-keyring
etc.

Pour aller encore un peu plus loin, dans la même commande, on peut faire une recherche de tous les packets contenant plusieurs mots clés avec grep. Voici la listes de commande finale à taper.

$ sudo aptitude purge `dpkg --get-selections | grep 'gnome\|mate\|xorg\|lightdm' | cut -f 1`
$ sudo aptitude -f install
$ sudo aptitude purge `dpkg --get-selections | grep deinstall | cut -f 1`
$ sudo aptitude -f install

Si les anti-slashs (\) vous embêtent, l’option -E ou -e de grep serait un très bon choix. Ou tout simplement, utiliser egrep.

$ sudo aptitude purge `dpkg --get-selections | grep -E 'gnome|mate|xorg' | cut -f 1`
$ sudo aptitude purge `dpkg --get-selections | egrep 'gnome|mate|xorg' | cut -f 1`
$ sudo aptitude purge `dpkg --get-selections | grep -e gnome -e mate -e xorg | cut -f 1`

Vous vous demander certainement pourquoi lancer une nouvelle commande de purge après avoir supprimé tous les paquets avec leurs dépendances! C’est qu’il en reste quelques fichiers de configuration qui trainent encore par-ci et par-là, qu’on n’a pas pu supprimer totallement avec la commange aptitude purge.

En jouant avec la commande « dpkg -l » associé à la commande « aptitude why« , j’ai pu vérifier que d’autres paquets indépendant de l’interface graphique, ne sont plus nécessaires et peuvent aussi être supprimés.

$ dpkg -l | grep x11
ii x11-common

$ aptitude why x11-common
i iceweasel Depends firefox-esr
i A firefox-esr Depends libxt6
i A libxt6 Depends libice6 (>= 1:1.0.0)
i A libice6 Depends x11-common

Il ne faut donc pas oublier de supprimer firefox, iceweasel et d’autres applications dont vous n’avez plus besoin.

Comment lire le résultat de « dpkg -l »?

Cette commande donne une liste de paquets avec un indice à 2 ou 3 caractères dans la première colone pour nous donner une indication de l’état de chacun de ces paquets.

$ dpkg -l

Le premier caractère

i Installer
r Supprimer/désinstaller

Le deuxième caractère

i Installé
c Fichier de configuration

Le troisième caractère

Pas de message d’erreur

Ce qui se résume à:

ii      Le packet devrait être installé, et il l’est
rc     Le packet a été supprimé, mais son fichier de configuration ne l’est pas

 

selection_021

Pour plus d’information sur la commande dpkg, ‘hésitez pas à lire le manuel.

Voyons maintenant combien d’espace est-il disponible sur notre carte SD.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
 /dev/root       7.2G  4.5G  2.5G  65% /
 devtmpfs        483M     0  483M   0% /dev
 /dev/mmcblk0p1   60M   21M   40M  35% /boot

Pour rappel, initialement on avait

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
 /dev/root       7.2G  5.6G  1.4G  81% /
 devtmpfs        483M     0  483M   0% /dev
 /dev/mmcblk0p1   60M   21M   40M  35% /boot

Au final, j’ai donc gagné 16% d’espace disque sur un total de 8Go de ma carte SD.

IV. (Ré)installation de l’interface graphique

Une des raisons pour laquelle certains d’entre vous souhaite réinstaller l’interface graphique, c’est généralement pour essayer un autre environnement de bureau (DE, Desktop Environment).

Afin de vous aider à tout remettre en place « presque » comme avant, commencer par faire une rechercher sur les DEs qui peuvent s’installer sur votre système. Installer ensuite la version « core », c’est à dire la version minimale de cet environnement, afin de n’installer que le néssaire sans les paquets inutiles comme les jeux Gnomes qui nous prennent de l’espace pour rien.

Pour réinstaller Mate,

$ sudo aptitude install mate-desktop-environment-core

Je recommande ensuite d’installer un navigateur internet, un terminal et peut-être un éditeur de texte. Pour les plus curieux, je vous propose d’essayer l’outil webmin.

Sources:

What is MATE?
aptitude, apt-get, and apt Commands
7 Linux Grep OR, Grep AND, Grep NOT Operator Examples
apt-get / apt-cache comparés à aptitude

Ajout d’un disque dur externe et migration de données

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web Owncloud à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 8. Ajout d’un disque dur externe et migration de données

Je vous ai parlé de sécurité tout au long des différents chapitres précédents. Au risque de vous décevoir, ce ne serait pas pour la dernière fois que je vais vous en parler de méthodes qui pourraient améliorer la sécurité sur vos serveurs.

Dans le chapitre 2, nous avons installé Owncloud avec les options par défaut, dans le répertoire racine du serveur apache, c’est à dire dans le dossier « /var/www/html/ ». Ceci dans le but de simplifier l’installation et la configuration de Owncloud pour les non-initiés.

Sachez que ce choix est loin d’être le meilleur. Ci-dessous je vais essayer de vous aider à migrer vos dossiers et configurations vers la nouvelle destination.
Si vous ne vous sentez pas à l’aise pour le faire, le meilleur choix serait de faire une nouvelle installation, puis de bien choisir les options qui vous intéressent, entre autre l’emplacement pour installer Owncloud ainsi que celui où placer les données.

/!\ Personnelement, je pense qu’il faut réinstaller Owncloud.
Ce chapitre est donc conçu à titre informative, pour vous aider à être un peu plus à l’aise avec les différentes manipulations sous linux.

I. Installation dans le dossier racine de Apache

Ceci est juste un petit rappel de la méthode décrite dans le chapitre 2. Ici, Owncloud a été installé directement dans le dossier racine par défaut du serveur Apache, c’est à dire dans /var/www/html. Comme je l’ai dit plus haut, ce n’est pas le meilleur choix, mais il est intéressant de le faire afin de pouvoir suivre les différentes étapes pour apprendre comment migrer les différentes informations de notre serveur Owncloud.
Si vous ne l’avez pas encore remarqué, le répertoire /var/www/html ainsi que son contenu, appartient par défaut à l’utilisateur root. Faites donc très attention à y appliquer un utilisateur sans privilège (ici www-data) à ce dossier.

raspi$ ls -al /var/www/html/
total 28288
drwxr-xr-x  4 root     root         4096 Apr  8 19:07 .
drwxr-xr-x  3 root     root         4096 Jan  4 20:19 ..
-rw-r--r--  1 www-data www-data     12 Apr  3 23:21 index.html
drwxr-xr-x 15 www-data www-data     4096 Apr  8 18:32 owncloud
drwxr-xr-x  2 root     root         4096 Apr 19 22:58 .well-known

Ceci dit, afin de limiter la casse si jamais il y a accès non autorisé à votre serveur, donner donc le minimum de permission à l’utilisateur Owncloud pour que ce dernier n’ait pas accès au reste du système. Cet utilisateur ne doit absolument pas avoir des mêmes privilèges que n’importe quel utilisateur de votre système dont la liste ne se limite pas seulement à l’utilisateur root, ou l’utilisateur principal que j’ai appelé USERNAME depuis de début de cette série d’article.

Noter que le choix du nom de l’utilisateur Owncloud n’a pas d’importance. Par défaut, l’utilisateur Apache doit appartenir au groupe www-data, et c’est par soucis de simplicité que j’ai choisi un utilisateur Apache de même nom que le groupe.

II. Installation dans le dossier /home

Pour ceux qui sont un peu plus sceptique concernant l’efficacité du choix proposé par défaut, un autre choix serait d’installer Owncloud dans /home. Ne l’oubliez pas que l’utilisateur Owncloud ne doit pas avoir les mêmes permissions que n’importe quel utilisateur du système (ie root, USERNAME, etc.).
Ce choix d’installation dans /home est un bon choix pour les utilisateurs qui ne trouvent pas pratique de travailler dans un répertoire qu’ils n’ont pas choisi.
Il est fort probable que vous avez déjà installé Owncloud dans le dossier racine de Apache, c’est à dire dans /var/www/html/owncloud. Ce n’est pas grave, je vais vous indiquer comment effectuer la migration de vos configurations et données, vers un autre répertoire de votre choix.

Migrations du répertoire Owncloud dans /home

Etape 1: Arrêter le serveur web

Arrêter le serveur Apache avant de migrer vos données.

raspi$ sudo service apache2 stop

Etape 2: Commencer la migration des données

Créer un répertoire de travail Owncloud, puis y appliquer les permissions pour l’utilisateur www-data.

raspi$ mkdir /home/USERNAME/www-dev

Migrer vos données et configurations Owncloud.

raspi$ sudo cp -rv /var/www/html/owncloud /home/USERNAME/www-dev

Appliquer et vérifier les nouvelles permissions.

raspi$ chown -R www-data:www-data /home/USERNAME/www-dev

raspi$ ls -l /home/USERNAME | grep www-dev
drwxr-xr-x 2 www-data www-data 4096 Jul 10 14:21 www-dev
$ ls -l /home/USERNAME/owncloud
total 168
drwxr-xr-x 28 www-data www-data  4096 Jul 10 14:30 3rdparty
drwxr-xr-x 21 www-data www-data  4096 Jul 10 14:31 apps
-rw-r--r--  1 www-data www-data   477 Jul 10 14:31 AUTHORS
drwxr-xr-x  2 www-data www-data  4096 Jul 10 14:30 config
-rw-r--r--  1 www-data www-data  3017 Jul 10 14:31 console.php
-rw-r--r--  1 www-data www-data 34520 Jul 10 14:31 COPYING-AGPL
drwxr-xr-x 19 www-data www-data  4096 Jul 10 14:31 core
-rw-r--r--  1 www-data www-data  5915 Jul 10 14:31 cron.php
drwxr-x---  5 www-data www-data  4096 Jul 10 14:31 data
-rw-r--r--  1 www-data www-data 23886 Jul 10 14:31 db_structure.xml
-rw-r--r--  1 www-data www-data   179 Jul 10 14:31 index.html
-rw-r--r--  1 www-data www-data  2026 Jul 10 14:31 index.php
-rw-r--r--  1 www-data www-data  2595 Jul 10 14:31 indie.json
drwxr-xr-x  3 www-data www-data  4096 Jul 10 14:31 l10n
drwx--x---  3 www-data www-data  4096 Jul 10 14:30 letsencrypt
drwxr-xr-x  6 www-data www-data  4096 Jul 10 14:31 lib
-rw-r--r--  1 www-data www-data   283 Jul 10 14:31 occ
drwxr-xr-x  2 www-data www-data  4096 Jul 10 14:31 ocs
drwxr-xr-x  2 www-data www-data  4096 Jul 10 14:31 ocs-provider
-rw-r--r--  1 www-data www-data  2969 Jul 10 14:31 public.php
-rw-r--r--  1 www-data www-data  4521 Jul 10 14:31 remote.php
drwxr-xr-x  3 www-data www-data  4096 Jul 10 14:32 resources
-rw-r--r--  1 www-data www-data    26 Jul 10 14:31 robots.txt
drwxr-xr-x 13 www-data www-data  4096 Jul 10 14:31 settings
-rw-r--r--  1 www-data www-data  1817 Jul 10 14:31 status.php
drwxr-xr-x  3 www-data www-data  4096 Jul 10 14:30 themes
-rw-r--r--  1 www-data www-data   233 Jul 10 14:31 version.php

Renommer l’ancien repértoire Owncloud au lieu de le suppprimer.

raspi$ sudo mv /var/www/html/owncloud /var/www/html/owncloud_original

Etape 3: Indiquer le nouveau chemin d’accès vers Owncloud au Serveur Web

Vu que notre serveur Owncloud a changé de répertoire, il faut indiquer au serveur web comment y accéder. Pour celà, il suffit de créer un lien symbolique dans /var/www/html.

raspi$ sudo ln -s /home/USERNAME/www-dev/owncloud /var/www/html/owncloud

raspi$ chown -R www-data:www-data /var/www/html/owncloud

Etape 4: Relancer le serveur web Apache

Relancer le server web, puis essayer d’accéder à l’URL de votre serveur Owncloud.

$ sudo service apache2 start

Tout devrait être bon, et vous ne devriez pas avoir de problèmes de permission.

III. Déplacer le dossier Data de la carte SD vers un disque dur externe

Pourquoi direz vous qu’il est préférable d’installer les données de Owncloud sur un support extérieur au raspberry pi?
Il y a au moins deux raisons à celà. Notez tout d’abord que l’espace disponible sur une carte SD est assez limitée. Puis ayez en tête que la durée de vie d’une carte SD est beaucoup plus courte en comparaison de celle d’un disque mécanique (HDD ou SDD). Si je peux, je vais aussi évoquer le fait que monter et démonter un disque dur externe ne nécessite pas un arrêt total du raspberry pi dans le cas où vous pensez remplacer le support physique sur lequel est enregistré vos données.

/!\ Je tiens à préciser que le disque dur doit être fourni avec une alimentation externe, puisque le raspberry pi n’est pas assez puissant pour pour alimenter un autre appareil via son port USB.

Etape 1: Partitionner le disque dur externe

Brancher maintenant votre disque dur sur l’un des ports USB du raspberry pi. Puis identifier les différentes partitions.

raspi$ sudo fdisk -l
!--Sortie Tronquée--!
Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        8192  131071  122880   60M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      131072 2848767 2717696  1.3G 83 Linux
!--Sortie Tronquée--!

Device     Boot Start     End Sectors  Size Id Type
/dev/sda1        2048 3907028991 3907026944  1.8T 83 Linux

« Rappel sur la désignation des partitions

Les périphériques sont désignés par le système par des fichiers dans le répertoire /dev/.
Les périphériques de stockage seront donc reconnus par /dev/sda, /dev/sdb, etc.
Les partitions sont désignées par leur numéro dans le disque (/dev/sda1, /dev/sda2, …)
Les partitions peuvent aussi être reconnues par leur UUID et leur label. » (lu sur ubuntu-fr.org)

Le disque qui nous intéresse est celui en /dev/sda, et contient déjà une partition (/dev/sda1) qu’on va supprimer avant d’en créer une nouvelle. Les autres partitions (/dev/mmcblk0p[number]) sont ceux de la carte SD du raspberry pi, qu’il ne faut surtout pas toucher.
Pour partitionner ce disque, plusieurs outils sont à votre dispositions. Entre autre, il y a fdisk et cfdisk. Je préfère utiliser fdisk qui ne nécessite pas l’utilisation des flèches pour se déplacer sur la page, et qui me permet donc d’aller plus vite dans le partionnement du disque.
Pour plus d’information sur ces différentes commandes, n’hésitez pas à visiter la page « Partitionner son disque dur en ligne de commande« .

/!\ Les commandes ci-dessous vont supprimer tout le contenu de votre disque. Faites donc bien attention à ce que vous faites.

raspi$ sudo fdisk /dev/sda

Command (m for help): p
Disk /dev/sda: 1.8 TiB, 2000398933504 bytes, 3907029167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xec7a7cb7

Device     Boot Start        End    Sectors  Size Id Type
/dev/sda1        2048 3907028991 3907026944  1.8T 83 Linux

Supprimer la ou les partitions de votre disque dur externe, ici /dev/sda1.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Vérifier que la ou les partitions ont bien été supprimées.

Command (m for help): p
Disk /dev/sda: 1.8 TiB, 2000398933504 bytes, 3907029167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xec7a7cb7

Créer ensuite une nouvelle partition. Sur mon disque de 2To, je ne vais utiliser que la moitié pour l’instant.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-3907029166, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-3907029166, default 3907029166): +1T

Created a new partition 1 of type 'Linux' and of size 1 TiB.

Vérification.

Command (m for help): p
Disk /dev/sda: 1.8 TiB, 2000398933504 bytes, 3907029167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xec7a7cb7

Device     Boot Start        End    Sectors Size Id Type
/dev/sda1        2048 2147485695 2147483648   1T 83 Linux

Enregistrer les modifications et quitter fdisk.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Voyons ce que çà donne avec la commande fdisk.

raspi$ sudo fdisk -l
!--Sortie Tronquée--!
Device     Boot Start        End    Sectors Size Id Type
/dev/sda1        2048 2147485695 2147483648   1T 83 Linux

Je n’ai utilisé que 1To d’espace disque pour les données. Je réserve le reste d’espace disponible pour une utilisation ultérireure.

Etape 2: Formatez le disque

Formatez la nouvelle partition en un système de fichier EXT4.

raspi$ sudo mkfs.ext4 /dev/sda1

Noter que la méthode « sudo mkfs -t /dev/sda1 » est à déprécier (voir « man mkfs » ).

Si vous n’êtes pas à l’aise avec les lignes de commandes pour partitionner et formater un disque, l’outil graphique GParted est votre ami.

Etape 3: Monter le disque dur externe

Vérifier encore une fois que vous voyez toutes les partitions, et plus particulièrement celle en /dev/sda1.

raspi$ sudo fdisk -l

Créer maintenant un point de montage, c’est à dire qu’il nous faut un nom de dossier à partir duquel on pourra accéder au disque. Je n’ai pas à préciser que ce dossier doit être impérativement vide.

raspi$ sudo mkdir /mnt/owncloud

Ne créer surtout pas de dossier nommé « data » sous /mnt/owncloud, pour éviter d’avoir un sous-dossier data à l’intérieur même du dossier du même nom. Ce qu’on veut c’est un dossier /mnt/owncloud/data/ et non /mnt/owncloud/data/data/.

Il est temps de monter le disque dur externe dans le répertoire indiqué.

raspi$ sudo mount /dev/sda1 /mnt/owncloud

Vérifier ensuite que le disque est bien monté.

raspi$ df -HT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4      7.8G  4.9G  2.6G  66% /
devtmpfs       devtmpfs  506M     0  506M   0% /dev
tmpfs          tmpfs     511M     0  511M   0% /dev/shm
tmpfs          tmpfs     511M  7.0M  504M   2% /run
tmpfs          tmpfs     5.3M  4.1k  5.3M   1% /run/lock
tmpfs          tmpfs     511M     0  511M   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat       63M   22M   42M  35% /boot
tmpfs          tmpfs     103M     0  103M   0% /run/user/1000
/dev/sda1      ext4      1.1T   75M  1.1T   1% /mnt/owncloud

Vous vous êtes certainement posé la question, à un moment ou à un autre, s’il faut choisir /mnt ou /media dans lequel il faut monter notre disque externe. Il y a pas mal de débat sur internet là dessus, mais cet article m’a convaincu qu’il faut choisir /mnt lorsqu’on monte manuellement un disque et qui, de plus, si le disque est supposé rester connecté en permanence au raspberry pi.

Etape 4. Migrer le dossier DATA

Migrer uniquement données du dossier DATA vers le disque dur externe. Et surtout, n’oubliez pas d’éteindre le serveur web avant d’aller plus loin.

Avant de se lancer dans le test, je me suis connecté à l’URL de mon Owncloud (http://localhost) avec un utilisateur de test (Username). Puis j’ai téléversé la video de Bug Bunny. Si tout va bien, à la fin de la migration, je devrai pouvoir télécharger et téléversion des fichiers avec mon utilisateur de test. Vérifions celà.

Selection_006
fig 1. Fichier de test dans Owncloud

Arrêter le serveur web.

raspi$ sudo service apache2 stop

Migrer les données vers la nouvelle partition.

raspi$ sudo cp -rv /var/www/html/owncloud/data /mnt/owncloud

raspi$ mv /var/www/html/owncloud/data var/www/html/owncloud/data_original

raspi$  sudo chown -R www-data:www-data /mnt/owncloud/data

Etape 5: Mettez à jour les informations des serveurs PHP

Mettez à jour le fichier de config.php pour y indiquer la nouvelle route pour atteindre le dossier DATA.

raspi$ vim /var/www/tml/howncloud/config/config.php

Remplacer ‘datadirectory’ => ‘/var/www/owncloud/data‘
Par ‘datadirectory’ => ‘/mnt/owncloud/data‘.

Etape 6: Mettez à jour les informations des serveurs Apache

De même que pour le serveur PHP, modifier les informations de owncloud.conf.

raspi$ sudo vim /etc/apache2/sites-available/owncloud.conf


!--sortie tronquée--!
    <Directory "/mnt/owncloud/data">
	# just in case if .htaccess gets disabled
	Require all denied
    

Etape 7: Redémarrer le serveur web

Relancer le server Apache.

raspi$ service apache2 start

Etape 8: monter automatiquement le disk dur externe

Si vous négligez cette étape, vous risque de ne plus avoir accès à vos données après redémarrage du raspberry pi, si vous oubliez de monter votre disque. De ce fait, il est préférable de le monter automatiquement afin d’éviter ce genre de désagrément.

Lancer la commande blkid afin d’identifier la partition qui nous intéresse et de récupérer son UUID.

raspi$ sudo blkid 
/dev/sda1: UUID="55ec24c7-c730-4689-9811-f1158362ea3c" TYPE="ext4"

Noter l’UUID: 55ec24c7-c730-4689-9811-f1158362ea3c
Editer le fichier /etc/fstab:

raspi$ sudo cp /etc/fstab /etc/fstab_original

raspi$ sudo vim /etc/fstab

Ajouter les informations du disque à monter à la dernière ligne de la page. Quand c’est indiqué [TAB], c’est qu’il faut appuyer sur la touche Tabulation du clavier.

UUID=55ec24c7-c730-4689-9811-f1158362ea3cd [TAB] /mnt/owncloud [TAB] ext4 [TAB] defaults,nofail [TAB] 0 [TAB] 2

D’après les notes dans cet excellent article, l’auteur a du ajouter l’option NOFAIL pour résoudre le problème de redémarrage du raspberry pi, du au fait que le disque dur externe met trop de temps à se monter, ce qui empêche le démarrage du système.

L’option DEFAULTS, inclue l’option automount de la nouvelle partition. Cet option utilise les configurations par défaut en une seule commande au lieu de rentrer la série d’option suivante: rw, suid, dev, exec, auto, nouser, async.

Et comme d’habitude, si vous ne vous sentez pas à l’aise avec les lignes de commandes,vous pouvez toujours utiliser un outil graphique commme disk-manager par exemple.

Etape 9: Test de vérification

Connectez vous à l’URL de votre Owncloud, puis faites les tests ci-dessous pour vérifier si la migration des données s’est bien déroulée, et que vous avez toujours ajouter ou supprimer des fichiers.
Comme vous pouvez le constater au niveau de la figure 2, nous avons toujours la vidéo de Bunny, ainsi qu’on a téléversé un nouveau fichier et tout s’est bien déroulé.

Selection_008
fig 2. Ajout d’un nouveau fichier

L’espace disque disponible est bien celui auquel on s’attend.

Selection_009
fig 3. Vérification de l’espace disponible

Le test suivant consite à redémarrer le raspberry pi, puis de vérifier si le disque dur externe est monté automatiquement suite à ce redémarrage.

raspi$ sudo reboot

Attendez une bonne petite vingtaine de secondes, puis reconnectez vous de nouveau en ssh au raspberry pi. N’hésitez pas à pinger l’appareil pour vérifier qu’il est accessible ou non.

Taper la commande

raspi$ df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.2G  4.6G  2.4G  66% /
devtmpfs        483M     0  483M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  6.6M  481M   2% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   21M   40M  35% /boot
/dev/sda1      1008G  341M  957G   1% /mnt/owncloud
tmpfs            98M     0   98M   0% /run/user/1000

Si vous voyez la partion /dev/sda1 monté comme prévu, et ben je n’ai rien à ajouter de plus. Féliciation! Ce chapitre est terminé pour vous.

Sources et Références

How to set/change data directory
Deplacer le contenu de /var/www/html vers /home/USERNAME/
comment migrer uniquement les donnees dans home
Raspberry Pi OwnCloud 9 (Drop box Clone)
Install OwnCloud on your Raspberry Pi
Simple Owncloud Installation on Raspberry Pi 2
Owncloud and an external hard drive
What’s the most “correct” mount point for a permanent NTFS partition?
Ubuntu: Mount The Drive From Command Line
Comment ajouter un nouveau disque dur
How to set/change data directory
Le montage des systèmes de fichiers
Raspberry Pi External Storage Part 1 – Step by Step Permanent External Hard Drive (plus OwnCloud Adjustments)

Accès au serveur Web Owncloud à partir de son nom de domaine

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web Owncloud à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 4. Accès au serveur Web Owncloud à partir de son nom de domaine

Avant d’aller plus loin, je souhaite rappeler que « internet c’est la jungle ». Tout et n’importe quoi peut-y arriver. Il ne faut donc pas prendre la question de sécurité à la légère. Prennez donc toutes les précautions nécessaires, comme mettre régulièrement à jour vos serveurs, etc.

1. Configuration du réseau

Matériel

  • Raspberry Pi 2 B
  • Carte micro SD, Classe 10
  • Câble HDMI
  • Câble Ethernet
  • Télé ou moniteur PC, avec support HDMI (pour l’installation de Raspbian uniquement)
  • Disque dur Externe USB 3 autonome, raccordé à une source d’alimentation (optionnel)
  • Un parefeux (optionnel)

Configuration

  • Adresse IP Publique (internet) statique, ou dynamique (nécessite l’utilisation d’un script)
  • Adresse IP Privée statique (LAN) pour le RPi (optionnelement, pour le parefeux aussi)
  • Nom de domaine (NetLibre, nsupdate)
  • Certificat SSL (OpenSSL)

Topologie du réseau

Pour une meilleure sécurité, assurez-vous d’avoir votre serveur Owncloud dans la zone DMZ (ou zone démilitarizée) de votre réseau. Ceci n’est pas une vulnérabilité, mais bien au contraire. Cette fonctionnalité vous permet de séparer le réseau accessible à partir d’internet, de votre réseau local.

pic1

Une fois le DMZ mis-en place, vous ne devriez pas vous soucier du port forwarding. A moins que vous ne souhaitez accéder à votre site, qu’à partir d’un port autre que les ports 80 et 443.

Si vous n’avez que le RPi sur le DMZ (fig 1), au niveau de la configuration du routeur de votre FAI (fournisseur d’accès à internet), vous devriez avoir l’option d’entrer l’adresse IP de votre RPi. Si par contre, vous avez un parefeux sur votre réseau (fig 2), dans la zone DMZ bien sûr, il vous faudra renseigner l’adresse IP de ce parefeux dans la configuration du DMZ du routeur FAI, puis de faire un NAT pour rediriger le traffic vers vos serveurs. Je ne vais pas rentrer dans les détails ici.

De ce fait, dans les deux cas, assurez vous d’assigner une adresse IP privée fixe au RPi, mais aussi à votre parefeux si vous en avez un.

Assigner une adresse IP fixe au RPi

Brancher votre RPi directement au routeur FAI afin de récupérer les valeurs données par « ip add show dev eth0 » (anciennement connu par « ifconfig’).

$ ip add show
    inet 10.1.2.3/24 brd 10.1.2.255 scope global eth0

Créer ensuite un fichier /etc/network/interfaces.d/eth0, dans lequel on va y ajouter les informations données par la commande précédente. La plus d’information concernant la configuration de l’interface réseau, je vous recommande de lire cet article sur le site officiel debian.

$ sudo vim /etc/network/interfaces.d/eth0 
auto eth0
iface eth0 inet static
     address 10.1.2.3
     netmask 255.255.255.0
     gateway 10.1.2.254

$ sudo ifup -v eth0

2. Accéder à votre server web via un nom de domaine

L’étape suivante serait d’associer un nom facile à retenir, qui va pointer vers l’adresse ip publique de votre routeur, tel que MaPage.monDomaine.fr.

Comme serveur DNS pour avoir un nom de domain, j’ai choisi de m’enregistrer sur NetLib.re (projet francophone), et nsupdate.info (projet anglophone) pour les raisons suivantes:
– Nom de domaine gratuit
– Codes sources du projet en opensource
– Facilité d’inscription
– Aucune compétence particulière nécessaire pour l’utilisation du site

Enregistrement de type « A » (‘A Record’ en anglais)

Notre priorité étant de mapper le domaine MaPage.monDomaine.fr à notre adresse IP publique, il nous faut donc un enregistrement de Type A, si l’adresse IP Publique est sous format IPv4, sinon de Type AAAA pour l’IPv6.
Pour les autres types d’enregistrement (SRV et MX, etc.), je ne vais pas en parler puisqu’on en a pas besoin pour l’instant.

Connectez-vous sur la site NetLibre. Noter qu’il y a déjà deux champs pré-remplis sur cette page, qu’il faut éviter de supprimer : ns0.arn-fai.net. et alsace.tetaneutral.net.

pic2

Remplissez les différents champs comme suit:

Type: A
Nom: @
TTL: 3600
Valeur: <mon adress IP publique>

Une ligne supplémentaire vous confirmant l’ajout de l’information, devrait s’afficher sur la page.

pic3
Une fois que vous avez compris comment çà marche, vous pouvez vous enregistrer aussi sur nsupdate.info puis refaire la même procédure afin d’avoir une adresse en .nsupdate.info.

Vérification de la résolution de nom

Patientez quelques 5-10 minutes, puis vérifier si vous pouvez accéder à votre page en utlisant le nom de domaine. Si rien ne s’affiche, faite un ping ou utiliser cet outil internet.

$ ping .netlib.re

pic4

L’outil internet ci-dessous donne les mêmes résultats qu’une simple commande nslookup.

pic5

Domaine de confiance (Trusted domain)

Ne vous inquiétez pas du message affiché lors de la première connection sur MaPage.monDomaine.fr (.netlib.re), qui nous informe que domaine n’est pas de confiance.

pic6

Pour y remédier, il suffit d’ajouter le nom de domaine de votre page, ainsi que l’adresse IP publique de votre site dans le fichier /var/www/html/owncloud/config/config.php.

$ sudo vim /var/www/html/owncloud/config/config.php
'trusted_domains' =>
  array (
    0 => 'localhost',
    1 => '10.1.2.3',
    2 => 'Mon.Adresse.IP.Publique',
    3 => '.netlib.re',
    4 => '.nsupdate.info',
  ),

$ sudo service apache2 restart

Adresse IP dynamique

Vous ne le savez peut être pas mais, l’adresse IP assignée par les FAIs à notre routeur peut changer à une fréquence très variable. Du genre une fois par jour/mois, etc. A la base, cette règle a été conçu pour empêcher certaines personnes malhonnêtes d’attaque continuellement la même adresse IP.

Je n’ai pas trouvé de solution viable pour l’instant. Je ne vais donc pas me lancer dans les explications sur comment faire pour y remédier au problème d’adresse IP dynamique.

Si vous avez une meilleure solution autre que les scripts proposés sur certains sites qui, généralement envoient les informations de connection non chiffrées à notre serveur de domaine, entre autre le mot-de passe, je suis preneur.

3. Quelques conseils de sécurité

Si vous avez suivit l’étape d’installation de Owncloud sur un RPi dans cet article, vous n’avez plus besoin de réactiver le mode « a2enmod ssl » du server Apache.
Vérifier que vous avez bien accès à votre page en utilisant https://.netlib.re:/owncloud (si vous n’avez pas pas de redirection de port, le lien se résume à https://.netlib.re/owncloud).
Un avertissement s’afficher à l’écran si vous vous connectez en HTTPs, pour vous prévenir que le serveur auquel vous voulez accéder n’a pas de certificat de sécurité valide.

pic7
Pour pouvoir continuer la visite de la page, et faire fi du message, cliquer tout simplement sur Proceed to MaPage.netlib.re (unsafe).

Supprimer les informations sur les versions de vos serveurs

Il y a plusieurs façon d’afficher une page d’erreur sur une page. J’ai choisi une basique, en demandant au navigateur d’afficher la page http://.netlib.re:443/owncloud.

pic8

Pour y remédier, ajouter « ServerSignature Off » à la fin du fichier /etc/apache2/apache2.conf.

Taper ensuite,

$  curl -v http://.netlib.re:/owncloud

pic9

Ici, c’est la commande « ServerTokens Prod » qu’il faut ajouter dans le fichier de configuration de Apache.

En conclusion, pour éviter d’afficher les informations des différents serveurs (type, version, etc.), désactiver leurs signatures dans /etc/apache2/apache2.conf.

$ sudo vim /etc/apache2/apache2.conf
ServerSignature Off
ServerTokens Prod

Ce n’est pas tout, vérifier aussi que l’option d’affichage de la version de php est bien désactivée, ce qui devrait être le cas par défaut.

$ sudo vim /etc/php5/apache2/php.ini

Faite une recherche en tapant

/expose

pic10

Vous devriez avoir « expose_php = Off », si ce n’est pas le cas, remplacer le On par Off.
Redémarrer le serveur Apache.

$ sudo service apache2 restart

4. Avant d’aller plus loin

Je vous propose de lire l’article « Développement et administration des services réseaux« , à partir duquel j’ai retirré les informations ci-dessous.

apache2.conf : le fichier de configuration générale (ancien httpd.conf). C’est à partir de lui que tous les autres fichiers sont chargés

envvars : le fichier utilisé pour définir des variables d’environnement propres à Apache

ports.conf : le fichier qui contient la directive listen qui spécifie les adresses et les ports d’écoutes

mods-available/ : le dossier contenant les modules disponibles

mods-enabled/ : le dossier contenant les modules activés

sites-available/ : le dossier contenant les fichiers de configuration des sites disponibles (la liste des vhosts installés)

sites-enabled/ : le dossier contenant les fichiers de configuration des sites activés (la liste des vhosts utilisés)

Vhosts fait référence aux hôtes virtuels.

Nous allons ensuite associer l’adresse IP publique de notre serveur Owncloud à un nom de domaine sur internet (de préférence, choisissez-en deux au cas où l’un des URLs devient inaccessible).
Je me suis enregistré sur netlib.re, puis nsupdate.info pour les raisons suivantes. Un, à cause de la facilité d’utilisation pour les débutants. Deux, pour leurs gratuités. Et trois, à cause de la disponibilité de leurs codes sources.

Pour accéder à mon serveur, je n’ai donc plus qu’à taper

.netlib.re
.nsupdate.info

5. Accéder à Owncloud en SSL (HTTPS)

Pour rappel, le HTTPS est une combinaison entre les protocoles HTTP et SSL/TLS, pour chiffrer les informations échangées entre notre poste et le serveur visité. Ceci justement, dans le but de créer une connection avec une sécurité « résonnable » à travers le réseau pour protéger les utilisateurs, ainsi que les données qui y transitent.

Si vous avez besoin de plus de sécurité, vous devriez utiliser un certificat signé par une authorité de certification (CA).

Création d’un certificat SSL

Ci-dessous la marche à suivre pour mettre en place un Site Web sécurisé via protocole SSL. J’ai choisi la méthode de création de Certificat auto-signé, option « -x509 » avec l’utilisation de la commande openssl, qu’on va placer dans le dossier /etc/ssl.

$ ssh .netlib.re
$ sudo mkdir -p /etc/ssl/localcerts
$ sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/localcerts/owncloud.pem -keyout /etc/ssl/localcerts/owncloud.key

pic11

Le certificat créé avec option « -days 365 », sera valide pour 1an. Si comme moi, vous ne souhaitez pas protéger votre clé privée par un mot de passe, ajouter l’option « – nodes » à la commande openssl.
Modifier ensuite les permissions du dossier /etc/ssl/localcerts, qui contient les deux clés owncloud.key et owncloud.pem, afin que personne d’autre que le proprétaire du dossier (ici Root), n’a accès à son contenu.

$ ls -l /etc/ssl/localcerts/
total 8
-rw-r--r-- 1 root root 1704 Mar 25 06:03 owncloud.key
-rw-r--r-- 1 root root 1440 Mar 25 06:03 owncloud.pem
$ sudo chmod 600 /etc/ssl/localcerts/owncloud*
$ ls -l /etc/ssl/localcerts/
total 8
-rw------- 1 root root 1704 Mar 25 06:03 owncloud.key
-rw------- 1 root root 1440 Mar 25 06:03 owncloud.pem

/!\ Les permissions pour accéder à ces clés tel que présenté ci-dessus, a pour but de limiter leurs accès à une tierce personne. Il ne faut surtout, mais SURTOUT pas partager votre clé privée, ni la perdre d’ailleur.

Activer le mode ssl,

$ sudo a2enmod ssl

Un message s’affichera avec la liste des dépendances activées, si le mode ssl est déjà activé.

Considering dependency setenvif for ssl:

Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Module socache_shmcb already enabled
Module ssl already enabled

Configuration de Apache2

Il n’y a rien à modifier au niveau des ports d’écoute, puisque Apache2 est configuré par défaut pour écouter sur les ports 80 et 443.

$ cat /etc/apache2/ports.conf 
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80

    Listen 443



    Listen 443

Sauvegarde des fichiers de configuration

N’oubliez pas de faire une sauvegarde de vos fichiers de configuration, quelqu’il soit (owncloud.conf, config.php, apache2.conf, etc.), avant de les modifier.

1. Fichier de configuration de owncloud

$ sudo cp /etc/apache2/sites-available/owncloud.conf /etc/apache2/sites-available/owncloud.bak

2. Fichier de configuration du serveur web

$ sudo cp /etc/apache2/apache2.conf /etc/apache2/sites-available/apache2.bak

3. Tableau de configuration PHP du serveur owncloud

$ sudo cp /var/www/html/owncloud/conf/config.php /var/www/html/owncloud/conf/config.bak

4. Fichier .htaccess

Dans la liste de fichiers de configuration, il faut absolument ne pas toucher au fichier .htaccess comme indiqué sur dans le tutoriel de Apache. Par contre, rien ne vous empêche d’en faire une copie de sauvegarde.
A titre d’information, dans le dossier contenant l’option « AllowOverride All », /var/www/html/owncloud/ par exemple (cf. « Sécuriser notre Hôte Virtuel » qu’on verra un peu plus tard dans ce chapitre), les règles données par .htaccess vont être prioritaires aux directives du serveur Apache.

    AllowOverride All

Ce qui n’empêche pas le serveur Apache d’y appliquer d’autres règles qui ne rentrent pas en conflit avec ceux du .htaccess, dans le même dossier.

Recharger la configuration d’Apache

Si vous modifier l’un des fichiers de configuration de votre serveur, n’oublier pas de redémarrer le serveur Apache.

$ sudo service apache2 restart

Configuration SSL

Vérifier dans un premier temps la version de chacun de vos serveurs.

Version de Apache:

$ apachectl -V
Server version: Apache/2.4.10 (Raspbian)

$ aptitude show apache2
Version: 2.4.10-10+deb8u4

Version de OpenSSL:

$ openssl version
OpenSSL 1.0.1k 8 Jan 2015

$ aptitude show openssl
Version: 1.0.1k-3+deb8u4

Version du PHP:

$ php --version
PHP 5.6.17-0+deb8u1 (cli) (built: Jan 24 2016 12:25:22)

$ aptitude show php5
Version: 5.6.17+dfsg-0+deb8u1

Générer ensuite une configuration SSL convenable, en fonction de la version de vos serveurs, à partir de ce lien.

pic12

Sécuriser notre Hôte Virtuel

Rediriger tous les traffics HTTP (port 80) vers HTTPS (port 443).
Pour ce faire, je vous suggère de supprimer tout le contenu du fichier /etc/apache2/sites-available/owncloud.conf, puis de le remplacer par celui ci-dessous, en l’adaptant à vos besoins.

Pour rappel, mon adresse IP publique est liée à deux URLs différents. Un en netlib.re, puis l’autre en nsupdate.info.

$ sudo vim /etc/apache2/sites-available/owncloud.conf
# Force port redirecting (HTTP to HTTPS)

    ServerName .netlib.re
    Redirect permanent / https://.netlib.re



    ServerName .nsupdate.info
    Redirect permanent / https://.nsupdate.info


# Web server configuration


    ServerName .netlib.re
    ServerAlias .nsupdate.info
    DocumentRoot /var/www/html/owncloud/
    # SSL configuration

    SSLEngine on
    SSLCertificateFile /etc/ssl/localcerts/owncloud.pem 
    SSLCertificateKeyFile /etc/ssl/localcerts/owncloud.key
    #SSLCACertificateFile /path/to/all_ca_certs
    # Restrict/deny/allow access to certain directories

    
        Options +FollowSymLinks
        AllowOverride All
        
            Dav off
        

    SetEnv HOME /var/www/html/owncloud
    SetEnv HTTP_HOME /var/www/html/owncloud
    

    
        # just in case if .htaccess gets disabled
        Require all denied
    
 

# modern configuration, tweak to your needs
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder     on
SSLCompression          off

# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling          on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache        shmcb:/var/run/ocsp(128000)

Quelques notes concernant cette configuration:

  • DocumentRoot définit la racine des documents pour chaque hôte virtuel
  • SSLEngine doit être activé, afin que le server web puisse utiliser le SSL
  • SSLCertificateFile et SSLCertificateKeyFile définit le chemin d’accès à nos certificats et clés
  • SSLCACertificateFile à acitiver, si vous avec un certificat signé par un CA

6. Sécurités et avertissements sur les configurations

L’ajout de la règle en HSTS dans l’hôte virtuel n’est pas une bonne idée. D’autant plus que celà ne va pas supprimer l’avertissement qui s’affiche dans la page d’administration de votre Owncloud.

HSTS-warning

Dans /etc/apache2/apache2.conf, ajouter

$ sudo vim /etc/apache2/apache2.conf
#
# Force all traffic to remain on HTTPS
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
#

      Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"


# 
# Force people coming to your site to use HTTPS
#
# 1. Enable the Rewrite capabilities
#
RewriteEngine On
#
# 2. Check to make sure the connection is not already HTTPS
#
RewriteCond %{HTTPS} !=on
#
# 3. Redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context
#
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Profitons-en par la même occasion pour régler aussi le problème de Mémoire cache.
$ sudo apt-get install php5-apcu

$ aptitude show php5-apcu
Version: 4.0.7-1

Sans passer par l’interface graphique, une méthode pour vérifier si le memcache est configuré, le résultat de la commande ci-dessous doit être égale à 1 si c’est activé. Sinon, on devrait avoir 0.

$ sudo cat /var/www/html/owncloud/config/config.php | grep -ci -m1 "'memcache.local'"
0

Dans le fichier /var/www/html/owncloud/config/config.php, ajouter la ligne ci-dessous, puis revérifier le memcache, qui devrait maintenant avoir pour valeur 1:

'memcache.local' => '\OC\Memcache\APCu',

pic13

Vérifier de nouveau que tous est maintenant rentré dans l’ordre dans la page d’administration de votre serveur Owncloud.

pic14

7. Différents Tests

Test d’accès en HTTP à votre page

Après avoir supprimé les caches et cookies de votre navigateur, entrer l’url de votre site en HTTP, puis vérifier le résultat.
Si tout s’est bien passé, vous devriez désormais avoir accès à votre page de manière sécurisée, en HTTPS.

pic15

Et voilà. Apprécier votre nouveau « Dropbox-like ». Mais, attendez, ce n’est pas tout!

Test de sécurité du serveur

Pour le fun, effectuer un test de sécurité de votre page sur Quallys SSL Lab.

pic16

Le résultat du test nous donne un T à cause d’un problème de certificat. Sans celà, le site mérite un A. Ce qui fait que notre site est digne de « confiance ».

Vous pouvez également vérifier quels ports sont ouverts avec Pentest-tools.

pic17

Amusez-vous bien!

 

Références et Ressources:

Netlibre, un nom de domaine gratuit, facilement administrable
Principes de base du système DNS
Hardening and Security Guidance
How to turn off server signature on Apache web server
Tutoriel: Virtualhosts avec Apache2
Atelier 3 partie 4 – Installer son serveur à la maison
Self-Signed_Certificate (Debian)
Certificates and Encodings
What is a Pem file and how does it differ from other OpenSSL Generated Key File Formats?
Enable SSL for Owncloud 8 on Ubuntu
Redirect Request to SSL
Common Apache Missconfigurations
How To Configure Apache 2
Configuring Memory Caching
Sécuriser son serveur Linux
Protéger son site Internet des cyberattaques

 

Sécuriser votre RPi

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web server à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 3. Sécuriser votre RPi

Pour sécuriser le RPi, il nous faut:

1. Créer un utilisateur autre que Pi
2. Créer une connection sécurisée entre votre ordinateur et le RPi
3. Désactiver l’authentification SSH par mot de passe ainsi que la connection en tant que Root
4. Créer des règles de parefeux
5. Installer Fail2ban

Comme toujours, lisez l’article jusqu’au bout avant d’effectuer des modifications sur votre(vos) appareil(s).

I. Création d’un nouvel utilisateur Pi

Vous l’avez surement remarqué que le système d’exploitation Raspbian, a deux utilisateurs par défaut: root et pi. Pour plus de sécurité, mieux vaut désactiver ces deux comptes, et d’en créer un qui aura les mêmes permissions que root en utilisant la commande « sudo ».

Création du nouvel utilisateur

Méthode 1:

Lancer une connection ssh avec l’utilisateur pi, le temps d’activer temporairement le compte root puisque ce dernier est inactif par défaut.

Le format pour se connecter en ssh à partir d’un terminal sous linux est de la forme « ssh pi@ ».

mon@ordi$ ssh pi@10.1.2.3

Puis taper la commande ci-dessous et entrer deux fois le mot de passe pour l’utilisateur root.

pi@raspberrypi:~$ sudo passwd
Enter new UNIX password: 
Retype new UNIX password:
pi@raspberrypi:~$ exit

Après avoir fermée la connection ssh, relancez-en une nouvelle en vous connectant cette fois-ci avec l’utilisateur root.

mon@ordi$ ssh root@10.1.2.3

La commande suivante permet de renommer l’utilisateur pi  (option -l) par le nom d’utilisateur de votre choix. Ici; j’ai décidé d’appeler mon utilisateur « USERNAME », puis créer un nouvel espace /home (option -d) et d’y placer le contenu de l’ancien /home (option -m).

root@raspberrypi:~# su -
root@raspberrypi:~# usermod -l USERNAME -d /home/USERNAME -m pi 
root@raspberrypi:~# groups USERNAME 
USERNAME : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio root@raspberrypi:~# sudo groupmod -n USERNAME pi

La commande groupmod permet de remplacer le nom du groupe initialement associé à USERNAME, qui est « pi », par USERNAME. Pour rappel, généralement sous linux, le nom d’utilisateur et le nom du groupe sont identique.

root@raspberrypi:~# groups USERNAME
USERNAME : USERNAME adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio

La commande utilisée avec « usermod », peut se décomposer en deux étapes:

1. Renommer pi par USERNAME

root@raspberrypi:~# usermod -l USERNAME pi

2. Supprimer le /home/pi après avoir déplacé son contenu dans /home/USERNAME (option -d -m)

pi@raspberrypi:~$ usermod -d /home/USERNAME -m pi

Ci-dessous les quelques messages d’erreur que j’ai rencontré, mais je ne vais pas trop tarder dessus.

root@raspberrypi:~# usermod -l USERNAME -d /home/USERNAME -m pi
bash: usermod: command not found

Lancer la commande « su – » pour se placer dans le même environnement que root.

Ensuite, tuer le process utilisé par l’utilisateur PI lors de sa connection en mode GUI, sinon vous risquez d’avoir une erreur du type:

root@raspberrypi:~# su -
root@raspberrypi:~# usermod -l USERNAME -d /home/USERNAME -m pi
usermod: user pi is currently used by process 1234
root@raspberrypi:~# ps -lp 1234
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S  1000  4146  4141  0  80   0 - 12556 poll_s ?        00:00:00 x-session-manag
root@raspberrypi:~# kill 4146


Méthode 2:

Cette deuxième méthode demande un peu plus d’étapes à suivre, pour arriver aux mêmes fins que précédement. Cependant, il n’est pas nécessaire d’activer le compte root pour l’ajout et la suppression d’utilisateurs. De ce fait, vous pouvez vous connecter directement en ssh avec l’utilisateur pi.

mon@ordi$ ssh pi@10.1.2.3

1. Création d’un nouvel utilisateur

$ sudo adduser USERNAME
$ sudo adduser USERNAME sudo

Vérifier que USERNAME fait bien du groupe « sudo ».

$ groups USERNAME
USERNAME : USERNAME adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio

Fermer la session pour l’ouvrir de nouveau, en vous connectant cette fois-ci avec le nouvel utilisateur .

mon@ordi$ ssh USERNAME@10.1.2.3

Pour information, le groupe SUDO n’a pas de “pouvoirs” (permissions) particuliers. C’est un groupe comme un autre. Par contre, il est spécifié dans /etc/sudoers, que tous les membres de ce groupe peuvent avoir les mêmes permissions que root lorsque la commande sudo est évoquée.
Pour vérifier cette information, taper visudo dans une console.

Nano étant le mode d’édition utilisé par défaut, si vous préférez un éditeur, lancer la commande update-alternatives pour faire votre choix.

sudo update-alternatives --config editor

Mon choix se limite à Vim, et donc je passe par une commande plus directe.

sudo update-alternatives --set editor /usr/bin/vim.tiny

Lancer maintenant visudo:

sudo visudo

Je tiens à préciser qu’il est fortement déconseillé de modifier directement le contenu de /etc/sudoers, sans passer par la commande visudo.

La ligne qui nous intéresse:

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

Je vous renvoie sur cette page pour plus d’information concernant cette ligne.
2. Vérification

Vérifier que les utilisateurs USERNAME et pi font parti des mêmes groupes avant de supprimer définitivement ce deuxième.

$ groups pi
$ groups USERNAME

S’il manque des groupes au nouvel utilisateur, n’hésitez pas à en rajouter avec la commande:

$ sudo usermod -a -G  USERNAME

3. Suppression de l’utilisateur Pi

N’oubliez pas que parmis les choix possible de ce que vous pouvez faire avec cet utilisateur pi. Le mien est de le supprimer définitivement ainsi que de le dossier home associé.

sudo deluser --remove-home USERNAME

Pour supprimer tous les fichiers ayant appartenu à cet utilisateur (je vous déconseille de le faire à moins que vous sachiez exactement ce que vous faites),

sudo deluser --remove-all-files USERNAME

4. Redémarrer le Raspi

Et voilà. Il nous a fallu quatre étapes, pour faire plus ou moins la même chose qu’avec la méthode 1.

Avant de clôturer ce chapitre, je tiens à vous préciser qu’en utilisant un système debian, il est fortement conseillé d’utiliser les commandes adduser/deluser au lieu des commandes généralement trouvées sur les autres distributions linux, que je ne vais pas citer ici afin de réduire les risques de confusions.

Désactivation/activation du compte Root

Maintenant qu’avec le nouvel utilisateur, on peut utiliser sudo, vous pouvez désactiver le compte Root si ce n’est déjà fait.

Supprimer le mot de passe du compte root (option -d, –delete), puis le vérouiller ensuite avec l’option -l (–lock).

$ sudo passwd -dl root
passwd: password expiry information changed.

Verification:

$ su -
Password:
su: Authentication failure

Pour lancer un shell en mode root, utiliser plutôt l’option -s  avec sudo (similaire à “sudo su”) au lieu de l’option -i (similaire à sudo su -). Le premier garde les informations actuel du shell, par contre la deuxième option vous envoie dans l’environement du root. Cette deuxième option est à déconseiller puisque vous allez perdre les bénéfices de sécurité offerts par sudo.

sudo -s

Si, pour une raison quelconque, vous avez besoin d’activer l’utilisateur root, l’option -u (–unlock) fera l’affaire.

$ sudo passwd -u root

Pour donner un mot de passe à l’utilisateur root,

$ sudo passwd root

II. Connection sécurisée

Je vous recommande vivement de lire l’article SSH Tutorial for Linux. Pour plus d’information sur le SSH et sur ce qu’on va faire par la suite, je vous renvoie sur le site officiel de Debian, ainsi que de lire les bonnes pratiques pour l’utilisation de SSH.

Pour créer une connection de type sécurisée, entre votre machine et le RPi, nous allons utiliser le système d’authentification SSH par clé plutôt que par mot de passe. Pour ce faire, générer une paire de clé (une privée, et une autre publique) à partir du poste qui va se connecter en ssh au RPi. Puis, envoyer une copie de la clé publique sur notre serveur RPi. Garder ensuite précieusement et loin de tout regards indiscrets, votre clé privée.

La méthode d’authentification par paire de clés a pour avantage de limiter les attaques par force brute de votre mot de passe, pour l’authentification au RPi.

Côté client

Sur votre ordinateur, vérifier que le paquet openssh-client est bien installé. Si ce n’est pas le cas, il faut le faire.

mon@ordi$ dpkg -l | grep ssh
mon@ordi$ sudo apt-get install openssh-client

Générer une paire de clés avec l’utilitaire SSH keygen.

mon@ordi$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/matakasi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

N’ommetez pas la passphrase, qui est une forme de sécurité supplémentaire. Si quelqu’un réussit à s’approprier vos clés, il lui faut toujours entrer cette passphrase pour pouvoir se connecter à votre Serveur.

Pour bien choisir son mot de passe, je vous conseille de lire cet article.

Les clés générées devraient se trouver dans le répertoire ~/.ssh:
– clé privée: id_rsa (vous devez ne jamais fournir cette clé à personne)
– clé publique: id_rsa.pub.

Copier la clé publique sur l’hôte distant (RPi) avec la commande ssh-copy-id.

mon@ordi$ ssh-copy-id -i ~/.ssh/id_rsa.pub USERNAME@10.1.2.3

Le fichier .ssh/authorized_keys sera créé automatiquement suite à cette commande. Pour voir son contenu,

mon@ordi$ ssh USERNAME@10.1.2.3
USERNAME@raspberrypi$ cat ~/.ssh/authorized_keys

Le fichier /home/.ssh/authorized_keys est le fichier contenant les clés publiques permettant à un utilisateur de s’authentifier à l’aide de sa clé privée.

Côté Serveur

Vérifier que openssh-server est déjà installé ou non.

USERNAME@raspberrypi$ aptitude search ssh-server

Si ce n’est pas le cas,

USERNAME@raspberrypi$ sudo apt-get install openssh-server

Modifier ensuite les permissions du dossier /home/.ssh si vous n’avez pas les mêmes informations que ci-dessous.

USERNAME@raspberrypi$ ls -al | grep .ssh
drwx------ 2 USERNAME USERNAME 4096 Feb 23 00:14 .ssh

USERNAME@raspberrypi$ ls -al .ssh/authorized_keys
-rw------- 1 USERNAME USERNAME 397 Feb 23 00:14 .ssh/authorized_keys

Vous ne devriez pas avoir à modifier quoi que ce soit concernant les permissions, mais si vous n’avez pas les mêmes permissions que moi, vous pouvez toujours mettre à jour vos permissions avec la commande chmod.

sudo chmod 700 .ssh
sudo chmod 600 .ssh/authorized_keys

III. Désactivation du mot de passe pour l’autentification SSH et du compte Root

sudo vim /etc/ssh/sshd_config

Rechercher les informations PasswordAuthentication puis PermitRootLogin, et de remplacer leurs valeurs par « no ».

#Désactiver l’utilisation du mot de passe pour l’authentification
PasswordAuthentication no

#Désactiver l’utilisation du compte root
PermitRootLogin no

Relancer ensuite le serveur SSH.

sudo service ssh restart

IV. Creating a Firewall

Maintenant, il nous faut ajuster les paramètres du parefeux pour limiter/bloquer certain traffics vers le RPi.

Vérifier quelles sont les règles actuelles de votre parefeux sur le RPi

sudo iptables -L

Par défaut, vous ne devriez pas avoir de règles du tout. Tout traffic devrait être autorisé,

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

 

Créer un fichier pour y placer les règles du parefeux

sudo vim /etc/iptables.firewall.rules

Copier les règles ci-dessous dans /etc/iptables.firewall.rules.

*filter

# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# Allow RDP connections from anywhere (uncomment if rdp connection is needed)
# -A INPUT -p tcp --dport 3389 -j ACCEPT

# Allow SSH connections
# The -dport number should be the same port number you set in sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Allow ping
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

Vous pouvez supprimer le commentaire au niveau du RDP (3389), si vous avez besoin d’accéder à l’interface graphique du RPi. Les règles appliquées ci-dessus autorise les traffics en HTTP (80), HTTPS (443), SSH (22), ainsi que les ping.

 

Activer les nouvelles règles du parefeux

sudo iptables-restore < /etc/iptables.firewall.rules

Vérifier de nouveau que les nouvelles règles sont actifs.

sudo iptables -L

Vous devriez maintenant avoir quelque chose de similaire.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             loopback/8           reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3389
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     icmp --  anywhere             anywhere             icmp echo-request
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere 

 

Activation automatique des règles du parefeux

Vous devriez vous assurer que ces règles sont toujours activées à chaque fois que vous redémarrer le RPi. Pour ce faire, nous allons créer un script pour automatiser la tâche.

sudo vim /etc/network/if-pre-up.d/firewall

Copier les lignes ci-dessous:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules

Puis modifier les permissions de ce fichier.

sudo chmod +x /etc/network/if-pre-up.d/firewall

V. Installation et Configuration de Fail2Ban

Fail2Ban est un très bon outil pour détecter les tentatives de connection sur vos serveurs. Une fois une intrusion détectée, après un nombre défini de tentative de connection, Fail2Ban va créer automatiquement une règle dans iptable pour bannir l’adresse IP de l’intrus (blacklister).

Fail2Ban se trouve dans les dépots officiels de Debian. Pour l’installer,

sudo apt-get install fail2ban

Une fois l’installation terminée, il n’y a rien de plus à faire, à part vérifier dans les logs dans /var/log/fail2ban.log les informations enregistrées par l’application.
Pour information, Fail2Ban surveille uniquement les traffics pour le protocol SSH par défaut. Mais vous pouvez le configurer afin de superviser les tentatives de connections à votre serveur pour d’autres protocols tel HTTP, RDP, SMTP, etc.

 

Notes:

How do I change pi’s username?
How can I add a new user as sudoer using the command line?
How to properly configure sudoers file, on debian wheezy?
How to add self to sudoers list?
Allowing other users to run sudo
Add a User to a Group (or Second Group) on Linux
How to change owner and group of a file in Linux
Raspberry Pi Home Server: Part 4, Web Administration
A Complete Guide to Usage of ‘usermod’ command – 15 Practical Examples with Screenshots
What do the “ALL”s in the line “ %admin ALL=(ALL) ALL ” in Ubuntu’s /etc/sudoers file stand for?
Effect of (ALL:ALL) in sudoers?
Sudo and Sudoers Configuration
Securing Your Server
Users and Groups Administration in Linux

Installation de OwnCloud sur un Raspberry Pi

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web server à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 2. Installation de OwnCloud sur un Raspberry Pi

I. Installation de OwnCloud

Pour l’installation de OwnCloud, il nous faut trois choses:

  • Un système de gestion de base de données (MariDB)
  • Un serveur PHP
  • Un serveur Web (Apache HTTP Server, ou tout simplement Apache).

Avant d’aller plus loin, je tiens à préciser que j’ai préféré MariaDB à MySQL, de la même manière que je préfère libreOffice à OpenOffice. Ensuite, mon choix d’installer un serveur Apache à la place d’un serveur Nginx, est plutôt par commodité.

Ce tutoriel se base sur un système Raspbian 8.0, avec pour but d’installer la version 8.x de Owncloud.
Deux méthodes au choix, mais je vais en favoriser une:

  • Installation à partir des dépots officielles de Debian, que je vais qualifier d’installation “automatique”
  • Installation de type manuelle, puisqu’il nous faut installer un par un, tout ce dont on aura besoin pour une utilisation fonctionnelle de notre OwnCloud.

La méthode manuelle est celle qui est vivement conseillée au vue de la correction des problèmes de sécurité, mais aussi pour une facilitée de migration du dossier OwnCloud vers un autre support, sans casser le système.

Je tiens à préciser qu’il ne faut pas appliquer ces deux méthodes à la fois. Soit vous faites une installation manuelle, soit une en automatique sinon, bonjour les dégats. Ci-dessous un example où je ne pouvais pas du tout accéder à mon serveur tant que j’ai pas résolu ce problème.

downgrading

Downgrading is not supported and is likely to cause unpredictable issues (from 8.2.1 to 8.1.5.2)
Traduction: Le downgrade n’est pas pris en charge et est susceptible de provoquer des problèmes imprévisibles (de 8.2.1 à 8.1.5.2)

Ceci est certainement du au fait que la version du dépôt dans Debian est moins récent.

Méthode automatique, installation à partir des dépots

Vérifions les informations concernant les paquets ownClouds disponibles

# apt-cache search owncloud
# apt-cache show owncloud

133804

Configurer un dépôt Debian pour ownCloud

1. Ajouter le dépôt ownCloud dans /etc/apt/sources.d/

Parmi toutes les méthodes, je préconise l’utilisation de la console, sans avoir à utiliser un éditeur de texte.

$ sudo su
# echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_8.0/ /' >> /etc/apt/sources.list.d/owncloud.list

Une autre option, sans avoir à se connecter comme super utilisateur:

$ echo “deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_8.0/ /” |sudo tee -a /etc/apt/sources.list.d/owncloud.list

2. Installation de la clef du dépôt officiel de Owncloud

$ cd /tmp
$ wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_8.0/Release.key
$ sudo apt-key add - < Release.key

3. Installation de ownCloud

$ sudo apt-get update
$ sudo apt-get install owncloud

Le paquet Owncloud sera installé avec toutes ces dépendances (apache2, mysql, php-*, etc…).

Méthode manuelle, installation paquet par paquet

Pour plus de détails concernant l’installation des differents serveurs, je vous réfère au manuel de l’administrateur Owncloud.

Etape 1. Installation du serveur Web Apache

$ sudo apt-get install apache2

Dans un navigateur, taper l’adresse IP (ou http://localhost) de l’appareil sur lequel vous faites l’installation. Si vous voyez une page sur laquelle est affichée “It Works !”, alors le serveur Apache fonctionne correctement.

141525

Etape 2. Installation de MySQL/MariaDB

$ sudo apt-get install mariadb-server

Il vous sera demandé d’entrer un mot de passe pour l’utilisateur root de MariaDB, puis de le reconfirmer. Notez bien votre mot de passe puisqu’on n’en aura besoin pour plus tard.

142049

# service mysql status

Si le service n’apparaît pas actif, il faut le démarrer avec la commande,

# service mysql start

Etape 3. Installation de PHP5

Les paquets suivants sont les paquets principaux pour un bon fonctionnement de ownCloud. En rouge, quelques paquets qui peuvent être très utiles par la suite.

$ sudo apt-get install php5 php5-gd php5-mysql curl libcurl3-dev php5-curl php5-intl php5-mcrypt php5-imagick

Pour vérifier que le serveur PHP fonctionne correctement, il faut créer un fichier phpinfo.php dans le dossier /var/www/html, avec les informations suivantes:


Ne supprimer pas ce fichier, même si vous pensez que vous n’en avez plus besoin. Il nous sera toujours utile par la suite.

Dans un navigateur internet, entrer l’adresse localhost/phpinfo.php. Vous devriez avoir les informations concernant le serveur PHP.

php-version

Etape 4. Installation de Owncloud

Ici, on ne va pas parler d’installation à proprement parler, puisqu’il nous faut copier la version en tarball de Owncloud à partir du site officiel, que l’on va placer dans notre dossier /var/www/html.

Je ne vais pas surcharger ce blog d’étapes supplémentaires, pour une explication sur le comment et pourquoi placer le tarball dans un dossier autre que celui par défaut. Cependant, je tiens à préciser que c’est un excellent choix de le faire, en plus de modifier le nom du dossier owncloud par un autre, pour donner un peu plus de mal aux pirates qui essayent de subtiliser des informations de vos serveurs.

Récupérons la version stable actuelle disponible de owncloud (version 8.2.2), que l’on va placer dans le dossier /var/www/html.

$ sudo wget https://download.owncloud.org/community/owncloud-8.2.2.tar.bz2

$ sudo tar -xvf owncloud-8.2.2.tar.bz2
$ ls -l
total 28256
 drwxr-xr-x 13 nobody nogroup 4096 Dec 21 12:50 owncloud
 -rw-r--r-- 1 root root 28922075 Dec 21 13:00 owncloud-8.2.2.tar.bz2

Modifier les permissions pour le dossier owncloud, en changeant le propriétaire par l’utilisateur HTTP (www-data).

pi@raspberrypi:~ $ sudo chown -R www-data:www-data /var/www/html/owncloud/
pi@raspberrypi:~ $ ls -l /var/www/html
total 28260
 drwxr-xr-x 2 root root 4096 Dec 27 10:36 html
 drwxr-xr-x 15 www-data www-data 4096 Dec 27 10:54 owncloud
 -rw-r--r-- 1 root root 28922075 Dec 21 13:00 owncloud-8.2.2.tar.bz2
pi@raspberrypi:~ $

Maintenant qu’on a tout ce qu’il nous faut pour l’utilisation de Owncloud, il nous reste encore quelques paramètres à configurer.

II. Configuration des différents serveurs de OwnCloud

Configuration du serveur Web Apache

Nous allons nous intéresser particulièrement à deux fichiers de configuration du serveur Apache:
/etc/apache2/apache2.conf
/etc/apache2/sites-available/owncloud.conf
Le deuxième fichier n’existant pas, il va falloir le créer, et doit avoir les informations suivantes:

$ sudo vim /etc/apache2/sites-available/owncloud.conf
/var/www/html/owncloud/>
  Options +FollowSymlinks
  AllowOverride All

 
  Dav off
 

 SetEnv HOME /var/www/html/owncloud
 SetEnv HTTP_HOME /var/www/html/owncloud

Si vous n’avez pas installé owncloud dans /var/www/html/owncloud/, ou que vous avez modifié le nom du dossier, je vous propose de suivre les instructions proposées dans le manuel officiel pour les différentes configurations à prendre en compte.

Activer ensuite votre page Owncloud. Pour ce faire, on vous proposera généralement de créer directement un lien symbolique avec « ln -s ». Cependant, Debian a sa propre outil pour le faire.

$ sudo a2ensite owncloud.conf

De même, pour désactiver le site (vous n’en avez pas besoin dans l’immédiat)

$ sudo a2dissite owncloud.

Lors de votre accès à Owncloud à partir de votre navigateur internet, et que vous rencontrez un message du type: “.htaccess does not work”, c’est que .htaccess n’est pas activé.

095106

Je tiens à préciser qu’il est recommandé d’activer .htaccess pour bénéficier d’une meilleure sécurité pour votre serveur. Par défaut, .htaccess est désactivée sur les serveurs Apaches.
Pour le faire, remplacer ‘AllowOverride None’ par ‘AllowOverride All’ dans du fichier /etc/apache2/apache2.conf.

N’oubliez surtout pas d’effectuer des sauvegardes de vos fichiers de configuration avant toutes modifications.

$ sudo cp /etc/apache2/sites-available/owncloud.conf /etc/apache2/sites-available/owncloud.conf.bak

$ sudo cp -p /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak
$ vim /etc/apache2/apache2.conf
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted

Pour que ownCloud fonctionne correctement, il faut activer le module mod_rewrite.

$ sudo a2enmod rewrite

Il est aussi recommandé d’activer les différents modules ci-dessous.

$ sudo a2enmod headers
$ sudo a2enmod env
$ sudo a2enmod dir
$ sudo a2enmod mime

Les trois derniers modules devraient être déjà activés par défaut.

Configuration de php.ini

Ce qu’il faut savoir, vu qu’on veut utiliser ce serveur avec pour objectif d’échanger des fichiers, c’est qu’il faut modifier manuellement soit dans /var/www/html/owncloud/.htaccess du fichier fourni avec ownCloud, soit le fichier /etc/php5/apach2/php.ini, la taille maximale des fichiers à faire passer sur le server.
Pour savoir lequel des ses deux fichiers il faut modifier, ouvrez dans un navigateur localhost/phpinfo.php, puis retrouver la ligne “Loaded Configuration File”.

phpini

A partir de cette page, ou dans le fichier /etc/php5/apache2/php.ini, vous devriez retrouver les informations ci-dessous, que vous pouvez modifier à votre souhait. Les valeurs par défaut étant,

upload_max_filesize = 2M #Maximum allowed size for uploaded files
post_max_size = 8M #Must be greater than or equal to upload_max_filesize

N’oubliez pas d’effectuer une copie de ce fichier avant modification.

$ sudo cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.bak

$ sudo vim /etc/php5/apache2/php.ini

Vous pouvez augmenter cette limite, avec pour example une valeur de 2GB comme taille maximale de fichier à échanger, comme ci-dessous:

upload_max_filesize = 2G
post_max_size = 2G

Une fois les modifications effectuées, sauvegarder le fichier php.ini, puis vérifier de nouveaux que vous avez les bonnes informations dans localhost/phpinfo.ini après redémarrage du serveur Apache.

Si vous souhaitez savoir comment faire la même chose en modifiant le fichier .htaccess, je vous renvoie à ce lien.

Redémarrer apache2

$ sudo service apache2 restart

Création de la base de donnée MySQL/MariaDB

Commençons par modifier les options de sécurité de MySQL/MariaDB.

$ sudo mysql_secure_installation
Enter current pasword for root, taper le mot de passe root de MariaDB, qui devrait être le même que celui lors de l'installation du service
Change root password, taper “n” pour NON
Remove anonymous users, taper “y” pour OUI
Disallow root login remotely, taper “y” pour OUI
Remove test database and access to it, taper “y” pour OUI
Reload privilege tables no, taper “y” pour OUI

Entrez maintenant dans MySQL/MariaDB pour gérer la base de donnée.

$ sudo mysql -u root -p
Enter password: (taper le mot de passe root de MariaDB)

MariaDB [(none)]> CREATE USER 'ownclouduser'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS owncloud;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON owncloud.* TO 'ownclouduser'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> quit

Les valeurs en couleurs peuvent être personnalisées.

Voici quelques commandes utiles pour MySQL/MariaDB:

Show Database Users: SELECT User,Host FROM mysql.user;
Show available Databases: SHOW DATABASES;
Show ownCloud Tables in Database: USE owncloud; SHOW TABLES;
Quit Database: quit

Petite précision, il n’y a rien à modifier dans ces commandes. Entrez les directement telle qu’elles.

III. Accès à OwnCloud

On est presqu’au bout du chemin. Il ne reste plus qu’à entrer les informations ci-dessous, lorsque vous rentrez dans la page localhost/owncloud (ou encore adresse_IP/owncloud).

Create an admin account
* Username: choisissez de préférence un nom, autre que « admin, administrateur, etc. »
* Password: choissisez un mot de passe complexe

Storage & database
* Data folder: ne pas modifier, sauf si owncloud est installé ailleurs
* Configure database: MySQL/MariaDB est la seule option disponible
* Database user: ownclouduser
* Database password: le mot de passe de ownclouduser
* Database name: owncloud
* Hostname: localhost

095652

Et pour finir, activons le SSL/TLS pour sécuriser les traffics entre notre serveur et les différents ordinateurs distants.

Pour ce faire, il suffit d’activer les deux modes ci-dessous:

$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
$ sudo service apache2 reload

Et voilà, nous pouvons avoir une connection sécurisée vers le serveur Owncloud.

110650   110738
Référence:
ownCloud 8.2 Server Administration Manual
Manual Installation on Linux
Installing ownCloud From the Command Line
Database Configuration

Prise en main du RPi et installation de Mate sur un Raspbian

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web server à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud

Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian

I. Installation de Raspbian sur un RPi(2)

Avant de se lancer dans l’installation, il faut absolument être sur et certain que la carte SSD est reconnue, et que vous avez pu l’identifiée dans votre liste de partition.

Première chose à faire serait de lancer la commande “df” quand la carte SD n’est pas insérée, puis de refaire la même manipulation après l’avoir inséré et de comparer les résultats.

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 14G 4.0G 78% /
udev 10M 0 10M 0% /dev
tmpfs 766M 9.3M 756M 2% /run
tmpfs 1.9G 92K 1.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda5 433G 117G 294G 29% /home
tmpfs 383M 4.0K 383M 1% /run/user/118
tmpfs 383M 20K 383M 1% /run/user/1000
/dev/sdb1 60M 20M 41M 34% /media/matakasi/boot
 /dev/sdb2 7.2G 2.5G 4.5G 36% /media/matakasi/c7f58a52-6b71-4cea-9338-65f3b8af27bf

Ici, les deux dernières lignes se sont ajoutées. De ce fait, ma carte se trouve dans dans la partition /dev/sdb.

On peut avoir les mêmes résultats avec la commande fdisk, à la différence qu’il faut être un super utilisateur pour pouvoir la lancer la commande.

$ sudo fdisk -l

Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 24575 20480 10M Linux filesystem
/dev/sda3 24576 39282687 39258112 18.7G Linux filesystem
/dev/sda4 39282688 55492607 16209920 7.7G Linux swap
/dev/sda5 55492608 976771071 921278464 439.3G Linux filesystem

Device Boot Start End Sectors Size Id Type
/dev/sdb1 8192 131071 122880 60M c W95 FAT32 (LBA)
 /dev/sdb2 131072 15523839 15392768 7.3G 83 Linux

Ceux qui ont acheté leurs raspberry avec la carte SD de 8Go, devraient avoir NOOB préinstallé dessus. Si c’est le cas, vous devriez avoir comme point de montage, pareil à la photo ci-dessous.

https://linuxintosh.files.wordpress.com/2015/07/003.jpg?w=545

Une fois que vous avez identifié la carte SD, démontez ensuite toutes les partitions concernées avec la commande umount. Ici, j’ai deux partition dans /dev/sdb (/dev/sdb1 et /dev/sdb2).

$ sudo umount /dev/sdb1
$ sudo umount /dev/sdb2

Vous pouvez toujours vérifier que tous les points de montages de la carte SD ont bien été démontés. Si vous avec déjà NOOB préinstallé, il vous faut donc démonter de /dev/sdb1 à /dev/sdb6.

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 14G 4.0G 78% /
udev 10M 0 10M 0% /dev
tmpfs 766M 9.3M 756M 2% /run
tmpfs 1.9G 92K 1.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda5 433G 117G 294G 29% /home
tmpfs 383M 4.0K 383M 1% /run/user/118
tmpfs 383M 20K 383M 1% /run/user/1000
$

Placez vous ensuite dans le répertoire contenant l’image raspbian. Ici, j’ai téléchargé la version Lite.

$ls
2015-11-21-raspbian-jessie-lite.img

Maintenant, copier l’image du raspbian téléchargée, vers la carte SD. Pour rappel, ma carte SD se trouve sur la partition /dev/sdb. Il faut que vous adaptez la commande ci-dessous par rapport à l’emplacement de votre carte, qui peut ne pas se trouver forcement dans /dev/sdb.

La commande par défaut pour copier une image étant dd, cependant je préfère la commande dcfldd qui indique l’avancement de la copie contrairement à dd.

$ sudo apt install dcfldd
$ sudo dcfldd if=2015-11-21-raspbian-jessie-lite.img of=/dev/sdb bs=1M
1280 blocks (1280Mb) written.
1326+0 records in
1326+0 records out
$sync

II. Configuration du Raspbian

Une fois l’installation terminée, vous pouvez insérer la carte SD dans le lecteur du Raspberry Pi, puis brancher ce dernier à un moniteur (ou écran télé avec prise HDMI). Une fois le Raspberry pi lancé, l’identifiant par défaut pour s’authentifier est pi, avec pour mot de passe raspberry.

raspberrypi login: pi
password: raspberry

Ne paniquez pas s’il n’y a pas d’interface graphique, puisqu’on va en installer un, un peu plus tard.

Il vient ensuite la partie de configuration du réseau. Si vous taper « ip add show », vous devriez avoir une adresse IP de type APIPA, c’est à dire, une adresse IP qui commence par 169.254.X.X. C’est l’adresse IP assignée automatiquement à tout ordinateur qui n’a pas pu récupérer une adresse du serveur DHCP.

De ce fait, il faudrait assigner une adresse ip statique, de préférence pour les serveurs, à notre Raspberry pi. Je propose de garder les configuration dans /etc/network/interfaces, telle qu’elles.

$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

# iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
$

Notez bien que j’ai commenté la ligne « iface eth0 inet manual »!!

Ensuite, de créer un nouveau fichier /etc/network/interfaces.d/eth0, avec les informations qu’on souhaite lui apporter. Je vais en profiter de ce chapitre pour vous faire découvrir une autre façon de créer un fichier et d’y ajouter des informations dedans.

Si vous avez des doutes sur le comment configurer une interface statique, je vous renvoie à la page officielle de debian et de ubuntu.

$ sudo cat >  /etc/network/interfaces.d/eth0 << eof
> auto eth0
>
> iface eth0 inet static
>     address 172.16.1.16
>      netmask 255.255.255.0
>      gateway 172.16.1.1
> eof

Redémarrer ensuite l’interface eth0.

# ifdown eth0

# ifup eth0

Comme vous pouvez le constater, je n’ai pas rajouté d’adresse DNS dans ce fichier. Pour ce faire, il y a plusieurs méthode, mais je préfère ne pas utiliser l’outil resolvconf, qui peut être installé à partir du dépôt de Debian. Par contre, je vais mettre à jour le fichier /etc/resolv.conf en y ajouter le ou les adresses des serveurs DNS. Par contre, cette option ne permet pas de garder les informations du fichier après redémarrage du Raspberry Pi à cause d’une mise à jour dymanique attendu de l’application resolvconf, qui n’arrivera jamais vu qu’on ne l’a pas installé. Il faut donc bloquer cette mise-à-jour en utilisant la commande chattr.

L’option +i de cette commande désactive la mise-à-jour, par contre l’option -i fait l’inverse.

# vi /etc/resolv.conf
# Generated by resolvconf
nameserver 8.8.8.8
nameserver 8.8.4.4

# chattr +i /etc/resolv.conf 

Suite à l’application de cette commande, le fichier se trouve en mode lecture uniquement.

# vi /etc/resolv.conf
# Generated by resolvconf
nameserver 8.8.8.8
nameserver 8.8.4.4
"/etc/resolv.conf" [readonly] 3 lines, 64 characters

Je vous propose ensuite d’effectuer les mises à jour de votre système et d’installer VIM.

$ sudo apt update
$ sudo apt upgrade

$ sudo apt install vim

Accéder à l’interface de configuration votre raspberry pour effectuer les manipulations suivantes:

$ sudo raspi-config
  1. Utiliser tout l’espace de la carte SD (la commande dd ne monte que la taille de l’image raspbian). Par défaut, l’espace disponible et utilisée sur votre carte est de même taille que l’image de votre raspbian. Ici, sur une carte de 8Go, l’espace disponible n’est que de 1,3Go
    pi@raspberrypi:~ $ df -h
    Filesystem Size Used Avail Use% Mounted on
     /dev/root 1.3G 1.1G 160M 87% /
     devtmpfs 459M 0 459M 0% /dev
     tmpfs 463M 0 463M 0% /dev/shm
     tmpfs 463M 12M 451M 3% /run
     tmpfs 5.0M 4.0K 5.0M 1% /run/lock
     tmpfs 463M 0 463M 0% /sys/fs/cgroup
     /dev/mmcblk0p1 60M 20M 41M 34% /boot

    Sélectionner “Expand Filesystem”, puis la taille du disque sera mise a jour après redémarrage

  2. Modifier le mot de passe de l’utilisateur pi, qui est l’utilisateur par defaut
  3. Activer le SSH sur le raspberry pi, si ce n’est pas déjà fait. Il faut aller dans “Advanced Options>SSH>Enable”
  4. Optionnellement, vous pouvez installer le paquet XRDP, pour l’accès en RDP vers le raspberry.
    $ sudo apt install xrdp
  5. Redémarrer le système:
    $ sudo reboot

III. Installation de Mate sure un Raspbian

L’installation d’une interface graphique n’est pas une priorité pour moi, vu que je vais créer un serveur owncloud. Mais pour curiosite, je vais le faire quand même avec l’aide de cet article.

Récupérer l’adresse ip de votre RPi avec la commande

$ ip add show

Puis accéder en SSH ou avec Remmina installé à partir d’un ordinateur distant, vers le RPi. Si vous n’y avez pas accès, pinger le RPi sinon, vérifier que votre ordinatuer et le RPi sont sur le même réseau.

ordinateur$ ssh pi@172.16.1.16

Une fois connectée à votre RPi, effectuer une petite vérification avant d’installer quoi que ce soit:

pi@raspberrypi:~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.2G 1.1G 5.9G 15% /
devtmpfs 459M 0 459M 0% /dev
tmpfs 463M 0 463M 0% /dev/shm
tmpfs 463M 6.2M 457M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 463M 0 463M 0% /sys/fs/cgroup
/dev/mmcblk0p1 60M 20M 41M 34% /boot

Ici, j’ai bien les 8Go d’espace de ma carte SD. Si vous vous lancer dans l’installation de Mate ou d’un autre programme qui nécessite beaucoup d’espace, alors que vous n’en avez pas assez, vous risquez d’avoir quelques soucis.

Maintenant qu’on est sur d’avoir assez d’espace, on peut commencer l’installation de Mate.

pi@raspberrypi:~ $ echo "deb http://archive.raspbian.org/mate jessie main" |sudo tee -a /etc/apt/sources.list.d/mate.list

pi@raspberrypi:~ $ cat /etc/apt/sources.list.d/mate.list
deb http://archive.raspbian.org/mate jessie main

pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt upgrade
pi@raspberrypi:~ $ sudo apt install mate-core mate-desktop-environment

pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt lightdm

Une fois notre DE (environement de bureau) installé, je vais changer la configuration du RPi pour l’obliger à se lancer en mode console à chaque démarrage. Pour se faire, lancer encore une fois la commande:

$ sudo raspi-config

Dans boot Options, sélectionner Console Autologin. N’ayez crainte, le RPi restera toujours joignable en RDP sur lequel on pourra avoir l’environement de bureau récemment installé.

Si vous êtes satisfait de votre configuration sur le RPi, je vous recommande vivement d’effectuer une copie de votre image, dans le but de le cloner sur un autre appareil, ou juste commeune image de sauvegarde à réutiliser plus tard.

Raspian en version Lite est assez dépourvu de plusieurs applications. Ce n’est pas très mauvais en soit, puisqu’il ne vous reste plus qu’à installer ce qui vous intéresse. Entre autre, je vous conseille d’installer vim et iceweasel.

IV. Sauvegarde/Clone de la configuration

Comme précédement, dans un premier temps, repérer la partition où est montée la carte SD, puis démontez toutes les partitions dessus.

$ sudo umount /dev/sdb1
$ sudo umount /dev/sdb2

Placer vous dans un repértoire de votre ordinateur, dans lequel vous souhaitez récupérer l’image du disque. Ici, j’ai créer un dossier Backup,

$ cd ~/Backup

Puis lancer la commande:

$ sudo dd if=/dev/sdb of=sd.img bs=4M

ou encore

$ sudo dcfldd if=/dev/sdb of=sd.img bs=4M

Faites attention aux options IF (Input File), qui est la source, et OF (Output File), qui est la destination. La valeur de dd n’a pas de grande importance, que ce soit 512k, 1M ou 4M. Plus cette valeur est grande, plus la copie est rapide, mais avec des risques.

Référence:

Installing Operating System Images on Linux
RPi Easy SD Card Setup