# TaBr : hébergement de services à taille humaine
Voici un recueil d'outils permettant de gérer les inscriptions à un
serveur.
BIN Téléchargement de tabr.tgz
Services actuellement gérés:
* mail (smtpd + dovecot)
* xmpp (prosody)
Un dossier `/var/tabr-data/` (variable "data" dans `tabr.conf`)
contiendra un fichier par utilisateur contenant les codes de
récupération hachés.
Ce dossier appartiendra et ne sera lisible que à/par un utilisateur
dédié : `_tabr_admin`.
Les utilisateurs appartiennent à un groupe commun `_tabr_users`, ce qui
pourra simplifier la gestion si un accès SSH est envisagé. Il s'agit de
réels utilisateurs système, ce qui impose une limite à leur nombre
maximum : 2147483647 (y a de la marge).
## Mise en place
Création de groupes et d'utilisateurs dédiés. _tabr_admin n'a pas de
dossier personnel ni de shell, il ne servira qu'à lancer des commandes
sans être root via doas.
```
groupadd _tabr_users
useradd -s /sbin/nologin -m -d /var/_tabr_admin _tabr_admin
install -m 0700 -o _tabr_admin -g _tabr_admin -d \
/var/_tabr_admin/tabr-data
install -m 0700 -o _tabr_admin -g _tabr_admin -d \
/var/_tabr_admin/tabr-data/instructions
```
La modification de mot de passe sera gérée par l'user _tabr_admin, il
faut donc configurer doas:
```
cat >> /etc/doas.conf << EOF
permit root
# TaBr admin need to change passwords
permit nopass _tabr_admin cmd /usr/sbin/useradd
permit nopass _tabr_admin cmd /usr/sbin/usermod
permit nopass _tabr_admin cmd /usr/sbin/userdel
permit nopass _tabr_admin cmd /usr/local/sbin/prosodyctl
```
Les messages envoyés à _tabr_admin peuvent être redirigés vers root:
```
echo "_tabr_admin: root" >> /etc/mail/aliases
newaliases
```
Un fichier de configuration est attendu à `/etc/tabr.conf`, vous devriez
le configurer après l'installation.
```
vi /etc/tabr.conf
```
La commande `qrencode` doit être disponible pour tabr_adduser:
```
# pkg_add libqrencode
```
## Installation
Les différents scripts et outils peuvent être installés avec la
commande `make install`.
Vous voudrez probablement auparavant ajuster la configuration du script
cgi en éditant le fichier `config.h` du dossier `tabr_chpw_cgi`.
## Utilisation
Les différents scripts sont supposés être appelés en tant que
_tabr_admin. Pour cela, `doas` est là.
## Description des outils
### tabr_adduser
```
doas -u _tabr_admin tabr_adduser nouvel_utilisateur
```
Ajout d'un nouvel utilisateur du si3tch TaBr.
* Vérification que l'user n'existe pas
* Création de l'user avec mot de passe aléatoire
* Création du compte xmpp
* Enregistrement de la phrase de récupération dans un fichier après
passage à `encrypt`.
* Génération fiche avec instructions et QRcode contenant phrase de
récupération. Cette fiche est envoyée à _tabr_admin qui peut la
transmettre de la façon qu'il préfère à l'utilisateur.
### tabr_chpw.cgi
CGI pour demander une modification de mot de passe pour un utilisateur.
Un délai d'attente avant de répondre et un captcha est prévu pour
limiter les abus. Il profite de unveil et pledge pour éviter les
escalades. Il se configure en éditant le fichier `config.h` situé dans
le dossier `src/chpw_cgi`.
* Affichage d'un formulaire avec user, code de recupération, nouveau pw
demandé
* Enregistrement de la demande dans un fichier txt portant le nom de
l'utilisateur dans un dossier dédié à cet effet.
httpd doit être configuré pour appeler le cgi:
```
# rcctl enable slowcgi
# rcctl start slowcgi
# cat /etc/httpd.conf
[...]
server "example.com" {
[...]
location "/chpw" {
root "/cgi-bin/tabr_chpw.cgi"
fastcgi
}
}
# rcctl reload httpd
```
### tabr_passwd
```
doas -u _tabr_admin tabr_passwd /var/www/tabr_chpw_requests/
```
* Lecture des fichiers de demande de changement de mot de passe.
* Alerte _tabr_admin qu'une demande de changement a eu lieu
* Réalisation des changements. doas doit donc être correctement
configuré.
Une tâche cron de _tabr_admin appelle le script qui regarde tous les
fichiers éventuellement créés par `tabr_chpw.cgi`:
```
# crontab -u _tabr_admin -e
*/1 * * * * /usr/local/sbin/tabr_passwd /var/www/tabr_chpw_requests
...
```
* vérifie que l'user existe
* vérifie que le code de récupération de l'user correspond
* lance le changement de pw pour les différents services
* prévient l'admin de la tentative/réussite de changement.
### tabr_deluser
Script qui supprime l'utilisateur et son fichier de récupération