Autorisations Linux sur un montage distant

1

Sous Windows, lorsque je regarde les autorisations sur un dossier distant, les comptes sont qualifiés avec le nom de l'ordinateur ou le domaine, c'est-à-dire l'autorité pour le nom du compte.

Sous Linux, si j'ai une machine virtuelle avec un montage sur un lecteur distant et que le propriétaire d'un dossier sur le montage est 'root', s'agit-il alors de ma racine ou de la racine du système distant?

Tout cela semble trop simple sous Linux pour fonctionner dès qu’un réseau est impliqué. Je manque clairement quelque chose.

Luke

Luke Puplett
la source

Réponses:

1

C’est malheureusement l’un des aspects les plus déroutants du partage de fichiers sous Unix. Et je suis mauvais pour expliquer des choses confuses.

Ce que vous voyez dans la ls -lsortie (par exemple), est l'ID de l'utilisateur distant traduit du point de vue du système local.

Lorsque des programmes tels que celui-ci lsutilisent les fonctions standard pour rechercher des informations sur un fichier, le pilote du système de fichiers ne peut leur fournir que des ID utilisateur numériques, et non des noms textuels. (Jusqu'à présent, pas trop différent de Windows.) Pour traduire les UID en noms, lsappelez un composant de système d'exploitation entièrement différent, les bibliothèques de services de noms, qui ne savent pas d'où provient cet UID et ne peut donc traduire que les comptes Le système d'exploitation le sait, mais ne peut pas revenir en arrière et demander l'aide du pilote du système de fichiers. (C'est là que la différence entre.)

Par exemple, si le serveur a deux fichiers, l’un appartenant à root (UID 0), l’autre appartenant à Luke (UID 1000), lssaura seulement qu’ils appartiennent à "0" et "1000" et pour les comptes locaux qui ont les mêmes UID. "0" est toujours la racine, mais "1000" peut ou non être Luke. Si l'UID appartient à un compte stocké dans LDAP, NIS ou AD, et si le système d'exploitation client est réellement configuré pour rechercher des comptes d'utilisateur dans LDAP, le nom d'utilisateur correct sera fourni. Sinon, cela pourrait en fait mentir, car les UID des comptes locaux (1000, 1001, ...) ont tendance à correspondre à des personnes différentes sur des ordinateurs différents.

(Le pilote du système de fichiers peut indiquer le nom d'utilisateur complet aux programmes, sous la forme d '"attributs étendus". Malheureusement, malgré diverses tentatives, il n'existe pas de moyen standard de le faire, et des programmes tels que lsgénéralement tentent d'éviter les astuces spécifiques au système de fichiers. Encore plus malheureusement, tous les protocoles de système de fichiers réseau ne peuvent pas transférer les noms d’utilisateur: CIFS ou SMB peuvent, NFSv4 peut, la plupart des autres ne le peuvent pas.)

Mais rien de tout cela n’importe vraiment, car ce que vous pouvez faire avec le fichier est toujours déterminé par ce que le serveur sait, et non par ce que le client voit. Par exemple, si vous l'utilisez sshfs, il se connecte au serveur via SSH en utilisant votre nom d'utilisateur (par exemple sshfs luke@fileserver), et le serveur ne vous laissera pas faire quoi que ce soit que vous n'êtes pas censé faire. La même chose avec CIFS, AFS, etc.

Grawity
la source
Donc, il pourrait montrer un propriétaire complètement faux si l'UID du propriétaire réel correspond à un UID que j'ai localement? Sérieusement? En l'absence de données stockées pour «l'autorité émettrice» de l'UID, comment le serveur différencie-t-il deux comptes d'utilisateur locaux avec le même UID?
Luke Puplett
@ LukePuplett: Oui, ce serait le cas. Si le serveur dit « ce fichier est la propriété UID 1000 », le client montrera ce que le client sait que par UID. Et, encore une fois, le serveur n'a pas à se différencier. Avec CIFS, SSHFS ou AFS, le serveur ne se soucie pas des UID du client, simplement parce que le client pourrait mentir . Le serveur ne s'intéresse qu'aux informations d'identification sécurisées telles que le mot de passe ou le ticket Kerberos que vous présentez. (Idem avec Windows. L’accès aux fichiers réseau sous Windows utilise Kerberos ou NTLM avec votre nom d’utilisateur et votre mot de passe; il n’utilise pas de SID, avec le préfixe 'autorité' ou sans.)
grawity
@ LukePuplett: Bien sûr, il y a des exceptions. NFS n'a pas d'authentification "mot de passe"; Si vous ne pouvez pas utiliser Kerberos, il ne reste que la méthode auth-par-UID (le client dit "L'UID 1000 tente d'accéder à ce fichier" et le serveur le croit). Dans cette situation, lorsqu'il existe un risque d'incompatibilité entre les UID ou que le client puisse usurper l'identité des UID, le seul choix est de ne pas utiliser NFS en premier lieu. Mais encore une fois, c'est une exception. D'autres protocoles (comme CIFS ou NFS avec Kerberos) ne se soucient pas du tout des UID locaux.
grawity
@LukePuplett: N'oubliez pas non plus qu'il est impossible de faire confiance à "l'autorité émettrice". Imaginez une image Windows clonée sur une douzaine d'ordinateurs et vendue à différents clients. Maintenant, vous avez tous des comptes différents avec le même SID, y compris la partie autorité. Et voici que Microsoft dit que ça n'a pas d'importance. Par conséquent, le manque d'autorité dans les UID Unix n'a pas d'importance non plus.
grawity
Merci pour l'info. FWIW Windows utilise uniquement les SID, le nom d'utilisateur et le mot de passe prouvant que le titulaire du compte est autorisé lors de la connexion. Le nom d'utilisateur n'est pas stocké dans les ACE, voir technet.microsoft.com/en-us/library/cc961995.aspx Prenez deux PC Windows clonés, ayant le même SID d'ordinateur. À partir de PC1, accordez des autorisations d'administrateur pour un fichier via USB, puis placez-le dans PC2 et son administrateur obtiendra l'accès car le SID est identique. Je ne comprends pas du tout Linux / Unix, mais l'absence d'un élément autorité ressemble à un dessin étrange.
Luke Puplett
0

Le propriétaire est l'utilisateur root sur la machine distante. Si vous souhaitez y accéder en tant que root sur la machine distante, vous devez le monter en tant que root sur la machine distante.

En d'autres termes, cela devrait fonctionner (utilisateur local aye, utilisateur distant):

aye@ayes-machine$ sshfs root@bees-machine:/path /local-path

Cela ne fonctionnera pas (utilisateur local root, utilisateur distant):

aye@ayes-machine$ sudo sshfs bee@bees-machine:/path /local-path
l0b0
la source