Montage d'un système de fichiers avec un jeu d'ID utilisateur spécial

19

Je veux monter l'appareil /dev/sda3dans le répertoire /foo/bar/baz. Après le montage, le répertoire devrait avoir l'uid de l'utilisateur johndoe. J'ai donc fait:

sudo -u johndoe mkdir /foo/bar/baz
stat -c %U /foo/bar/baz
johndoe

et ajouté la ligne suivante à mon /etc/fstab:

/dev/sda3 /foo/bar/baz ext4 noexec,noatime,auto,owner,nodev,nosuid,user 0 1

Quand je le fais maintenant, sudo -u johndoe mount /dev/sda3la commande stat -c %U /foo/bar/bazdonne rootplutôt que johndoe. Quelle est la meilleure façon de monter ce système de fichiers ext4 avec uid johndoeset?

qbi
la source

Réponses:

20

Il n'est pas possible de forcer un propriétaire sur un disque avec un système de fichiers ext4. Seuls les systèmes de fichiers qui ne prennent pas en charge les autorisations Linux comme fat ont un attribut de propriété / groupe: uid=valueet gid=value. Voir la page de manuel sur le montage .

Vous devez changer le propriétaire du système de fichiers monté comme dans:

sudo chown johndoe /foo/bar/baz

Si vous devez modifier les autorisations de manière récursive:

sudo chown -R johndoe /foo/bar/baz

... et si le groupe doit également être changé johndoe:

sudo chown -R johndoe: /foo/bar/baz
Lekensteyn
la source
2
Changer de propriétaire récursivement est généralement une mauvaise idée si vous pouvez l'aider. Une fois que vous avez éliminé la propriété "correcte", il n'y a pratiquement aucun moyen facile de la récupérer. IMO bindfs est la bonne façon de gérer cela (voir ma réponse).
Catskul
3
bindfs ressemble à une autre couche de complexité. Ma réponse convient mieux à un disque dur externe (pour la sauvegarde) qui a été utilisé dans une installation précédente avec un ID utilisateur différent. Il ne doit pas être utilisé dans des situations où plusieurs ID utilisateur doivent être conservés (système de fichiers racine), mais dans ce cas, bindfs with -une doit pas non plus être utilisé car il contourne les restrictions d'accès des différents ID utilisateur. --mapdoit être utilisé si vous souhaitez conserver les restrictions d'accès.
Lekensteyn
1
+1 pour le "c'est uniquement possible sur les FS sans autorisation" - j'ai essayé d'utiliser uidet gid, ce qui ne fonctionnerait pas.
mgarciaisaia
19

bindfsEst la réponse. Il prendra un système de fichiers déjà monté et fournira une vue de celui-ci avec l'uid que vous souhaitez:

sudo apt-get install bindfs
mkdir ~/myUIDdiskFoo
sudo bindfs -u $(id -u) -g $(id -g) /media/diskFoo ~/myUIDdiskFoo
Catskul
la source
1
bindfs a d'autres modes de fonctionnement, voir: bindfs.org/docs/bindfs.1.html
Lekensteyn
2
Ugh, il utilise FUSE.
Navin
Je voulais monter un système de fichiers virtuel 9p avec des autorisations utilisateur différentes de celles du système d'exploitation hôte. Je me cognais la tête contre le mur en essayant de le faire fonctionner. Bindfs m'a vraiment sorti d'une impasse. Super petit outil!
Boann
6

En supposant que l'ensemble de groupes pour les fichiers dispose des autorisations appropriées, vous devriez être en mesure de découvrir son ID de groupe (GID) et de vous y ajouter.


Pour connaître l'ID de groupe d'un fichier, utilisez ls -n. Exemple de sortie:

drwxr-xr-x 1 1000 1000  550 Jul  9 11:08 Desktop/

Vous voulez le quatrième champ pour GID, qui dans mon cas est le deuxième 1000.

sudo addgroup --gid GID foobar; sudo usermod `whoami` -aG foobar

Une fois que vous exécutez cela, vous devriez avoir toute latitude là où les attributs de fichier pour le groupe le permettent.

Comme indiqué dans l'autre réponse relative aux autorisations des utilisateurs, si vous devez corriger le groupe sur certains fichiers, exécutez l' un d'eux:

sudo chown -R :foobar ./
sudo chgrp -R  foobar ./
Chinoto
la source
1
Notez si vous souhaitez basculer l'utilisateur ou le groupe de A vers B sans changer la propriété des fichiers qui ne sont pas A; vous pouvez utiliser sudo chown --from A B -R ./pour les utilisateurs et sudo chown --from :A :B ./pour les groupes
LateralFractal