go-fileshare
Une image disque — ou un répertoire — servie en SMB, NFS, WebDAV, SFTP et S3 :
les mêmes utilisateurs, le même accès par partage, depuis un seul fichier de configuration. Pur
Go, CGO_ENABLED=0, un seul binaire. Ces pages décrivent la
v0.29.1.
go install github.com/go-fileshare/fileshare@latest
fileshare --image disk.img --user alice --password-file pw # one image, now
fileshare --config /etc/fileshare.d # several, with usersLe mot de passe vient d’un fichier, jamais d’une option : un argument est visible dans la liste des processus par tous les utilisateurs de la machine.
Pourquoi un seul programme
Le protocole qui transporte une image dépend du client à l’autre bout :
macOS et Windows se tournent vers SMB, un parc Linux a déjà NFS, un navigateur ou un
téléphone a HTTP. Faire tourner trois serveurs, chacun avec son propre fichier de configuration
et sa propre idée de qui est alice, c’est s’exposer à ce que deux d’entre eux se trompent subtilement.
Il y a donc une seule configuration, un seul ensemble d’utilisateurs, un seul ensemble de règles par partage — et les protocoles sont des écouteurs posés dessus.
Ce qu’il affiche au démarrage
smb on 0.0.0.0:445 — photos and scratch
webdav on 0.0.0.0:8080 — photos and scratch
sftp on 0.0.0.0:2222 — photos and scratch
nfs on 0.0.0.0:2049 — scratch
photos is not served over nfs: it is restricted to alice and bob, and
NFSv3 on its own has no authentication: AUTH_UNIX is a claim the client
makes about itself and the wire cannot disagree with it. A kerberos
block lifts this: sec=krb5 carries a principal a ticket proves; so
does identity = "certificate" on the nfs serve block: RPC-over-TLS
with a client certificate naming the personCe dernier paragraphe donne la forme de tout le programme : une règle que la configuration demande et un protocole qui ne peut pas l’honorer ne se rejoignent pas discrètement à mi-chemin. Voir Ce qu’un protocole peut promettre.
Pour aller plus loin
| La configuration | utilisateurs, groupes, partages, blocs serve |
| Partages : images, périphériques, répertoires | ce qui est détecté, ce qui doit être déclaré |
| Utilisateurs, groupes et annuaires | fichiers, SQL, LDAP, et ce que chacun peut prouver |
check | relire toute la configuration avant de redémarrer |
| Protocoles | ce que chacun peut et ne peut pas promettre |
| L’API d’administration | des partages créés, accordés et mis hors ligne sans redémarrage |
| Volumes | jeux de données ZFS, sous-volumes btrfs et quotas de projet XFS/ext4, créés par l’API et servis |
| Santé et métriques | /healthz, /readyz, /metrics |
| Relire l’annuaire | reload, SIGHUP, et ce qu’une suppression fait aux sessions ouvertes |
| TLS | fichiers ou ACME ; et pourquoi WebDAV est refusé en clair |
| Ce qui révoque quoi | KRL, CRL, signaux partagés — et pourquoi chacun refuse en cas de doute |
| Ne compiler que ce que l’on veut | une étiquette laisse un protocole entièrement de côté |
| Un processus par protocole | --isolate |
| État | ce qui est vérifié, et ce qui n’est pas encore là |
Licence
BSD-3-Clause.
Créée le par tannevaled
Modifiée le par tannevaled