Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
SFTPGo - Restriction des accès par dossiers
SFTPGo - Restriction des accès par dossiers
[modifier | modifier le wikicode]Problème
[modifier | modifier le wikicode]Si le root directory est accessible en écriture, l'utilisateur peut créer des dossiers hors des virtual folders.
Solution
[modifier | modifier le wikicode]1. Root directory
[modifier | modifier le wikicode]- Définir un dossier vide (ex: /srv/sftpgo-homes/ad64)
- Appliquer :
chmod 555 /srv/sftpgo-homes/ad64
2. Virtual folders
[modifier | modifier le wikicode]Mapper uniquement les dossiers autorisés :
- pleade → /var/data/ad64-data/data/pleade
- projets → /var/data/ad64-data/data/projets
3. ACL
[modifier | modifier le wikicode]Permissions globales :
- list
- download
Permissions spécifiques :
- /pleade → upload, create_dirs, delete, etc.
- /projets → upload, create_dirs, delete, etc.
Permissions racine :
- / → list uniquement
Résultat
[modifier | modifier le wikicode]- Impossible de créer des dossiers hors des virtual folders
- Accès strictement limité aux chemins définis
SFTPGo – Règles et bonnes pratiques
[modifier | modifier le wikicode]Structure recommandée
[modifier | modifier le wikicode]- Root directory utilisateur :
/var/sftpgo-homes/<user>
- Données réelles :
/var/data/<client>-data/data/
- Utiliser uniquement des "Virtual folders" pour exposer les données :
/pleade → <client>-pleade /projets → <client>-projects
Sécurité des répertoires
[modifier | modifier le wikicode]- Interdire toute écriture à la racine :
chmod 555 /var/sftpgo-homes/<user>
- Objectif :
empêcher la création de dossiers hors périmètre (ex: /toto)
Permissions (ACL)
[modifier | modifier le wikicode]- Ne jamais utiliser '*' sur '/'
- Configuration recommandée :
/ → list, download /pleade → * /projets → *
- Risque sinon :
création de fichiers/dossiers hors des répertoires prévus
Restrictions horaires
[modifier | modifier le wikicode]- ATTENTION :
une restriction horaire invalide provoque un "invalid credentials"
- Exemple dangereux :
Sunday 00:00 → 23:59
- Bonne pratique :
- supprimer les restrictions si inutiles - ou définir tous les jours explicitement
Mots de passe
[modifier | modifier le wikicode]- "Require password change" :
fonctionne uniquement via WebClient → ne pas activer pour des utilisateurs SFTP (FileZilla)
- Si problème :
utiliser : sftpgo resetpwd --admin <admin>
Debug authentification
[modifier | modifier le wikicode]- Vérifier dans la base :
sqlite3 /var/lib/sftpgo/sftpgo.db select username,status from users;
- status = 1 → OK
- Causes fréquentes d’échec :
- restriction horaire - ACL incorrectes - IP non autorisée - mauvais protocole (Web vs SFTP)
SFTPGo – Configuration, sécurisation et sauvegardes
[modifier | modifier le wikicode]1. Objectif
[modifier | modifier le wikicode]Mettre en place une configuration homogène et sécurisée des comptes SFTPGo, basée sur un modèle validé (ex : utilisateur ad64), et automatiser les sauvegardes.
2. Architecture retenue
[modifier | modifier le wikicode]- 1 utilisateur SFTPGo par personne (pas de compte partagé)
- Utilisation de Virtual folders
- Répertoire racine non modifiable
- Permissions fines par dossier
- Désactivation des fonctionnalités sensibles non utiles aux clients
3. Configuration utilisateur (modèle ad64)
[modifier | modifier le wikicode]3.1 Répertoire racine
[modifier | modifier le wikicode]Root directory = /var/sftpgo-homes/ad64
Permissions système :
chmod 555 /var/sftpgo-homes/ad64
But :
- empêcher la création de dossiers hors périmètre
3.2 Virtual folders
[modifier | modifier le wikicode]Exemple :
- /pleade → ad64-pleade
- /projets → ad64-projets
3.3 ACL globales
[modifier | modifier le wikicode]Au niveau racine :
permissions = ["/": ["list"]]
But :
- autoriser uniquement la navigation à la racine
- empêcher le download global
3.4 ACL par dossier
[modifier | modifier le wikicode]/pleade
[modifier | modifier le wikicode]Permissions :
- list
- upload
- overwrite
- create_dirs
- rename
- rename_files
- rename_dirs
- delete
- delete_files
- delete_dirs
- copy
But :
- dépôt et gestion possibles
- download interdit par défaut
/projets
[modifier | modifier le wikicode]Permissions :
- list
- download
- upload
- overwrite
- create_dirs
- rename
- rename_files
- rename_dirs
- delete
- delete_files
- delete_dirs
- copy
But :
- répertoire d’échange complet
3.5 ACL fines par sous-répertoire
[modifier | modifier le wikicode]Exemple de logique retenue :
- /pleade/*/alto
- /pleade/*/cdc
- /pleade/*/csv
- /pleade/*/eac
- /pleade/*/ead
- /pleade/*/excell
- /pleade/*/mets
- /pleade/*/nc
- /pleade/*/pdf
- /pleade/*/unimarc
- /pleade/*/xml
But :
- autoriser le download uniquement pour certains types de dossiers
- éviter un download massif non souhaité sur d’autres répertoires comme les images
3.6 Fonctionnalités Web désactivées
[modifier | modifier le wikicode]Dans Web client / REST API :
- password-reset-disabled
- publickey-change-disabled
- tls-cert-change-disabled
- api-key-auth-change-disabled
- info-change-disabled
- shares-disabled
- shares-without-password-disabled
But :
- éviter les partages publics
- éviter les modifications avancées côté client
- garder une interface simple et contrôlée
3.7 2FA
[modifier | modifier le wikicode]Choix retenu :
- 2FA non activé par défaut
- activation au cas par cas selon le client et le mode d’accès
Remarque :
- FileZilla gratuit ne gère pas correctement le 2FA en SFTP
- le 2FA est donc surtout adapté au WebClient, ou à des clients compatibles
4. Vérifications utiles
[modifier | modifier le wikicode]4.1 Vérifier les utilisateurs
[modifier | modifier le wikicode]sqlite3 /var/lib/sftpgo/sftpgo.db select username,status from users;
4.2 Vérifier la structure SQL
[modifier | modifier le wikicode]sqlite3 /var/lib/sftpgo/sftpgo.db .schema users
4.3 Sauvegarde manuelle rapide de la base
[modifier | modifier le wikicode]cp /var/lib/sftpgo/sftpgo.db /var/lib/sftpgo/sftpgo.db.bak_$(date +%F_%H-%M)
4.4 Sauvegarde plus propre avec arrêt du service
[modifier | modifier le wikicode]systemctl stop sftpgo cp /var/lib/sftpgo/sftpgo.db /var/lib/sftpgo/sftpgo.db.bak_$(date +%F_%H-%M) systemctl start sftpgo
4.5 Dump SQL
[modifier | modifier le wikicode]sqlite3 /var/lib/sftpgo/sftpgo.db ".dump" > /root/sftpgo_dump_$(date +%F_%H-%M).sql
5. Uniformisation des utilisateurs
[modifier | modifier le wikicode]5.1 Principe
[modifier | modifier le wikicode]- prendre ad64 comme modèle
- appliquer les mêmes ACL aux autres utilisateurs
- ne pas modifier :
- le quota
- le nom d’utilisateur
- le mot de passe
- les virtual folders
5.2 Méthode retenue
[modifier | modifier le wikicode]- export JSON
- modification du JSON
- import avec mise à jour
5.3 Effet recherché
[modifier | modifier le wikicode]- tous les clients ont la même base de sécurité
- moins d’erreurs
- gestion plus simple
- future création de groupes facilitée
6. Sauvegardes automatiques
[modifier | modifier le wikicode]6.1 Script
[modifier | modifier le wikicode]Fichier :
/usr/local/sbin/backup_sftpgo.sh
Fonctions :
- backup quotidien de la base
- dump SQL quotidien
- rotation sur 7 jours
- copie hebdomadaire le dimanche
- backup manuel possible avant import JSON ou changement massif
6.2 Exécution manuelle
[modifier | modifier le wikicode]/usr/local/sbin/backup_sftpgo.sh daily
Backup manuel :
/usr/local/sbin/backup_sftpgo.sh manual
6.3 Cron
[modifier | modifier le wikicode]crontab -e
Exemple :
15 2 * * * /usr/local/sbin/backup_sftpgo.sh daily >> /var/log/backup_sftpgo.log 2>&1
6.4 Vérification
[modifier | modifier le wikicode]find /var/backups/sftpgo -maxdepth 2 -type f | sort
7. Rotation des logs
[modifier | modifier le wikicode]7.1 Fichier logrotate
[modifier | modifier le wikicode]Fichier :
/etc/logrotate.d/sftpgo-local
Contenu :
/var/log/backup_sftpgo.log
/var/log/sftpgo*.log
/var/log/fail2ban.log {
su root adm
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 root adm
sharedscripts
postrotate
systemctl reload rsyslog >/dev/null 2>&1 || true
endscript
}
7.2 Test
[modifier | modifier le wikicode]logrotate -d /etc/logrotate.d/sftpgo-local
Test forcé :
logrotate -f /etc/logrotate.d/sftpgo-local
8. Journal systemd
[modifier | modifier le wikicode]8.1 Vérification
[modifier | modifier le wikicode]journalctl --disk-usage
8.2 Réglage
[modifier | modifier le wikicode]Fichier :
/etc/systemd/journald.conf
Exemple :
SystemMaxUse=500M SystemMaxFileSize=50M MaxRetentionSec=30day
Puis :
systemctl restart systemd-journald
9. Bonnes pratiques
[modifier | modifier le wikicode]- toujours faire un backup avant import JSON
- ne pas modifier SQLite directement sauf nécessité
- tester d’abord sur un utilisateur modèle
- éviter les comptes partagés
- privilégier des utilisateurs nominatifs
- préparer ensuite des groupes pour industrialiser la configuration
10. Évolutions prévues
[modifier | modifier le wikicode]- création de groupes par client
- template de configuration standard
- éventuel script de provisioning
- différenciation entre comptes humains et comptes techniques
Réseau / sécurité
[modifier | modifier le wikicode]- Restreindre l’accès WebAdmin (port 9090) via UFW :
ufw allow from <IP> to any port 9090
- Ne jamais exposer WebAdmin publiquement
Pièges connus
[modifier | modifier le wikicode]- Bouton "Add folder" visible même si interdit → normal
- Message "invalid credentials" trompeur
- Droits '*' mal placés = fuite de périmètre
- Root writable = chaos assuré
Bonnes pratiques générales
[modifier | modifier le wikicode]- Toujours tester avec un utilisateur client réel
- Vérifier :
- création de fichiers - impossibilité de sortir du périmètre - quotas visibles
- Documenter chaque règle ajoutée