Serveur Archlinux sur Raspberry Pi

RaspberryPiLogo
Nous allons voir comment mettre en place plusieurs services utiles avec Archlinux ARM sur un Raspberry PI.

Il faut bien sûr qu’Archlinux soit installé sur votre Raspberry, cf ce tutoriel.
Les points abordés dans ce tutoriel seront :

  • – Configurer et sécuriser SSH
  • – Installation du service Web NginX et PhP
  • – Installation d’une base de données MySQL
  • – Mise en place d’un partage réseau avec SAMBA
  • – Installation d’une SeedBox avec Transmission-Daemon
  • – Installation d’un serveur de musique : Music Player Daemon
  • – Quelques petites astuces pour améliorer le tout.

*

 I – Configurer et sécuriser SSH

url
Par défaut, sur Archlinux ARM, SSH est déjà configurer sur le port 22.
Vous pouvez vous y connecter avec la commande :

ssh root@<ip-du-raspberry>

Le fichier de configuration de SSH se trouve dans /etc/ssh/sshd_config,
Nous allons rajouter quelques options pour sécuriser tout ça :

Port 22 -> Changeons le, car il est bien trop connu
PermitRootLogin no -> (après avoir ajouter un user)
Protocol 2 -> La version 1.0 date de 1995 !

Pour plus de sécurité, il est conseillé d’utiliser un système de clé privée et de désactiver l’authentification par mot de passe. Voici comment faire :

Générez la clé depuis l’ordinateur client :

ssh-keygen -t dsa -f ~/.ssh/id_server

On envoie la clé public vers le serveur :

scp -P <port> ~/.ssh/id_server.pub <user>@<ip-du-rasp>:~/.ssh/authorized_keys

On désactive les autres types d’authentifications dans /etc/ssh/sshd_config :

RSAAuthentication no 
UsePAM no 
KerberosAuthentication no 
GSSAPIAuthentication no 
PasswordAuthentication no

Attention avec la dernière option, vous ne pourrez plus vous connectez par SSH si votre configuration par clé n’est pas bonne.
On peut maintenant redémarrer le service SSH  :

sudo systemctl restart sshd

SSH est maintenant prêt à être utilisé grâce à la commande :

ssh -p <port> <user>@<ip-du-raspberry>

*

2 – Installation du service Web NginX+PHPnginx_logo

NginX (Engine »X »), est un logiciel libre de serveur Web, plus léger que le « leader » Apache2. Il permet de conserver plus de RAM  sur son Raspberry,

Pour l’installer :

sudo pacman -S nginx
sudo systemctl start nginx

On va éditer le fichier de configuration placé dans /etc/nginx/nginx.conf :

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    gzip  on;

    server {
        listen       80;
        server_name  localhost;
        root   /srv/http;
        charset koi8-r;
        location / {
        index  index.php index.html index.htm;
                                autoindex on;
                                autoindex_exact_size off;
                                autoindex_localtime on;
        }

                                location /phpmyadmin {
        rewrite ^/* /phpMyAdmin last;
    }


 error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /srv/http;
        }

    location ~ \.php$ {
#       fastcgi_pass 127.0.0.1:9000;
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }

        location ~ /\.ht {
            deny  all;
        }
    }
}

La racine de notre serveur Web est maintenant placée dans /srv/http !
Cette configuration est assez simple, elle permet de fixer la racine du dossier voulu, et permet d’ouvrir les fichiers *.php et *.html dans ce dossier (c’est le but ! ).
Elle interdit également l’accès aux fichier commençant par .ht ( une petite sécurité pour les .htpasswd)

Nous allons maintenant installé PHP :

sudo pacman –S php php-fpm
sudo systemctl start php-fpm
sudo systemctl restart nginx
sudo systemctl enable nginx
sudo systemctl enable php-fpm

Rentrez l’IP de votre Raspberry dans un navigateur pour tester la config de NginX :

milestone_1


*

 3 – Installation d’une base de données MySQL

 

mariadb-seal-shaded-browntext-alt

Nous allons installer MariaDB (fork de MySQL) de base sous Archlinux :

sudo pacman -S mysql
sudo systemctl start mysqld
sudo mysql_secure_installation

Suivez les instructions et renseignez le mot de passe root souhaité pour la BDD.

PhpMyAdmin_logo

Nous allons maintenant installer  PHPMyAdmin pour administrer graphiquement la base de données :

sudo pacman -S phpmyadmin php-mcrypt
sudo ln -s /usr/share/webapps/phpMyAdmin   /srv/http

Il faut maintenant éditer le fichier /etc/php/php.ini :

open_basedir= /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/
extension=mysqli.so
extension=mysql.so
extension=mcrypt.so
mysqli.allow_local_infile = On

On peut maintenant redémarrer PHP :

sudo systemctl restart php-fpm

On accède à PHPMyAdmin depuis l’adresse http://<ip-du-raspberry>/phpMyAdmin.
(attention aux Majuscules)

phpmyadmin_login_screen


*

4 – Mise en place d’un partage réseau avec SAMBA

SambaSi vous souhaitez créer un ou plusieurs dossiers partagés depuis votre Raspberry, il est vivement conseillé d’installer Samba :

sudo pacman -S samba

Nous partons sur le principe que vous avez branchez un disque dur externe (auto-alimenté, sinon vous aurez des problèmes d’alimentations) à votre Raspberry et que l’on souhaite partager ce disque avec les ordinateurs de votre réseau (Apple / Windows / Android / Linux…).

On va tout d’abord créer le dossier où l’on « montera » notre disque (on l’appelle « USB ») :

sudo mkdir /srv/USB
sudo chmod 775 /srv/USB

On peut ensuite le monter avec la commande :
(Pour connaitre <votre-disque>, vous pouvez le trouver avec la commande fdisk -l)

sudo mount -t ntfs-3g -o uid=pi,gid=pi /dev/<votre-disque> /srv/USB

On va modifier le fichier fstab, pour monter le disque automatiquement au démarrage du Raspberry. (d’abord on créer une sauvegarde du fichier.)

sudo cp /etc/fstab /etc/fstab.back

On va devoir connaitre l’UUID du disque, pour ce faire, on utilise la commande :

lsblk -f

On ouvre ensuite /etc/fstab et on rajoute la ligne :

UUID=<votre-UUID>    /srv/USB    ntfs-3g    rw,defaults    0    0

(Pour de meilleurs performances il est recommandé d’utiliser un disque formaté en Ext4 ou Ext3, car en NTFS, on a une vitesse quelque peut réduite.)

Une fois notre disque prêt, on va créer un utilisateur Samba :

sudo smbpasswd -a <user-samba>

On peut maintenant créer un nouveau fichier de configuration pour Samba :

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.back

On l’édite et rajoute ses informations (à adapter selon votre utilisation) :

Pour plus d’options, cf Archlinux-Wiki

[Global]
        security = share
        workgroup = HOME
        encrypt password  = true
[USB]
        path = /srv/USB
        guest ok = yes
        browsable = yes
        writeable = yes
        read only = no
        create mask = 0644
        directory mask = 2755
        valid users = <user-samba>

On peut maintenant lancer Samba :

sudo systemctl start smbd
sudo systemctl enable smbd

Vous pouvez maintenant accèder à votre partage depuis un PC Windows avec la commande \\<ip-du-rasp> (à saisir dans « exécuter » CTRL+R) .


*

5 – Installation d’une SeedBox avec Transmission-Daemon

transmission-bittorrent-300x300Transmission-daemon est un service pour gérer les téléchargements de torrents depuis une interface Web « auto-géré » c’est à dire qui nécessite aucun serveur Web.

Le Raspberry Pi fait une parfaite SeedBox (serveur informatique privé qui est dédié à la réception et à l’émission de fichiers informatiques.) grâce à ça faible consommation et sa taille réduite.

Voici comment installer transmission-daemon sous Archlinux :
(Pour une config plus poussé, cf Archlinux Wiki)

sudo pacman -S transmission-cli

Le fichier de configuration de trouve à ~/.config/transmission-daemon/setting.json.
On va l’éditer et modifié quelques options :

"rpc-whitelist-enabled": false,
"rpc-authentication-required": false,
"download-dir": "/srv/USB/Download",

On va maintenant lancer le service en user, ce qui permet à chaque utilisateur de gérer ses torrents indépendamment (il peut bien sûr être lancer en Root.)

transmission-daemon

N’oubliez pas de donner les droits à transmission sur le dossier de téléchargement :

sudo chown transmission:transmission /srv/USB/Download

Vous pouvez maintenant allez à l’adresse http://IP-Du-RASP:9091/ pour ajouter et gérer vos torrents :

webgenerallarge


*

6 – Installation de Music Player Daemon

mpd_logoMusic Player Daemon, ou MPD, est un lecteur audio libre qui permet l’accès distant depuis un autre ordinateur.
En gros, on reliera notre Raspberry à un système de son (Home-cinéma par exemple) et on pourra contrôler la musique depuis n’importe qu’elle ordinateur, smartphone ou tablette.

On va d’abord installer alsa-utils qui permet de gérez le son sous Linux.

sudo pacman -S alsa-utils

On va ensuite créer le fichier /etc/modules-load.d/snd_bcm2835.conf et écrire :

# Load Sound
snd_bcm2835

On le lance ensuite avec la commande :  (cela se lancera automatiquement au démarrage)

modprobe snd_bcm2835

On peut maintenant installer Music Player Daemon :

sudo pacman -S mpd
usermod -G audio -a mpd

(Dans la deuxième commande, on attribue les droits « audio » à l’utilisateur automatiquement créer « mpd »).

On part sur le principe que votre dossier musical se  trouve dans le disque partagé /srv/USB/Music, on va donc maintenant éditer le fichier /etc/mpd.conf :

user "mpd"
music_directory "/srv/USB/Music"
pid_file "/run/mpd/mpd.pid"
follow_inside_symlinks "yes"
follow_outside_symlinks "yes"
db_file "/var/lib/mpd/mpd.db"
state_file "/var/lib/mpd/mpdstate"
playlist_directory "/srv/USB/Music"
port "6600"
password "mpd@read,add,control,admin"

audio_output {
type "alsa"
name "PiALSA"
device "hw:0,0"
}

Pour plus d’options, cf Archlinux Wiki.

On peut maintenant lancer le service et l’activer au démarrage :

sudo systemctl enable mpd
sudo systemctl start mpd

On va voir maintenant pouvoir configurer nos clients avec ses options :

-Port 6600
-Login « mpd »
-Password « mpd »

Plus qu’à brancher un câble Jack au Raspberry pour profiter de notre serveur de son.

Voici la liste « officiel » des clients pour MPD : http://mpd.wikia.com/wiki/Clients

Sous Linux, un des meilleurs clients MPD, selon moi, est Sonata.


 *

7 -Quelques petites astuces

Se créer une interface web :

Il peut être intéressant d’avoir un interface web sur son Raspberry pour gérer ses services, avoir des raccourcis pour ses applications PHP …
Pas besoin de développer quelque chose de très compliqué, ce site, par exemple, propose des templates très sympa en HTML5. Après quelques modifications, on peut avoir un interface de ce style :

Screenshot - 25082014 - 09:43:41Ce site dois donc être placé à la racine de notre serveur web : /srv/http


 Quelques « Applications » intéressantes :

Raspcontrol  qui permet d’avoir une vision « d’ensemble » sur les performances de votre Raspberry (CPU, RAM, Disques, Chaleur du processeur, Processus …)

raspcontrol_record_2012jan0401


Codiad qui permet d’avoir un IDE (environnement de développement)  directement dans votre navigateur, très pratique pour modifier rapidement votre page web sans se connecter en SSH.

Script-of-the-Day-Codiad-411404-2


OwnCloud est une alternative à Dropbox qui s’héberge chez sois. Il existe des clients Windows, Mac et Linux qui permettent d’accéder à ses fichiers   que l’on sois (à condition d’avoir notre Raspberry « ouvert » vers le web.) L’avantage c’est qu’on l’héberge nous même, donc on garde le contrôle sur ses fichiers et sur ceux qui peuvent les utiliser.

screen_ownCloud_FilesTutoriel d’installation sous Archlinux.


Liens utiles à ce tutoriel :

http://korben.info/tuto-ssh-securiser.html
http://www.tecmint.com/install-nginx-php-mysql…
http://www.jeremymorgan.com/…/how-to-raspberry-pi-file-server/
http://hempeldesigngroup.com/…/raspberry-pi-setup-as-mpd-sever/

Note de fin :

Ce tutoriel n’explique pas comment sécuriser entièrement son serveur, donc en mettant votre serveur sur le Web, vous serez relativement exposés aux attaques.
Personnellement, je suis le seul à utiliser mon serveur, donc je passe par un tunnel SSH (SOCKS), je peux donc utiliser les ressources de mon raspberry  que je sois dans le monde, mais personne d’autre ne peut y accéder (clé privée SSH).
Si vous souhaitez le sécuriser d’avantage, je vous conseille de regarder du coté de Fail2BAN.
J’espère que ce tutoriel vous sera utile !

Laisser un commentaire