====== Créer un simple NAS avec SAMBA et PiVPN ======= {{ :howto:pi-samba.png?600 |}} Nous allons voir ici comment créer un petit NAS chez vous, simplement à l'aide d'un Raspberry Pi et de ces deux logiciels : SAMBA et PiVPN. Le principe sera donc partager un ou plusieurs dossiers avec SAMBA, puis d'y accéder de n'importe où grâce à PiVPN. Ces deux programmes sont faciles à installer, à prendre en main et à contrôler. Ils sont de plus très peu gourmands en énergie, ce qui convient très bien à l'utilisation du Raspberry ici. J'ai ici utilisé un Raspberry 3B+, connecté au réseau avec un câble ethernet, et la distribution Raspbian Stretch Lite disponible [[https://www.raspberrypi.org/downloads/raspbian/ |ici]]. #SAMBA Nous allons donc utiliser [[https://www.samba.org/|SAMBA]] pour ce tuto. L’intérêt de ce logiciel qui va nous servir à partager des fichiers via le protocole __smb__, est qu'il utilisable tant par des machines GNU/Linux que sous Windows. Nous aurons donc accès à nos fichiers aussi bien depuis votre téléphone (Android étant basé sur Linux) que depuis votre PC. ==== Préparation ==== Tout d'abord, nous allons attribuer une IP statique à notre Raspberry Pi, cela permettra d'y accéder bien plus facilement par la suite. Pour cela le plus simple reste d'aller faire un tour sur votre page de configuration de routeur (192.168.<0/1>.1 ou 192.168.<0/1>.254 selon les cas) et d'y configurer un bail statique qui sort de la plage DHCP pour votre appareil Raspi. Assurez-vous ensuite de mettre à jour vos paquets : `sudo apt-get update && sudo apt-get upgrade` Avant d'installer le logiciel proprement dit, il va falloir créer notre espace de stockage : il nous faut pour cela nous munir d'une clé USB ou d'un disque de données (HDD), que nous allons brancher sur le Raspberry Pi. C'est ce stockage que nous allons partager par la suite avec SAMBA. Une fois branché, nous devons alors connaitre le nom qui a été attribué au matériel : `sudo fdisk -l` Repérez dans la liste votre espace de stockage, qui doit porter un nom du style : **sda1** ou **sdb1**. Notre périphérique doit être formaté en ext4, format réservé à Linux, qui à l'avantage de pouvoir gérer les droits de lecture, d'écriture et d'exécution, ce qui est essentiel dans notre cas. Pour cela, on //démonte// le stockage puis on lance la commande de formatage (le //sda1// est à ajuster au besoin) : ``` umount /dev/sda1 sudo mkfs.ext4 /dev/sda1 ``` Une fois cela fait, on ne va pas re-//monter// le périphérique de suite. En effet, notre but est d'aller le //monter// dans un dossier créé spécialement, auquel nous attribuerons les droits que nous voulons. Nous allons donc ici créer un répertoire d'accueil du //montage// dans // /home/partage //, que je vais appelé NAS. L'emplacement et le nom du dossier sont bien sûr entièrement personnalisables. ``` sudo mkdir /home/partage sudo mkdir /home/partage/NAS ``` Nous pouvons alors //monter// le périphérique dans notre répertoire : `sudo mount /dev/sda1 /home/partage/NAS` Il nous faut ensuite donner les droits d'accès au stockage ainsi créé : `sudo chmod 777 -R /home/partage/NAS` Enfin, nous allons créer 3 dossiers, correspondant à 3 utilisation différentes : * le répertoire **Perso**, accessible uniquement avec un identifiant et un mot de passe, * le répertoire **Media**, accessible et lisible par tout le monde, mais modifiable juste par nous, * et le répertoire **Public**, accessible et modifiable par tout le monde. ``` sudo mkdir /home/partage/NAS/Public sudo mkdir /home/partage/NAS/Media sudo mkdir /home/partage/NAS/Perso ``` Voilà, notre stockage est prêt, il ne manque plus que la configuration et la gestion des accès par SAMBA. Toutefois, une dernière manipulation : nous allons rendre automatique à chaque démarrage le //montage// de notre périphérique dans le dossier NAS. Pour cela, il faut aller éditer le fichier **fstab** (`sudo nano /etc/fstab`) puis rajouter cette ligne à la fin du fichier : `/dev/sda1 /home/partage/NAS auto noatime,nofail 0 0` Il est alors conseillé de reboot votre appareil avant d'entamer la suite. Cela vous permettra de plus de vérifier sur le //montage// se fait bien de façon automatique. ==== Installation et configuration ==== Nous avons bien préparé le terrain en amont, voici donc arrivé le moment d'installer SAMBA ! Le paquet est présent dans les dépôts de Raspbian, nous avons alors juste une simple commande à rentrer : `sudo apt-get install samba samba-common-bin` Une fois installé, nous allons devoir bien sûr configurer le tout. Nous effectuons donc une copie du fichier de configuration (bonne pratique pour avoir une sauvegarde en cas de fausse manipulation), puis nous créons le nouveau fichier : ``` sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.old sudo nano /etc/samba/smb.conf ``` Voici ensuite ce que l'on va mettre dans le fichier : ``` #Configuration générale [global] workgroup = WORKGROUP server string = %h server # nom de votre NAS netbios name = NAS dns proxy = no # un endroit pour stocker les logs / debug log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d # Authentication security = user encrypt passwords = true passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user usershare allow guests = yes # Nos différents partages : vous pouvez en créer plusieurs à partir de ces 3 modèles selon vos besoins [Public] path =/home/partage/NAS/Public read only = no locking = no guest ok = yes force user = pi [Media] path =/home/partage/NAS/Media read only = yes locking = no guest ok = yes force user = pi [Perso] browseable = yes path =/home/partage/NAS/Perso writable = yes valid users = toto create mask = 0700 directory mask = 0700 ``` Vous remarquerez l'utilisateur **toto** : ce sera notre utilisateur qui gérera le dossier **Perso** (nom à modifier évidemment). Il faut donc maintenant créer ce compte pour que l’on puisse ouvrir ce dossier partagé avec cet utilisateur. ``` sudo user add toto -m -G users sudo passwd toto ``` On associe l'utilisateur à SAMBA. On en profite pour lui commniquer le mot de passe de l'utilisateur **pi**, qui va nous servir à modifier le dossier **Media** : ``` sudo smbpasswd -a toto sudo smbpasswd -a pi ``` Ensuite on donne à cet utilisateur les droits d’accès au dossier **Perso**, et les droits d'accès pour Pi sur **Media** : ``` sudo chown toto:toto /home/partage/NAS/Perso/ sudo chown pi:pi /home/partage/NAS/Media ``` Voilà maintenant tout est enfin prêt ! Il n’y a plus qu’à relancer le service Samba pour appliquer les modifications faites dans le fichier de configuration : `sudo /etc/init.d/samba restart` ==== Applications ==== Notre système de partage de fichiers et normalement bien en place, mais il nous faut tester ! Pour cela, depuis le gestionnaire de fichiers de votre PC, tapez dans la barre d'adresse : `\\`. Par exemple, moi je tape `\\192.168.1.100`, et j'arrive sur cette page : {{ :howto:acces.png |}} Ensuite, tentez de créer un ficher dans **Public** puis dans **Media** : dans le premier cas cela devrait marcher, mais pas dans le second ! Puis, ouvrez le dossier **Perso**, vous devriez voir apparaitre une fenêtre qui vous demande de vous identifiez (c'est là qu'intervient l'utilisateur que nous avons créé plus haut) : {{ :howto:identification.png?400 |}} En dernier point, il nous faut pouvoir modifier le contenu du dossier **Media**. Nous allons utiliser pour cela l'utilisateur **pi** (à qui nous avons donné les droits) et le protocole **SCP**. Ce protocole permet de transférer des fichiers d'un ordinateur à un autre via SSH. Depuis un terminal Linux : `sudo scp /chemin_vers_mon_fichier/mon_fichier pi@:/home/partage/NAS/Media/mon_fichier` Depuis une machine Windows, nous avons également la possibilité de le faire, via une interface graphique du logiciel libre [[https://winscp.net/eng/index.php|WinSCP]]. Le logiciel nous permet alors de nous connecter avec l'utilisateur que l'on veut sur notre RPi. {{:howto:win_scp1.png?400|}} {{ :howto:win_scp2.png?400|}} Il est alors très simple de téléverser un fichier de votre PC sur le Raspberry, et vice-versa. # PiVPN Si la configuration de votre NAS s'est déroulée sans soucis, vous pouvez à présent passer à l'étape supérieure, et intégrer votre serveur SAMBA à PiVPN afin d'y accéder de partout (ou presque !). Comme vous vous en doutez [[http://www.pivpn.io/ | PiVPN]] va créer un VPN qui permet depuis l'extérieur (en dehors de votre réseau local) de se connecter chez vous, et plus précisément sur votre Raspberry. Vous allez alors pouvoir profiter du partage du vos fichiers même en dehors de chez vous. Ceci a ses limites bien entendu, dépendant notamment de votre connexion externe et interne. Malgré tout, ça ne coute rien d'essayer et puis PiVPN peut bien sûr servir à bien d'autres projets, un VPN a de multiples applications possibles. ==== Installation ==== Avant de s'attaquer à l'installation à proprement parlée, il va nous falloir effectuer une petite manipulation : nous allons devoir rediriger un port de notre box vers un port du Raspberry. Ainsi lors d'une connexion extérieure sur ce port à l'aide du VPN, tout passera par notre appareil. Pour effectuer cette redirection de port, il faut se rendre sur la page de configuration de votre routeur. - Exemple pour une box Orange : {{:howto:orange.jpg?600|}} - Exemple pour une box Free : {{:howto:2019-04-27_21_42_46-.png?600|}} Vous remarquerez l'utilisation du port 1194 par défaut, et le choix du protocole UDP (si vous ne savez pas choisir entre TCP et UDP, prenez UPD par défaut). Nous pouvons maintenant attaquer l'installation. Nous aurons besoin ici de curl, normalement déjà installé sur Raspbian Stretch : `sudo apt-get install curl` Ensuite lancez l’installation par : `curl -L https://install.pivpn.io | bash` Déroulez l’installateur, avec à l'esprit que si vous ne savez pas répondre laissez les valeurs par défaut. Il va vous être demandé à un moment de choisir des serveurs DNS sur lesquels vous connecter. Je ne peux que vous conseiller d'éviter ceux par défaut, détenus par Google, et de plutôt choisir ceux proposés par [[https://www.fdn.fr/actions/dns/|FDN]] qui fournit des DNS __respectueux de votre vie privée__ ou d'aller faire un tour sur [[https://www.opennic.org/ | OpenNIC]] qui vous donne les DNS privés les plus proches de vous. Si toutefois vous vous sentez un peu perdu optez pour ceux de CloudFare (1.1.1.1) qui sont proposés directement dans la liste. {{:howto:2019-04-27_19_14_20-joplin.png?600|}} Arrivé à cette page, deux possibilités : soit laisser l'adresse IP chiffrée telle quelle, soit utiliser les services de [[https://www.noip.com/ | No IP]] qui nous fournissent une adresse textuelle sous la forme `.ddns.net` . L'avantage de la deuxième option est qu'elle prévient d'un éventuel changement d'adresse IP, mais demande quelques manipulations supplémentaires. Une fois au bout, faîtes le reboot proposé par le programme puis une fois réactivé tapez simplement : `pivpn -a` Il vous sera ensuite demandé un nom pour le profil VPN, puis un mot de passe pour sécuriser votre tunnel. Enfin, PiVPN vous indique alors qu'il a mis à disposition un fichier `ovpn` qui se situe : `/home/pi/ovpns/.ovpn` Ne reste plus qu'à le copier sur une clé USB ou le transférer sur votre ordinateur via SCP, puis l'exploiter avec [[https://openvpn.net/ | OpenVPN]], logiciel libre de connexion VPN disponible sur toutes les plateformes, y compris Android. ==== Applications ==== Tout est en place ? Il ne reste plus qu'à tester ! Pour cela connectez-vous sur un réseau extérieur (pas votre réseau local !), puis à l'aide de votre fichier `ovpn` et d'OpenVPN connectez-vous sur votre Raspberry. Dans notre cas, nous pouvons tester si le tout marche à l'aide d'un gestionnaire de fichiers, dans lequel vous aller rentrer l'adresse : `\\`. Si tout marche, vous pourrez également remarquer que vous avez non seulement accès aux fichiers partagés depuis votre Raspberry Pi, mais également à tous ceux qui se situent sur votre réseau local (depuis un PC Windows il est facile de partager des fichiers via le gestionnaire de fichiers). Article lié : [[howto:pihole_pivpn|Filtrer les publicités avec Pi-hole et PiVPN]]