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

Publicités

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

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