¿Cómo uso 'chmod' en una partición NTFS (o FAT32)?

129

Tengo un script que necesito ejecutar en una partición NTFS. El permiso del script está establecido en 600.

Intenté modificar los permisos ejecutando chmod 755 script.sh, lo que no informa una falla ni nada, pero tampoco cambia los permisos en el archivo:

$ stat script.sh

  File: `script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

$ chmod 755 script.sh
$ stat script.sh

  File: `script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

Como puede ver, permanece sin cambios.

Nathan Osman
fuente
Puede encontrar una mejor solución aquí. ¡ Estas dos preguntas deben estar vinculadas!

Respuestas:

79

El modo está determinado por las opciones de montaje de la partición (no puede cambiarlo a través de chmod).

Para '755' en archivos y '777' en directorios, usaría algo como

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
htorque
fuente
Bien, eso explicaría algunas otras cosas también.
Nathan Osman el
55
Lo que lo que debería poner en su lugar de /dev/whatevery /mnt/whateversi tengo que cambiar el permiso de mi partición de disco duro llamado/media/Prtn
pranphy
3
¿El montaje de esta manera conserva la configuración original del disco? Es decir, ¿es seguro montar una unidad de Windows?
Jonathan
1
Configuré el usuario como 'andrew', que es mi usuario principal. Por ls para ntfs la partición muestra que todos los archivos / directorios son propios de root.
deathangel908
La verdadera solución es ntfs-3g.usermap. Ver abajo ...
Eduardo Cuomo
86

Al contrario de lo que la mayoría de la gente cree, NTFS es un sistema de archivos compatible con POSIXIX, y es posible usar permisos en NTFS .

Para habilitar esto, necesita un "Archivo de mapeo de usuario" o simplemente dar la permissionsopción al montar (cuando no se necesita compatibilidad con Windows). Esto asigna usuarios de Linux en su sistema con las ID de usuario como NTFS / Windows los usa internamente.

Consulte la página de manual de ntfs-3g para obtener información y algunos ejemplos. Si necesita más información, consulte la documentación avanzada ntfs-3g sobre propiedad y permisos .

(Tenga en cuenta que esto no funciona en los sistemas de archivos FAT).

¹ Sí, también puede almacenar nombres de archivo que son válidos en Linux / Unix pero no en Windows, admite enlaces simbólicos y enlaces duros, etc.

JanC
fuente
44
Aquí hay buena documentación. en resumen: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSy luegosudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
ovejas voladoras
1
Entonces, ¿esto le permitirá establecer permisos arbitrariamente como chmod 655 /some/fileen la partición NTFS montada en Linux? Estoy tratando de descubrir cómo fusionar mi partición de inicio de Linux en c: \ Users. ¿Usar el mapa de usuario me permitirá retener todos los permisos? Estaba planeando montar el directorio c: \ Users en / home en linux.
trusktr
77
Permítanme volver a enfatizar su comentario: "cuando no se necesita compatibilidad con Windows". ref: askubuntu.com/questions/92863/…
Vista elíptica
1
ntfs-3g manpageenlace roto
ctrl-alt-delor
Eduardo Cuomo escribió un buen ejemplo de todos los pasos necesarios para hacer un "Archivo de mapeo de usuario" aquí: askubuntu.com/a/887502/327339
Gabriel Staples
38

Para particiones NTFS, use la permissionsopción en fstab.

Primero desmonte la partición ntfs.

Identifique su UUID de partición con blkid

sudo blkid

Luego edita /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

Y agregue o edite una línea para la partición ntfs

# change the "UUID" to your partition UUID
UUID=12102C02102CEB83 /media/windows ntfs-3g auto,users,permissions 0 0

Hacer un punto de montaje (si es necesario)

sudo mkdir /media/windows

Ahora monte la partición

mount /media/windows

Las opciones que le di auto, montarán automáticamente la partición cuando arranque y les userspermitirá a los usuarios montar y desmontar.

Luego puede usar chown y chmod en la partición ntfs.

Pantera
fuente
2
¿Cómo se almacenan estos permisos? En anuncios? Otros metadatos?
ζ--
¿Qué hay de fat32? Tengo una tarjeta Micro SD que está protegida contra escritura y no puedo acceder, formateela.
Waqas
@RanaMuhammadWaqas: esta es una pregunta antigua, pero también puede montarla con diferentes opciones. Es difícil saber cuál es su problema, quizás identifique su hardware y haga una pregunta por separado.
Panther
@ bodhi.zazen usersimplica noexec , nosuid y nodev . no es? ¿Cómo pueden los usuarios montar / desmontar con la noexecconfiguración?
Khurshid Alam
1
@EduardoCuomo - Publicar un comentario en una respuesta que indique que no está funcionando es poco probable que lo ayude. ¿Qué sistema de archivos? Te sugiero que abras una pregunta. Debe identificar el sistema de archivos y publicar su entrada fstab
Panther
20

Además de configurar fmask y / o dmask en la respuesta anterior de htorque, si desea ejecutar scripts en la unidad, también tuve que configurar la opción de montaje "exec".

Entonces el ejemplo sería:

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever
dbrews
fuente
14

Siempre puede invocar explícitamente al intérprete de script, en cuyo caso no se requieren permisos de ejecución. Si el script usa bash , como puede verificarse mirando la primera línea del script, simplemente ejecute

bash script.sh

Tenga en cuenta que el script llama a otros scripts o binarios en la misma partición, esto no funcionará. Tenga en cuenta también que la estrategia no funciona con archivos binarios en lugar de archivos de script textuales escritos en Bash Script, Perl, Python o similares.

loevborg
fuente
+1 - Nunca pensé en invocarlo de esa manera.
Nathan Osman
8
Para ejecutar binarios, utilícelo /lib64/ld-linux-x86-64.so.2 ./program.binpara programas de 64 bits y /lib/ld-linux.so.2 ./program.binpara programas de 32 bits.
Lekensteyn el
8

De acuerdo con la sección de Propiedad y Permisos de la documentación de NTFS-3G, podemos usar las opciones de montaje para controlar el acceso y la creación de archivos . Las combinaciones son muy complicadas (ver las dos tablas allí). Además, no leo y los entiendo todos. Por ejemplo, no sé si las ACL POSIX se seleccionan en tiempo de compilación o no del paquete binario NTFS-3G. Pero lo mejor que he obtenido es usar un archivo de mapeo de usuario combinado con algunas opciones de montaje para aproximar un mapeo plausible de la propiedad del archivo y los permisos entre Windows y Linux.


Advertencia : Esto es solo lo que funciona mejor para compartir una partición de datos NTFS (unidad D:en Windows) entre Windows 8 de arranque dual y Kubuntu 14.04. Las instrucciones se registran en una cuidadosa retrospección pero no se prueban a fondo. Es demasiado agotador y tedioso repetir todo el procedimiento nuevamente. Así que sígalo bajo su propio riesgo. Pero si lo hace, comparta su experiencia. Si decide seguir las instrucciones, léalo completamente para tener una imagen completa antes de actuar. ¡Buena suerte!


Muy bien, aquí tienes! Las instrucciones detalladas constan de tres partes. La Parte 1 debe llevarse a cabo en Windows, mientras que la Parte 2 en Linux. La parte 3 es para prueba.

Parte 1

La sección Asignación de usuarios de la documentación de NTFS-3G especifica dos versiones para configurar la asignación de usuarios entre Windows y Linux, una versión de Windows y una versión de Linux. Mi experiencia fue que la versión de Linux terminó con una falla . La cuenta de Linux no se asignó a mi cuenta de Windows, pero apareció una cuenta desconocida bajo un SID . El resultado fue un desastre ya que esta cuenta desconocida toma posesión de todos los archivos de mi cuenta de Windows. En esa situación, a menos que tenga un privilegio administrativo para recuperar su propiedad, los archivos de su cuenta de Windows quedarán inaccesibles. Pero incluso si usted sarna, todavía esUn mapeo incorrecto. Eso significa que, más tarde, los archivos que cree en Linux se asignarán a esa cuenta desconocida en Windows y los de Windows se asignarán a root en Linux (si no recuerdo mal). Entonces, en Windows, debe recuperar la propiedad nuevamente y en Linux cambiar la propiedad. Eso no es lo que esperamos que sea. Después de varios intentos desesperados por solucionar el problema, me di por vencido y recurrí a la versión de Windows. Ese funcionó. Las instrucciones detalladas extraídas de la sección relevante de la documentación de NTFS-3G son las siguientes:

  1. Descargue la herramienta de mapa de usuario , extráigala en algún lugar (en mi caso, unidad C:), mejor fuera de la partición NTFS (en mi caso, unidad D:) para compartir.

  2. Abra la línea de comando de Windows. Cambie al directorio extraído tools(por defecto) de la usermapherramienta. Luego ejecute el siguiente comando:

    C:\tools> mapuser > UserMapping
    

    Esto genera una plantilla y la redirige a un archivo llamado UserMapping. Abra el archivo con un editor de texto, diga Bloc de notas, debería ver las siguientes líneas:

    # Generated by usermap for Windows, v 1.1.5
    # For Windows account "Account" in domain "Domain"
    # Replace "user" and "group" hereafter by matching Linux login
    user::SID
    :group:SID
    

    Presumiblemente, el primero SIDdebe ser su SID de usuario, mientras que el segundo es su SID de grupo. Puede verificarlos respectivamente mediante comandos whoami /usery whoami /groups.

  3. Después de asegurarse de que los SID sean correctos, siga las instrucciones en el comentario, es decir, cambie userla user::SIDlínea a su nombre de usuario y groupla :group:SIDlínea a su nombre de grupo principal en Linux. En Ubuntu, son lo mismo. Además, agregue el nombre de su grupo Linux también después de los primeros dos puntos de la user::SIDlínea. Entonces la línea debería verse algo así user:group:SID. Parece que si no lo hace, los archivos creados en Windows se asignarán a user:rootLinux.

  4. Guarda el archivo. Muévalo a un directorio llamado .NTFS-3G(créelo si aún no existe) en la partición NTFS que se compartirá (en mi caso, unidad D:).

  5. Este paso es para la prueba en la Parte 3. En la partición NTFS compartida, cree un nuevo directorio y un nuevo archivo.

Parte 2

Ahora inicie en Linux. sudoeditar el archivo /etc/fstab. Agregue o modifique la línea para la partición NTFS compartida a algo como lo siguiente:

UUID=...    /data    ntfs    defaults,umask=077,utf8    0    0

Lo esencial es establecer el umask( dmasky fmasktambién puede funcionar pero no probado). Escoja un valor para umaskque te gusta, aunque escogí 077. Parece que sin esta configuración, se otorgarán permisos completos opara los archivos recién creados.

Guarda el archivo. Ahora sudo mounto vuelva a montar ( sudo umounty luego sudo mount) la partición NTFS compartida (en mi caso /data):

$ sudo mount /data

Parte 3

Ahora (todavía en Linux) cdal punto de montaje (en mi caso /data), ls -llos archivos allí. Compruebe si su propiedad y sus permisos coinciden respectivamente con los que especificó en el UserMappingarchivo y los umaskque configuró /etc/fstab(la coincidencia entre los permisos y umaskrequiere un cálculo complementario; consulte man (1) umask para obtener más información) Si lo hacen, felicidades, se logra la mitad del objetivo. De lo contrario, pobre de ti. Pregúntale a Ubuntu o Windows.

Luego cree un nuevo directorio y un nuevo archivo. ls -lpara verificar su propiedad y permisos. La propiedad debe ser su nombre de usuario y grupo primario como de costumbre. Los permisos deben coincidir con el umask. Ahora reinicie su computadora y arranque en Windows. Localice en la partición NTFS compartida el directorio y el archivo que acaba de crear en Linux. Verifique sus propiedades para ver si están asignadas a su cuenta de Windows. Si es así, felicidades, ya está todo hecho. De lo contrario, mala suerte. Pregúntale a Windows o Ubuntu.

EOF

reflexivo
fuente
6

Tema antiguo, lo sé, pero sigue siendo relevante y falta un consejo de caso de uso particular, compuesto de diferentes sugerencias en varios otros foros / hilos y probado en Ubuntu GNOME 13.04 donde quería una unidad externa para contener una biblioteca Steam ...

Cuando la partición NTFS está en una unidad usb externa, por ejemplo, lo que significa que la partición se monta sobre la marcha al momento de la conexión, puede usar el siguiente método para hacer particiones udev mount ntfs con derechos de ejecución.

Abra una ventana de terminal y haga:

$ sudo nano /etc/udev/rules.d/90-usb-disks.rules

Luego pegue esta línea en lo que debería ser un archivo en blanco / nuevo (si no, salga de nano y vuelva a emitir el comando, pero comience el nombre del archivo con un número mayor como 91 -...):

ENV{ID_FS_TYPE}=="ntfs", ENV{ID_FS_TYPE}="ntfs-3g"

Luego guardar y cerrar. Desenchufe el disco y luego en la terminal:

$ sudo service udev restart

A continuación, vuelva a enchufar la unidad y disfrute :)

usuario17254
fuente
1
Excelente, esta debería ser la respuesta aceptada.
Leftaroundabout
4

Todos los pasos:

  1. Instalar ntfs-3g:

    sudo apt-get install -y ntfs-3g
    
  2. Desmontar la partición NTFS :

    sudo umount /mnt/windows
    
  3. Use ntfs-3g.usermappara generar su UserMappingarchivo:

    sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFS
    

    o

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Vuelva a montar la partición NTFS para agregar el UserMappingarchivo:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Actualiza tu fstabarchivo:

    sudo vim /etc/fstab
    

    Actualizar línea de montaje :

    1. Copia de seguridad de su línea de montaje actual! Duplique la línea y comente agregando un #al principio.
    2. Cambiar a continuación: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. A continuación: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 ( opción de uso ntfs-3gy única default)

    Debería verse más o menos así:

    #UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0 UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0

  6. Finalmente, vuelva a montar usando su fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

¡Haga esto una vez por cada partición NTFS que tenga!

ADVERTENCIA CON WINDOWS OS!

¡Lo compruebo con Windows 7+ y los permisos afectan al sistema operativo Windows! ¡Cambié los permisos de mi Home Directory en la partición de Windows, y cuando volví a usar Windows pude ver que el usuario estaba roto!

Eduardo Cuomo
fuente
1

Hay una pregunta relacionada para dispositivos USB. Esta respuesta proporciona un truco feo si desea montar cada dispositivo USB automáticamente con permisos de ejecución.

lumbric
fuente
1

Monte la partición NTFS en una unidad USB con permisos personalizados y propietario

En Linux, el modo de NTFS (y FAT32) está determinado por las opciones de montaje de la partición . No puede cambiarlo a través de chmod.

Supuesto: la unidad USB es visto como sdb1 , modificar para que coincida con la letra de unidad y el número de particiones en su caso . La sintaxis general es sdxn, donde xestá la letra de unidad y nes el número de partición como se ve por ejemplosudo lsblk -f

Preparando

  • Desmontar la partición NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Cree un punto de montaje personalizado (solo si desea un nuevo punto de montaje), por ejemplo con

    sudo mkdir -p /mnt/sd1
    
  • Verifique el uidnúmero de su ID de usuario (generalmente es 1000, a veces 1001 o 1002 ...)

    grep ^"$USER" /etc/group
    

    y use ese número si desea obtener la propiedad (el valor predeterminado es root).

Montar la partición NTFS

Ejemplo 1 (sin permisos de ejecución para archivos, sin acceso para 'otros'),

sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdb1 /mnt/sd1  # modify to match your case
  • en este caso puedes ejecutar el script this-scriptcon

    bash /mnt/sd1/this-script
    

Ejemplo 2 (con permisos de ejecución para archivos, sin acceso para 'otros'),

sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdb1 /mnt/sd1  # modify to match your case
  • En este caso, puede ejecutar el script this-scriptcon

    /mnt/sd1/this-script
    

    y también puede ejecutar programas ejecutables desde esta ubicación (no es recomendable).

Ejemplo 3 (permisos completos para todos, lo cual es conveniente pero no seguro, cuando hay varios usuarios),

sudo mount -o rw,users,umask=000,exec /dev/sdxn /mnt/sd1  # general
sudo mount -o rw,users,umask=000,exec /dev/sdb1 /mnt/sd1  # modify to match your case
sudodus
fuente
/media$ sudo mkdir -p sdb1 /media$ sudo mount -o rw,users,umask=000,exec /dev/sdb1 ./sdb1/ mount: block device /dev/sdb1 is write-protected, mounting read-only
alhelal
@alhelal, me temo que el hardware de su unidad USB se ha convertido en solo lectura o 'bloqueado por la red'. Pero también puede haber algún problema con el sistema de archivos, y si el sistema de archivos está dañado, puede solucionarlo reparándolo en Windows, ya sea con el método GUI o con la línea de comando de chkdsk /f X:acuerdo con este enlace ubuntuforums.org / ... - Si aún no tiene suerte, haga una
sudodus