# TaBr - gestion d'un serveur familial partie 1 2023-05-12T13:59:15Z Je l'évoquais dans un précédent article : j'ai réfléchi à la mise en place d'un serveur à utilisation familiale, voire de quartier. Après quelques temps à coder, c'est chose prête, et je vais détailler ici les choix et les scripts utilisés. Tout d'abord, quelques détails sur la méthode choisie: * Les utilisateurs sont de vrais utilisateurs système. Cela veut dire qu'il ne pourra pas en avoir plus que la limite par défaut que je ne souhaite pas changer, c'est à dire 2147483647. Autant dire que la famille peut être très nombreuse ^^. * Les services actuellement gérés sont le mail (SMTP + IMAP + Webmail) et la messagerie instantanée (XMPP + client). J'envisage d'en ajouter à l'avenir, notamment dokuwiki et un dépôt de fichier voire NextCloud (mais ce dernier reste trop gros). * J'ai séparé au maximum les privilèges. Dit autrement, ce n'est pas root qui va lancer tous les scripts. Pour accéder à des droits superutilisateur, c'est "doas" qui sera employé. * Un administrateur "_tabr_admin" lancera les commandes. Son compte est désactivé par défaut (il n'a pas de shell), et sera donc accédé par doas. Il est aussi le propriétaire des fichiers contenant les données sensibles. * Pour séparer les privilèges, chaque utilisateur appartient à un groupe "_tabr_users". Cela me servira pour mettre en place un accès SSH, et surtout SFTP et une configuration par groupe d'un chroot. => https://si3t.ch/ah/fr/#_89_SFTPdansunchroot Pour la mise en place d'un chroot SFTP, c'est facile. 4 composants sont prévus : * tabr_adduser : pour ajouter les utilisateurs. Il crée au passage un code de récupération pour changer le mot de passe. * tabr_deluser : supprime un utilisateur et toute référence à ce derier * tabr_passwd : traite les demandes de changement de mot de passe. Il sera appelé via une tâche cron. * tabr_chpw_cgi : une interface web pour demander le changement de mot de passe. Pour un public un peu plus geek, j'utiliserais plutôt une identification par clé ssh et un script appelé à la connexion avec "ForceCommand". On détaillera chaque composants dans une série d'articles à venir. Pour finir celui-ci, je vous présente seulement le fichier Makefile qui permet l'installation: ``` # tabr suite # prx # Quelques variables... PREFIX ?=/usr/local BINDIR ?=${PREFIX}/bin SBINDIR ?=${PREFIX}/sbin CGIDIR ?=/var/www/cgi-bin CHPWREQDIR ?=/var/www/tabr_chpw_requests # Tout ce qu'il faudra compiler all: src/tabr_chpw_cgi src/hashmatchstr # chpw_cgi sera à recompiler si on modifie sa configuration src/chpw_cgi/main.c: src/chpw_cgi/config.h # Comment compiler tabr_chpw_cgi. # On utilise -static car il sera dans un chroot src/tabr_chpw_cgi: src/chpw_cgi/main.c ${CC} -static -o $@ $? # Compilation de hashmatchstr, l'outil # qui permet de comparer les hash et les passwords src/hashmatchstr: src/hashmatchstr.c ${CC} -o $@ $? # On prévoit comment remettre à zéro clean: rm src/tabr_chpw_cgi rm src/hashmatchstr # Installation des fichiers. # On utilise la commande install pour # gérer finement les permissions install: src/tabr_chpw_cgi src/hashmatchstr install -o root -g daemon -m 0755 src/tabr_chpw_cgi ${CGIDIR}/tabr_chpw.cgi @# IMPORTANT: chmod 730, www can write but can't read install -o _tabr_admin -g www -m 0730 -d ${CHPWREQDIR} install -m 0755 -o root -g bin src/hashmatchstr ${BINDIR}/hashmatchstr install -m 0755 -o root -g bin src/tabr_adduser.sh ${SBINDIR}/tabr_adduser install -m 0755 -o root -g bin src/tabr_passwd.sh ${SBINDIR}/tabr_passwd install -m 0755 -o root -g bin src/tabr_deluser.sh ${SBINDIR}/tabr_deluser install -m 0644 -o root -g wheel src/tabr.conf /etc/ # On prépare aussi le nettoyage uninstall: rm -rf ${CGIDIR}/tabr_chpw.cgi rm -f ${BINDIR}/hashmatchstr rm -f ${BINDIR}/tabr_adduser rm -f ${BINDIR}/tabr_passwd rm -f ${BINDIR}/tabr_deluser @printf "You probably should remove %s and %s too\n"\ "${CHPWREQDIR}" "/etc/tabr.conf" ``` ## Une réaction? => mailto:bla@bla.si3t.ch?subject=TaBr-suite-gestion-serveur Envoyez votre commentaire par mail (anonyme). => /log/commentaires/ Mode d'emploi de la liste de diffusion pour recevoir les réponses.