79 votes

Comment définir correctement les autorisations pour le dossier NFS? Autorisation refusée côté montage.

Je suis en train d'essayer de me connecter à un dossier NFS sur mon serveur de développement. Le propriétaire du dossier sur le serveur de développement est darren et le groupe darren.

Quand je l'exporte et le monte sur mon Mac en utilisant l'Utilitaire de disque, il se monte, mais quand j'essaie d'ouvrir le dossier, il dit que je n'ai pas les autorisations. J'ai défini rw, sync et no_subtree_check. L'utilisateur sur le Mac est darren avec plusieurs groupes.

Est-ce que j'ai besoin d'avoir le même groupe et utilisateur défini pour accéder au dossier?

101voto

Kasper Holdum Points 4173

NFS est construit sur l'authentification RPC. Avec la version 3 de NFS, le mécanisme d'authentification le plus courant est AUTH_UNIX. L'identifiant utilisateur et l'identifiant de groupe du système client sont envoyés dans chaque appel RPC, et les autorisations de ces ID sur le fichier en cours d'accès sont vérifiées sur le serveur. Pour que cela fonctionne, les UID et GID doivent être les mêmes sur le serveur et les clients. Cependant, vous pouvez forcer tout l'accès à se produire en tant qu'utilisateur et groupe unique en combinant les options d'exportation all_squash, anonuid et anongid. all_squash va mapper tous les UIDs et GIDs à l'utilisateur anonyme, et anonuid et anongid définissent l'UID et le GID de l'utilisateur anonyme. Par exemple, si votre UID et GID sur votre serveur de développement sont tous les deux 1001, vous pourriez exporter votre répertoire personnel avec une ligne comme

/home/darren 192.168.1.1/24(rw,all_squash,anonuid=1001,anongid=1001)

Je ne suis pas très familier avec la version 4 de NFS, mais je pense que vous pouvez configurer rpc.idmapd sur les clients pour modifier l'UID et le GID qu'ils envoient au serveur.

11 votes

J'ai rencontré cette réponse en essayant de résoudre un problème nfs sous Apple OS X Yosemite. Cette réponse est beaucoup plus pertinente et précise que la réponse acceptée. Il n'est pas recommandé ni faisable de faire correspondre l'UID/GID entre les systèmes. Un utilisateur root sur le système A n'est probablement pas un utilisateur root sur le système B.

0 votes

Solution de travail pour Ubuntu 20.04 + macOS Big Sur

0 votes

Cela m'a aidé lorsque j'avais des problèmes avec fusermount -u ne fonctionnant pas pour démonter une partage NFS que j'avais récemment ajouté root_squash. C'est une solution plus élégante pour écraser toutes les demandes à un certain UID/GID et maintenant je peux utiliser fusermount pour le démonter! Merci.

31voto

Andrew M. Points 10852

Lorsque vous montez NFS, les autorisations avec lesquelles vous le montez doivent correspondre à ce que vous avez sur le serveur. Par exemple, si votre utilisateur n'a qu'un accès en lecture seule, le monter en lecture-écriture vous causera les mêmes erreurs que celles que vous avez mentionnées dans votre message lorsque vous essayez de charger réellement le montage. Malheureusement, cela apparaîtra UNIQUEMENT lorsque vous accédez au dossier, pas lorsque vous le montez.

Vous voulez également vous assurer que l'utilisateur sous lequel NFS s'exécute sur le serveur et l'utilisateur sur le client utilisent le même UID et GID. Vous pouvez vérifier ces valeurs en exécutant id darren à la fois sur le serveur et sur le client. Si les valeurs UID et GID ne correspondent pas, vous pouvez modifier /etc/passwd pour les faire correspondre, mais assurez-vous de bien comprendre ce que vous faites avant de changer arbitrairement les valeurs!

Quelques bonnes sources:

J'espère que cela vous aidera!

0 votes

Oui, je n'aurais pas dû essayer de changer l'UID, je dois maintenant refaire mon serveur. Comment imiter l'UID et le GID? Est-ce vraiment aussi compliqué?

0 votes

Malheureusement, dans mon expérience d'utilisation de cela sur le lieu de travail, NFS est extrêmement fragile, et oui - cela peut être aussi compliqué. En général, vous voudrez un utilisateur NFS dédié avec un UID/GID spécifique sur chaque serveur/client afin de ne pas rencontrer ce problème. Si vous avez le choix dans votre environnement de développement (c'est-à-dire, vous n'ÊTES PAS obligé d'utiliser NFS), envisagez d'utiliser quelque chose comme SSHFS pour vous débarrasser des maux de tête en développement - mais cela ne reproduira pas la même fonctionnalité qu'un serveur de production utilisant NFS.

0 votes

Pensez-vous que Samba est une autre solution? Je l'ai utilisé avec Windows sans problème et je pense que c'est la voie que je vais devoir suivre même si j'utilise un Mac pour développer mon application.

4voto

JOTN Points 1727

Est-ce que vos UIDs et GIDs correspondent sur les deux serveurs? C'est ce qu'il utilise pour contrôler l'accès et non le nom de connexion et le nom du groupe.

0voto

Roelof Points 101

Exemple sur la façon de monter un partage NFS sur Ubuntu Eoan en tant que serveur et MacOS Catalina en tant que client.

Hypothèses de l'exemple (vous devez adapter ceci) :

Nom du PC client : Bills-MBP

(Appuyez sur Cmd+Espace, lancez 'terminal', quelque chose comme bill@Bills-MBP: est écrit comme invite. Utilisez ce qui est écrit entre le @ et le : comme nom du PC client ci-dessous).

Nom d'utilisateur dans Ubuntu : tux

(Appuyez sur la touche pingouin de votre clavier, si vous n'en avez pas, commandez un autocollant de clavier pingouin et placez-le sur la touche moche avec quatre carrés mal formés près de la barre d'espace. Entrez "terminal", démarrez le terminal, le nom d'utilisateur sera affiché avant le signe @ dans l'invite. Par exemple "tux@dustycray:")

Nom du PC d'Ubuntu : dustycray

(Peut être trouvé comme indiqué ci-dessus.)

Dossier sur Ubuntu à partager : /home/tux/mp3

Utilisez le dossier dont vous avez besoin à partager en tant que chemin absolu

Sur le serveur NFS (Ubuntu EOAN dans mon cas) entrez dans le terminal (que nous avons ouvert comme indiqué ci-dessus) :

id -u tux
# rappelez-vous le numéro, utilisez-le ci-dessous comme anonuid (remplacez le 1000 là)
id -g tux
# rappelez-vous le numéro, utilisez-le ci-dessous comme anongid (remplacez le 1001 là)
sudo nano /etc/exports
# À la fin du fichier, ajoutez la ligne suivante, remplacez le nom du chemin, le nom du PC client et les deux numéros par vos valeurs :
/home/tux/mp3 Bills-MBP(rw,sync,insecure,all_squash,anonuid=1000,anongid=1001)
# quittez avec ctrl+x et confirmez l'enregistrement du fichier
sudo exportfs -ra

Maintenant sur le Mac, ouvrez un terminal comme indiqué ci-dessus et entrez (laissez /private/nfs tel quel) :

sudo make /private/nfs
# Remplacez le nom du PC ubuntu (dustycray) et le chemin (home ...) par les vôtres maintenant :
sudo mount -t nfs -o resvport,rw dustycray:/home/tux/mp3 /private/nfs

Ensuite, le NFS peut être accédé dans le chemin /private/nfs. Dans le Finder, vous verrez une nouvelle entrée appelée (par exemple) "dustycray" à gauche dans la section "emplacements", également dans les boîtes de dialogue de sélection de fichiers.

La procédure de montage ci-dessus n'est pas permanente, j'utilise un script pour le monter chaque fois que j'en ai besoin. Cependant, vous pouvez également rendre le montage permanent si vous le souhaitez (par exemple Préférences système / Utilisateurs et groupes / Éléments d'ouverture de session / + / Sélectionnez n'importe quel dossier principal dans (!) le partage NFS / Ajouter).

-4voto

Vanuan Points 147

Pour moi, le problème a été résolu en fournissant l'option de montage _netdev sur le client.

Autrement dit, ajoutez ceci à /etc/fstab:

nfs-server:/   /mnt   nfs4    _netdev,auto  0  0

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X