--- aliases: [/fr/sys/openbsd/omv-it-nas/] categories: ['OpenBSD','Réseau','Serveur'] date: 2018-10-15T19:32:40+02:00 description: "Fabriquons un NAS, serveur multimédia, serveur de stockage, sous OpenBSD, en utilisant des disques durs chiffrés, dont le mode Raid 1C" draft: false tags: ['OpenBSD','NAS','Raid1C'] title: "OpenBSD : Faire d'OpenBSD son NAS - en mode Raid 1C" translationKey: 'openbsd-nas' --- ## Description Voici mon projet de NAS, basé sur… OpenBSD ! Ce NAS fait fonction de : * serveur de fichiers, avec Samba, voire NFS, et mieux par SSH ### Versions logicielles * OS : OpenBSD *6.3 ⇒* **7.2** * Samba : **4.16.6** * SSH : OpenSSH, LibreSSL *(natifs, intégrés)* ## Installation Démarrons sur une clé USB, pour installer le système sur une clé USB voire un SSD chiffré… qui servira à enregistrer/diffuser les données, tels que fichiers documents, audio, vidéo, etc… {{< note warning >}} ATTENTION : Soyez conscient que du fait d'avoir le système d'exploitation sur une clé USB, celui-ci sera "plus lent" que si nous avions un disque dur dédié ! {{}} {{< note tip >}} Étant donné que nous faisons un serveur : lors de l'installation, au moment de [choisir les jeux d'installation](https://wiki.openbsd.fr.eu.org/doku.php/openbsd.org/faq/faq4#jeux-de-fichiers), ne les choisissez pas tous, cela ne sert strictement à rien. Le gain de place ne sera pas énorme, mais ce sera toujours cela de pris ; voici les sets à choisir : `-game* -x* +xbase* +xfont*`, voire plus court `-g* -x* +xb* +xf*` ! {{}} ## Configuration ### Durcir le système À la fois, pour soulager la clé, mais aussi pour empêcher toute écriture non désirée ou involontaire, et donc toute modification potentielle du système, on va modifier le système de fichier de telle manière que l'on ne puisse ni écrire, ni exécuter quoique ce soit sur l'ensemble du système de fichiers. * mise en lecture seule `ro` des partitions suivantes : `/`, `/usr`, `/usr/` et toutes les autres partitions `/usr/*` créées logiquement par l'installateur * mise en `nodev,noexec,nosuid` des partitions `/tmp`, et `/var` * mise en `nodev,noexec,nosuid` de la partition `/home` - *nous pourrions mettre l'option `ro` néanmoins cela complexifie encore plus le processus, surtout à la connexion SSH, voire sur les autres protocoles*. Ensuite il faut veiller à monter les périphériques `/dev` dans un système de fichier temporaire swap de type `mfs` afin de ne pas avoir de problèmes avec les périphériques, avec certains services qui ont besoin de "monter" dynamiquement, tel SSH… autrement dans ce cas, les connexions auraient dû mal à se faire, voire à ne pas s'exécuter. Lire mon article "{{< inside "sys:openbsd:harden-openbsd">}}" - *retrouvez le script `sysmount` dans la section {{< anchor "Fichiers de configuration" "fichiers-de-configuration" >}} ci-dessous, en fin d'article…* ### Chiffrer le disque dur Personnellement, j'utilise deux disques durs en mode Raid 1C *(à savoir Raid 1 + chiffrement)*. Puis, un troisième qui sert de sauvegarde, lui aussi chiffré. Dans ce contexte, j'utilise une seule clé USB pour assumer le déchiffrement. {{}} Veuillez lire mon article "{{< inside "sys:openbsd:mount-crypt-hd" >}}"… vous y retrouverez comment chiffrer, mais aussi les informations nécessaires pour le montage automatique de ces disques. {{}} --- N'oubliez pas de modifier les fichiers `/etc/rc.local` et `/etc/rc.shutdown` pour attacher et monter le disque dur au démarrage et respectivement le démonter puis le détacher à l'extinction du serveur. *Retrouvez ces scripts ainsi que le script `bioctlr` modifié, dans la section {{< anchor "Fichiers de configuration" "fichiers-de-configuration" >}} ci-dessous, en fin d'article…* ### Arborescence Choisissez une arborescence du disque dur NAS chiffré, une fois attaché et monté sur `/mnt/nas`, par exemple, tel que : * `/mnt/nas/Documents` - répertoire de tout document numérique crée par les utilisateurs, dans leur propre répertoire * `/mnt/nas/Medias` - qui est le répertoire qui recevra tous les fichiers images, audios, et vidéos, chacuns dans leur répertoire respectif * `/mnt/nas/P2P` - qui sert à déposer les fichiers torrents… `# mkdir -p /mnt/nas/{Documents,Medias,P2P}`
`# mkdir -p /mnt/nas/Medias/{Images,Music,Video}`
`# mkdir /mnt/nas/P2P/torrents`
Dans le répertoire de documents, créez autant de répertoires nécessaires que d'utilisateurs qui se serviront de votre **NAS**, et liez symboliquement ces répertoires vers les répertoires home des utilisateurs : `# mkdir /mnt/nas/Documents/$user`
`# chown $user /mnt/nas/Documents/$user`
`# chmod 0700 /mnt/nas/Documents/$user`
`# ln -s /mnt/nas/Documents/$user /home/$user/Documents`
Ensuite, liez symboliquement les différents répertoires de médias, et celui des torrents avec votre utilisateur principal - le premier utilisateur que vous aurez créé, qui seul aura le droit d'écrire dedans. `# chown -R $user /mnt/nas/{Medias,P2P}`
`# for name in Images Music Video; do ln -s /mnt/nas/Medias/$name /home/$user/$name; done`
{{< note tip >}} Si jamais vous voulez que chacun des utilisateurs systèmes que vous créerez ait son propre répertoire dans les différents répertoires des médias, appliquez la même méthode que le code ci-dessus pour la création des répertoires utilisateurs dans le répertoire des documents, mais faites-le sur le répertoire des médias, tel que : `# for name in Images Music Video; do mkdir -p /mnt/nas/Medias/$user/$name && ln -s /mnt/nas/Medias/$user/$name /home/$user/$name; done`
`# chown -R $user /mnt/nas/Medias/$user`
`# chmod 0700 /mnt/nas/Medias/$user`
{{}} Dans la suite de ce tutoriel, nous resterons sur la situation simple où seul l'utilisateur principal a des droits en écriture sur les trois répertoires enfants… ---- En cas où vous avez un énième disque dur, qui lui servirait de sauvegarde des données écrites sur le disque NAS, le script de montage automatique est profondément modifié pour pouvoir attacher et monter cet autre disque dur, qui lui aussi sera chiffré, bien sûr ! Actuellement, j'utilise **Borg** pour effectuer ma sauvegarde. ### Fichiers de configuration Retrouvez les différents fichiers de configuration disponibles, tels que : * Script de montage en lecture seule et/ou accès en écriture du système : [sysmount][1] * Script de montage automatique : [bioctlr][2] * Scripts [rc.local][3], [rc.shutdown][4], [daily.local][5] ## Gestion des services {{< note warning >}} **ALERTE** : Tous ces services seront automatiquement démarrés que **si et seulement si** le disque dur chiffré est attaché **ET** monté. En effet, cela ne sert à rien de les activer et de les démarrer si le disque dur n'est pas correctement monté ; ils se mettraient en échec inutilement ! Ils seront donc activé à partir du script `/etc/rc.local` et arrêté avant l'extinction machine, depuis le script `/etc/rc.shutdown`. {{}} ### MiniDLNA Si vous souhaitez en faire un serveur multimédia, j'explique l'installation et surtout la configuration du service MiniDLNA dans l'article suivant :
"{{< inside "sys:openbsd:minidlna" >}}". Pour ce qui est de la configuration du fichier `/etc/minidlna.conf`, voici les modifications faites : * `friendly_name=OpenBSD Multimedia View-IT` * `media_dir=A,/mnt/nas/Medias/your-user/Music` * `media_dir=V,/mnt/nas/Medias/your-user/Video` * `max_connections=7` ### Samba Les explications d'installation de base sont fournies dans cet article "{{< inside "sys:openbsd:samba" >}}". {{< note tip >}} Je vous invite à créer un groupe dédié, dans lequel ajouter les différents utilisateurs - ainsi, nous utiliserons les options d'autorisations par groupe, plutôt que par utilisateurs autorisés : ```sh # groupadd _smb # usermod -G _smb $user ``` {{}} Concernant les modifications du fichier `/etc/samba/smb.conf` : #### Section [Global] * `interfaces` : décommentez-la, et écrivez votre réseau lan IPv4, et si vous avez la bonne idée d'avoir un réseau IPv6 ULA, *(de type `fd0::/64`, par exemple)* alors faites les ajouts adéquats. * nommons le serveur : `server string = OpenBSD NAS` * renommons le groupe de travail, ou pas : `workgroup` - *personnellement, je le fais en le renommant par une seule lettre, me facilitant la vie* ;) * et, n'autorisons QUE les adresses IP venant seulements de notre réseau local : `hosts allow = 192.168.1. fd0::/64` - *Attention à bien modifier selon vos propres adressages IP…* #### Section [homes] Utilisons la **section [Homes]** pour autoriser la connexion à nos différents utilisateurs, à leurs répertoires **Documents**. {{< code "sys-openbsd-omv-samba-section-homes" cfg >}} ##### Explications * `browseable = no` : le parcours du répertoire par tout autre que les utilisateurs autorisés est interdit ; * `create mask` force le chmod sur les fichiers créés/ajoutés/modifiés * `directory mask` et `force directory mode` obligent le chmod en question sur les répertoires. * `hide dot files = No` autorise la lecture des fichiers et répertoires cachés - ce qui pour un utilisateur autorisé, sur ses propres fichiers, est normal. * `hide special files = Yes` empêche la lecture de tout fichier spécial * `hosts allow` indiquons IMPÉRATIVEMENT les adresses IP des machines autorisées à se connecter à ce partage… * `read only` : étant que nous voulons autoriser les utilisateurs à écrire/ajouter leurs propres documents, laissons/mettons la sur `no` * `valid users` renfermera les utilisateurs, ou le groupe samba dédié, autorisés à se connecter à ce partage - **à remplir impérativement** -
c'est ici que nous ajouterons, *de préférence*, le groupe `smb` que je vous ai invité à créer dans l'astuce au début de ce chapitre, tel que : `valid users = @_smb` * `write list` autorisera seuls les utilisateurs renseignés à pouvoir écrire dans ce partage ! -
c'est ici qu'il est préférable d'ajouter le groupe samba dédié, créé plutôt, tel que : `write list = @_smb` #### Sections [Music] et [Video] Maintenant occupons nous des partages Samba pour les documents audios, et vidéos - la configuration sera exactement la même, seul le nom de section change ainsi que les options `comment`, `path`… ! Nous appellerons, *par préférence*, : * pour les documents sonores la section correspondante : `Section [Music]`, * et pour les fichiers vidéos : `Section [Video]`. ---- * À la différence du partage `[homes]`, permettons que ces partages multimédias soient parcourables par tous : `browseable = yes`, et `guest ok = yes` * Mais nous ne voulons pas que d'aucun puisse écrire dedans, l'option `read only = yes` nous y aidera. De même que l'option `printable = no` empêchera toute tentative d'impression des documents… * De même, nous empêcherons toute lecture de fichiers cachés et/ou spéciaux : `hide dot files = yes` et `hide special files = yes` * L'option `write list` nous permettra d'autoriser au moins votre utilisateur à écrire dedans ! :p ##### Section [Music] {{< code "sys-openbsd-omv-samba-section-music" cfg >}} ##### Section [Video] {{< code "sys-openbsd-omv-samba-section-video" cfg >}} ### SSH À la différence des autres services, celui-ci sera bel et bien monté normalement dès le démarrage de la machine… et donc géré depuis le fichier `/etc/rc.conf.local` par le biais de l'outil `rcctl`. En effet, nous voulons pouvoir y accèder à tout moment… {{< note tip >}} Veuillez lire mon article suivant sur comment avoir une {{< inside "sec:ssh:configuration-securisee" "configuration et générer des clés sécurisées" >}}, actuellement ! {{}} #### SSHFS Étant donné que mon utilisateur système principal est autorisé à se connecter en SSH sur le serveur, il est facile de monter localement le système de fichier, soit par [SSHFS][8] en mode console, soit avec un outil graphique, tel que [Gigolo][9]. C'est plus lent qu'avec le partage Samba, ce qui est normal du fait de la couche "sécurité" lié aux chiffrements de la connexion…
mais c'est aussi pratique ET à ma préférence ! :D --- ***Enjoy-ID!
Enjoy-IT!*** --- [1]: https://framagit.org/hucste/omv-it/blob/master/Administration/sysmount [2]: https://framagit.org/hucste/omv-it/blob/master/Administration/bioctlr [3]: https://framagit.org/hucste/omv-it/blob/master/etc/rc.local [4]: https://framagit.org/hucste/omv-it/blob/master/etc/rc.shutdown [5]: https://framagit.org/hucste/omv-it/blob/master/etc/daily.local [6]: https://framagit.org/hucste/omv-it/blob/master/etc/rc.d/deluged [7]: https://framagit.org/hucste/omv-it/blob/master/Administration/bckp_nas [8]: https://wiki.openbsd.fr.eu.org/doku.php/system/sysutils/sshfs-fuse [9]: https://wiki.openbsd.fr.eu.org/doku.php/system/x11/gigolo ---