blog:netatalk

Netatalk : installation sur NetBSD

Netatalk fournit une implémentation du protocole AFP (Apple Filing Protocol) 3.3 (Documentation Netatalk). Depuis Mac OS X 10.5, on peut utiliser un volume AFP pour Time Machine.

Compiler le paquet net/netatalk (j'utilise http://www.pkgsrc.org) avec l'option pam ; l'option slp (http://www.openslp.org/) n'est plus franchement utile, Mac OS X utilise maintenant Bonjour (net/avahi) plutôt que SLP (net/openslp).

Activer les daemons afpd(8) et cnid_metad(8) (seuls requis pour AFP sur TCP). Le daemon cnid_metad(8) se charge de la gestion des CNID : les Catalog Node ID : le protocole AFP identifie les fichiers et répertoires par des identifiants (et non pas par leur chemin). Voir la documentation sur le site d'Apple.

Netatalk a donc besoin de faire correspondre chemins et identifiants ; pour cela il utilise des bases de données (dont le backend est spécifié via l'option cnidscheme dans le fichier AppleVolumes.default). Parmi les backends possibles, choisir DBD (une base Berkeley DB) pour la robustesse ou CDB pour des accès concurrents. On peut indiquer où seront stockées les bases via dbpath:, par exemple dbpath:/var/db/netatalk (ici dans /var/db/netatalk/.AppleDB).

Éviter de toucher aux fichiers et répertoires autrement que via le daemon afpd(8). Pour les modifications à la main, utiliser les commandes apple_cp(1), apple_mv(1), apple_rm(1) et leurs amies.
Penser à sauvegarder ces bases ; utiliser la commande dbd(1) pour manipuler ces bases.

AFP sur TCP utilise le port TCP 548 ; il faut donc ajouter la ou les règles de filtrage kivonbien pour laisser entrer les connexions vers ce port local. Avec pf(4) ça donne quelque chose comme :

pass in log quick on re0 proto tcp from 192.168.1.0/24 \
          to 192.168.1.254/32 port = 548 flags S/SA keep state

(adapter le nom de l'interface et les adresses).

Le partage de fichiers se configure via les fichiers afpd.conf et AppleVolumes.* (situés dans /usr/pkg/etc/netatalk), le lancement des daemons se configure dans /etc/rc.conf sur un système BSD moderne utilisant rcNG ; ignorer le fichier netatalk.conf (héritage de la version 1 de Netatalk ou utile pour les scripts d'initialisation SystemV ? En tous cas, les scripts rc(8) ne l'utilisent pas).

Spécifier que cnid_metad(8) écoute sur le port 4700 sur 127.0.0.1 ⇒ dans /etc/rc.conf on a alors :

cnid_metad=YES   cnid_metad_flags="-p 4700 -h 127.0.0.1 -s /usr/pkg/libexec/netatalk/cnid_dbd"

Pour le daemon afpd(8), indiquer dans /etc/rc.conf :

afpd=YES         afpd_flags="-T -U uams_dhx.so,uams_dhx2.so,uams_pam.so"

Ici, le daemon utilise TCP et les UAMs (User Authentication Module) spécifiés.

On passe aux fichiers dans /usr/pkg/etc/netatalk. Dans afpd.conf, on commence avec :

- -tcp -noddp -nosavepassword -setuplog "default log_maxdebug" \
                              -setuplog "AFPDaemon log_maxdebug" \
                              -setuplog "UAMSDaemon log_maxdebug" \
                              -setuplog "Logger log_maxdebug" \
                              -ipaddr 192.168.1.254

Les options -setulog “xxx log_maxdebug” peuvent être ôtées dès qu'on a fini de tester.

Lorsque les options indiquées via /etc/rc.conf et dans afpd.conf sont contradictoires, celles dans ce dernier fichier sont prises en compte. FIXME : source ?

Dans AppleVolumes.default, on commence avec :

:DEFAULT: options:upriv,usedots,allowed_hosts=192.168.1.0/24

On configure ensuite trois volumes dans ce même fichier AppleVolumes.default :

/users/kabs/TM "Time Machine kabs" allow:kabs rwlist:kabs rolist:foo cnidscheme:dbd options:tm
/users/foo/TM "Time Machine foo" allow:foo rwlist:foo rolist:kabs cnidscheme:dbd options:tm
/users/exports/afp "Data" allow:kabs,foo rwlist:kabs,foo cnidscheme:cdb

L'option tm marque un volume Time Machine. Les options allow:, rolist: et rwlist: sont triviales. On a alors deux volumes pour les sauvegardes de deux utilisateurs kabs et foo (chacun pouvant accéder en lecteur seule à la sauvegarde de l'autre) et un dernier volume, partagé entre les deux.

cdb est le schéma CNID par défaut dans le fichier fournit. Par contre, le support de CDB (Concurrent Database) n'est pas inclus dans le binaire compilé via pkgsrc ⇒ passer à DBD (Berkeley DB). Pour utiliser CDB, ajouter :
CONFIGURE_ARGS+=         --with-cnid-cdb-backend

dans /usr/pkgsrc/net/netatalk/Makefile. En relançant les deux daemons, on voit dans le journal :

Registering CNID module [cdb]

Sur un volume partagé :

  • les utilisateurs autorisés sont dans un même groupe Unix ;
  • le répertoire est propriété de ce groupe ;
  • les droits sont rwx pour le groupe avec un setgid bit (2770 par exemple ie. drwxrws---).

Pour utiliser l'authentification modulaire PAM, copier /usr/pkg/share/examples/netatalk/netatalk.pam dans /etc/pam.d/netatalk ; dans les sources, dans etc/uams/uams_pam.c, les appels à pam_start(3) utilisent la chaîne netatalk et non pas le nom du daemon (afpd)).

On peut, au lieu d'utiliser PAM, définir des mots de passe. Utiliser la commande afppasswd(1) pour créer pour gérer les mots de passe des utilisateurs dans un fichier /usr/pkg/etc/netatalk/afppasswd. Indiquer alors -passwdfile:/usr/pkg/etc/netatalk/afppasswd. Ce fichier a pour format :

kabs:****************:****************:********
foo:****************:****************:********

Le second champ est le mot de passe chiffré (FIXME : avec quel algorithme ?) ; FIXME : signification des deux derniers champs ? Le créer (-c -p path) avec :

$ sudo afppasswd -u 100 -c -p /usr/pkg/etc/netatalk/afppasswd

puis supprimer les utilisateurs indésirables (l'option -u 100 prend tous ceux d'UID ≥ 100). Pour changer le mot de passer de kabs :

$ sudo afppasswd -a -p /usr/pkg/etc/netatalk/afppasswd kabs

La commande afppasswd(1) refuse d'ajouter un utilisateur qui n'existe pas sur le système.

Comme on n'a pas indiqué de chemin pour les bases de données, elles seront à la racine de chacun des trois répertoires ie. dans /users/kabs/TM/.AppleDB, etc.

Pour vérifier un serveur, utiliser le script asip-status.pl :

$ asip-status.pl 192.168.1.254
AFP reply from 192.168.1.254:548
Flags: 1  Cmd: 3  ID: 57005
Reply: DSIGetStatus
Request ID: 57005
Machine type: Netatalk
AFP versions: AFP2.2,AFPX03,AFP3.1,AFP3.2
UAMs: Cleartxt Passwrd,DHX2,DHCAST128
Flags: SupportsCopyFile,DontAllowSavePwd,SupportsServerMessages,SupportsServerSignature,SupportsTCP/IP,SupportsSrvrNotifications,SupportsOpenDirectory,SupportsUTF8Servername,SupportsSuperClient
Server name: mini-server
Signature:
a1 c3 06 90 1e d0 a4 3b 68 a2 26 db 6f ae a5 44  .......;h.&.o..D
                                                  
Network address: 192.168.1.254 (TCP/IP address)
UTF8 Servername: mini-server

:!: S'assurer que le fichier afp_signature.conf dans /usr/pkg/etc/netatalk a bien les droits 0600 et est propriété de root:wheel.

Dans cette configuration, on n'utilise ni OpenSLP ni Avahi.

Je préciserai ultérieurement cet article dans d'autres billets.

  • blog/netatalk.txt
  • Dernière modification : 2011/09/06 06:35
  • de pc