Sistema de archivos de montaje con conjunto de identificación de usuario especial

19

Quiero montar el dispositivo /dev/sda3en el directorio /foo/bar/baz. Después de montar el directorio debe tener el uid de usuario johndoe. Así que lo hice:

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

y agregué la siguiente línea a mi /etc/fstab:

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

Cuando lo hago ahora, sudo -u johndoe mount /dev/sda3el comando stat -c %U /foo/bar/bazresulta en rootlugar de johndoe. ¿Cuál es la mejor manera de montar este sistema de archivos ext4 con uid johndoeset?

qbi
fuente

Respuestas:

20

No es posible forzar a un propietario en un disco con un sistema de archivos ext4. Solo los sistemas de archivos que no admiten permisos de Linux como fat tienen un atributo de propiedad / grupo: uid=valuey gid=value. Consulte la página del manual sobre el soporte .

Debe cambiar el propietario en el sistema de archivos montado como en:

sudo chown johndoe /foo/bar/baz

Si necesita cambiar los permisos de forma recursiva:

sudo chown -R johndoe /foo/bar/baz

... y si el grupo necesita ser cambiado johndoetambién:

sudo chown -R johndoe: /foo/bar/baz
Lekensteyn
fuente
2
Cambiar la propiedad de forma recurrente es generalmente una mala idea si puede evitarlo. Una vez que haya eliminado la propiedad "correcta", prácticamente no hay forma fácil de recuperarla. IMO bindfs es la forma correcta de manejar esto (ver mi respuesta).
Catskul
3
bindfs suena como otra capa de complejidad. Mi respuesta es más adecuada para un disco duro externo (para copia de seguridad) que se utilizó en una instalación anterior con una ID de usuario diferente. No se debe usar en situaciones en las que se deben mantener múltiples ID de usuario (sistema de archivos raíz), pero en ese caso tampoco se -udeben usar bindfs con porque evita las restricciones de acceso de los diferentes ID de usuario. --mapdebe usarse si desea preservar las restricciones de acceso.
Lekensteyn
1
+1 para "solo es posible en FS sin permiso": he estado intentando usar uidy gid, lo que no funcionaría.
mgarciaisaia
19

bindfses la respuesta. Tomará un sistema de archivos ya montado y le proporcionará una vista con el uid que desee:

sudo apt-get install bindfs
mkdir ~/myUIDdiskFoo
sudo bindfs -u $(id -u) -g $(id -g) /media/diskFoo ~/myUIDdiskFoo
Catskul
fuente
1
bindfs tiene otros modos de operación, ver: bindfs.org/docs/bindfs.1.html
Lekensteyn
2
Ugh, usa FUSE.
Navin
Quería montar un sistema de archivos virtual de 9p con diferentes permisos de usuario que el sistema operativo host. Estaba golpeando mi cabeza contra la pared tratando de hacerlo funcionar. Bindfs realmente me sacó de un apuro. Gran herramienta pequeña!
Boann
6

Suponiendo que el grupo configurado para los archivos tiene los permisos apropiados, debería poder averiguar su ID de grupo (GID) y agregarse a él.


Para averiguar la identificación de grupo de un archivo, use ls -n. Salida de ejemplo:

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

Desea el cuarto campo para GID, que en mi caso es el segundo 1000.

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

Una vez que ejecute eso, debe tener control completo donde lo permitan los atributos de archivo para el grupo.

Como se señaló en la otra respuesta relacionada con los permisos de usuario, si necesita corregir el grupo en algunos archivos, ejecute uno de estos:

sudo chown -R :foobar ./
sudo chgrp -R  foobar ./
Chinoto
fuente
1
Tenga en cuenta si desea cambiar el usuario o grupo de A a B sin cambiar la propiedad de los archivos que no son A; puede usar sudo chown --from A B -R ./para usuarios y sudo chown --from :A :B ./grupos
LateralFractal