Outils pour utilisateurs

Outils du site


NFS

Installation de nfs-kernel-server.

Installation

anciennes_notes

N'a pas été testé l'implémentation de NFS en «userland», c'est à dire sans la complicité du module kernel pour fonctionner. Voir NFS Ganesha, a priori déconseillé vu que c'est moins clean/performant.

Serveur NFS sur conteneur non-privilégié

Le serveur NFS requiert un conteneur LXC privilégié, d'après :

Après moultes détours pour s'assurer que le profil AppArmor était bien appliqué au conteneur, je me rend compte que ce n'est pas AppArmor qui empêche l'exécution du serveur NFS.

Ceci est la commande exécutée par l'Unit SystemD correspondante :

root@mplnfs:~# /bin/mount sunrpc /run/rpc_pipefs -t rpc_pipefs
mount: permission denied
root@mplnfs:~# echo $?
32

Si on a bien réglé le profil Apparmor (en unconfined pour tester, ou avec les bons mounts dans un profil adapté), on constate que rien n'apparaît dans dmesg au sujet d'apparmor, preuve que ce n'est pas celui-ci qui bloque.

Serveur NFS sur conteneur privilégié

Profil AppArmor

Voir : https://forum.proxmox.com/threads/is-it-possible-to-run-a-nfs-server-within-a-lxc.24403/#post-150149

/etc/apparmor.d/lxc/lxc-default-with-nfsd
# Do not load this file.  Rather, load /etc/apparmor.d/lxc-containers, which
# will source all profiles under /etc/apparmor.d/lxc
 
profile lxc-container-default-with-nfsd flags=(attach_disconnected,mediate_deleted) {
  #include <abstractions/lxc/container-base>
 
  # the container may never be allowed to mount devpts.  If it does, it
  # will remount the host's devpts.  We could allow it to do it with
  # the newinstance option (but, right now, we don't).
  deny mount fstype=devpts,
  mount fstype=nfsd,
  mount fstype=rpc_pipefs,
  mount fstype=cgroup -> /sys/fs/cgroup/**,
}

Puis demander à AppArmor de recharger sa config (service apparmor reload ça devrait le faire).

Configuration du conteneur LXC sur l'hôte Proxmox

Dans /etc/pve/lxc/CT-ID.conf

...
lxc.apparmor.profile = lxc-container-default-with-nfsd

Indiquer aussi le point de montage de la partition chiffrée.

Client NFS sur conteneur non-privilégié

Idem sur les systèmes «guests», il faut un profil AppArmor autorisant le mount de NFS, que je n'ai pour le moment pas réussi à mettre en place avec un conteneur LXC non privilégié.

Abandon ?

Au final, cela m'amène à court-circuiter NFS et faire un bind mount. Sauf qu'alors se pose le problème des uid/gid au sein du conteneur, où il ne semble pas y avoir de bonne solution, mais des façons de contourner le problème. Une bonne synthèse ici : https://www.reddit.com/r/homelab/comments/4h0erv/resolving_permissions_issues_with_host_bind/

Configuration

Accès aux partages NFS

NFS par internet, on ne va pas le faire (on pourrait l'encapsuler dans un tunnel SSH, mais on pourrait aussi bien utiliser sshfs), mais j'aimerais bien tester que ça fonctionne.

Voir sur quels ports NFS tourne :

root@mplnfs:~# rpcinfo -p | grep nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100003    3   udp   2049  nfs

Depuis mon PC

mount -t nfs mplnfs:/mnt/mpl_data /mnt/tmp -o rsize=8192,wsize=8192

Depuis des conteneurs non privilégiés

root@mplmutt:~# mount -t nfs mplnfs:/mnt/mpl_data /mnt/tmp -o rsize=8192,wsize=8192
mount.nfs: Operation not permitted

Côté mplnfs, dans syslog :

Dec 21 21:48:29 mplnfs rpc.mountd[139]: authenticated mount request from 192.168.1.104:934 for /mnt/mpl_data (/mnt/mpl_data)

Ajouter vers=3 ou nfsvers=3 dans les options de montage ne résoud rien.

En verbose :

root@mplmutt:~# mount -vt nfs mplnfs:/mnt/mpl_data /mnt/tmp -o rsize=8192,wsize=8192
mount.nfs: timeout set for Thu Dec 21 21:53:51 2017
mount.nfs: trying text-based options 'rsize=8192,wsize=8192,vers=4.2,addr=192.168.1.100,clientaddr=192.168.1.104'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'rsize=8192,wsize=8192,addr=192.168.1.100'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 192.168.1.100 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 192.168.1.100 prog 100005 vers 3 prot UDP port 46895
mount.nfs: mount(2): Operation not permitted
mount.nfs: Operation not permitted

Rien au sujet de Apparmor donc.

Montage NFS au sein de conteneurs non-privilégiés ? Répondu en 2015 ici, ce n'est pas possible : https://github.com/lxc/lxd/issues/1047

Depuis des conteneurs privilégiés

Pas réessayé, je crois que ça fonctionne, mais ça ne m'intéresse pas. Goodbye NFS, faisons autrement !

article/linux/mplx/nfs.txt · Dernière modification: 2017/12/22 00:49 par fab