Puis-je porter des autorisations utilisateur sur des ordinateurs pour un disque dur externe ext4?

16

J'ai un lecteur de disque USB 3 externe (capacité de 2 To) qui va très probablement être déplacé d'une machine à l'autre. Le disque a une table de partition GUID et une partition ext4. Je ne parviens pas à écrire sur le disque sauf si j'élève le processus ( sudo).

À partir de maintenant, je songe à essayer l'un des éléments suivants ou les deux et j'aimerais connaître les inconvénients de chacun -

  1. chmod 777 /mnt/externalDrive
  2. chown nobody:nogroup /mnt/externalDrive

Si je donne l'autorisation 777 et que user1 (UID: 1005) y écrit et que je déplace ensuite le disque vers un autre ordinateur où user7 est UID: 1005, que se passe-t-il? L'utilisateur 7 devient-il le propriétaire du fichier sur cet ordinateur? Il me semble que je devrai périodiquement exécuter chown -R nobody:nogroup /mnt/externalDrivesur le disque.

Est-ce que ce que je considère comme une mauvaise pratique évidente? Le disque contiendra très probablement des vidéos, de la musique et des images, aucune d'entre elles n'a besoin d'être protégée comme certaines données financières.

Lord Loh.
la source
Je ne sais pas si je te suis. Avez-vous essayé de définir les autorisations sur le disque externe?
Ramesh
1
Oui. Est-ce une bonne chose?
Lord Loh.

Réponses:

19

C'est le problème avec les systèmes multi-utilisateurs, surtout si vous en avez plusieurs. ;) Il n'y a pas vraiment de façon sympa de faire ce que vous voulez. Les approches qui me viennent à l’esprit seraient

  • avoir le même UID pour votre compte sur chaque machine que vous utilisez votre lecteur externe (en fait, ce n'est pas possible, car toutes les machines ne sont probablement pas sous votre contrôle)
  • en utilisant un système de fichiers ignorant la conception du propriétaire / groupe (FAT ou NTFS me vient à l'esprit, mais… aaah, non)

L'approche la plus efficace serait de revenir aux pratiques courantes. Sur la plupart (au moins) des systèmes Linux, il existe certains groupes qui ont généralement des GID communs. Par exemple serait users, qui a GID 100sur la plupart des distributions Linux. Si vous pouviez réussir à avoir votre compte d'utilisateur respectif dans ce groupe, vous pourriez

  1. faire en sorte que tous les fichiers et répertoires de votre disque appartiennent à ce groupe
  2. parviennent en quelque sorte à avoir les autorisations de groupe appropriées sur ces fichiers et répertoires
  3. parviennent en quelque sorte à avoir de nouveaux fichiers créés avec la propriété de groupe appropriée resp. autorisations.

Le premier et le deuxième point sont faciles à réaliser ( chown, chmod). Le troisième point est un peu plus délicat.

La partie "appartenance à un groupe" est relativement simple: vous pouvez définir le bit SGID sur tous les répertoires du lecteur. Le bit SGID appliqué aux répertoires indique au noyau de se comporter de manière BSDish: BSD fait que chaque fichier / répertoire créé sous un groupe de répertoires spécifique n'appartient pas au groupe principal du processus créant le fichier / répertoire (comme le fait Linux), mais par le propriétaire du répertoire parent.

Le bit d'autorisation est un peu difficile. Les autorisations des fichiers / répertoires nouvellement créés sont (entre autres) influencées par le umask, un masque de bits indiquant quels bits ne pas définir s'il n'est pas explicitement indiqué. Par umaskexemple 022, une valeur courante signifie que les bits d'écriture pour »groupe« et »autres« ne doivent généralement pas être définis. Vous pouvez changer votre umasken 002disant que vous ne voulez pas que les autorisations d'écriture soient effacées pour le groupe, mais l'inconvénient est que vous ne pouvez pas définir cette valeur en fonction du répertoire et que vous ne voulez généralement pas avoir d'autorisations d'écriture pour votre groupe principal défini pour chaque fichier que vous créez.

Cela pourrait être résolu en utilisant les ACLs: Dans une ACL vous pouvez définir un masket un defaultjeu d'autorisations qui applique à tous les fichiers et répertoires créés dans un répertoire avec cet ensemble ACL. Une solution possible à votre problème serait donc

  • en vous assurant que vous êtes membre d'un groupe commun sur tous les systèmes sur lesquels vous souhaitez utiliser votre disque dur externe
  • tous les fichiers et répertoires de votre lecteur appartiennent à ce groupe et définissent le bit SGID sur tous les répertoires
  • modifiez l'ACL de tous les répertoires pour inclure un masque et des autorisations par défaut qui indiquent au noyau de créer chaque nouveau fichier / répertoire avec des autorisations d'écriture définies pour le groupe.

Voir setfacl(1)et acl(5)pour plus de détails.

Andreas Wiese
la source
1
Il y avait un patch flottant pour lui et le mappage gid dans ext4, spinics.net/lists/linux-fsdevel/msg57240.html , mais je ne pense pas qu'il soit parvenu ...
Rmano
11

Il y a une autre question similaire et bindfs y est suggéré:

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1

Les utilisateurs d'OSX suggèrent noowners option de montage décrite comme ceci:

Ignorez le champ de propriété pour tout le volume. Tous les objets apparaissent comme appartenant à l'ID utilisateur 99 et à l'ID de groupe 99. L'ID utilisateur 99 est interprété comme l'ID utilisateur effectif actuel, tandis que l'ID de groupe 99 est utilisé directement et se traduit par `` inconnu ''.

Michael Shigorin
la source
bindfs est assez lent. Probablement parce que c'est un système de fichiers FUSE.
Navin
4

Le propriétaire et le groupe d'un fichier sont stockés sous forme de nombres. Ainsi, le fichier appartiendra à uid = 1005, quel que soit l'utilisateur (ou aucun utilisateur) sur le système auquel il est connecté.

Changer l'utilisateur / groupe en personne ne résoudra pas votre problème. Ensuite, seul l'utilisateur nobody (ou les membres du groupe nobody) seraient autorisés à accéder aux fichiers.

Malheureusement, je ne pense pas qu'il existe un moyen de désactiver les vérifications d'autorisation sur ext4. Voir, par exemple, Est-il possible de désactiver les autorisations de fichiers sur un système de fichiers ext3 ou ext4?

derobert
la source
2

Andreas Wiese dit que si vous avez un identifiant de groupe commun sur tous les hôtes, vous pouvez résoudre votre problème avec setgidbit et ACL

Je pose la question ID de groupe prédéfinis dans les distributions Linux?

Après ses propres recherches, il a été constaté qu'un tel groupe existe dans toutes les distributions touchées: sysid de partage de groupe3 sur Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, FreeBSD, OpenBSD, NetBSD, MacOSX, Solaris.

Avec ça:

$ sudo chgrp -R sys /mnt/data/dir
$ sudo chmod -R g+s /mnt/data/dir
$ sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir

et la saveur de cela:

$ sudo adduser user sys

vous userpouvez lire / écrire n'importe quel fichier /dir.

La plupart des travaux peuvent faire un setgidpeu mais malheureusement, vous avez généralement peu de contrôle surumask . L'ACL est donc utilisé pour fournir une solution complète.

Voir également:

gavenkoa
la source