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

119

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

Intenté modificar los permisos ejecutando chmod 755 script.sh , 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.

    
pregunta Nathan Osman 07.11.2010 - 00:12

10 respuestas

75

El modo está determinado por las opciones de montaje de la partición (no se puede cambiar 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
    
respondido por el htorque 07.11.2010 - 00:35
78

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

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

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

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

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

    
respondido por el JanC 02.11.2011 - 17:57
34

Para las particiones NTFS, use la opción permissions en fstab.

Desmonta primero 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 añada 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

Crear un punto de montaje (si es necesario)

sudo mkdir /media/windows

Ahora monta la partición

mount /media/windows

Las opciones que te di, auto , montarán automáticamente la partición cuando arranque y users permite a los usuarios montar y desmontar.

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

    
respondido por el Panther 28.12.2011 - 17:31
20

Además de configurar el fmask y / o el dmask en la respuesta de htorque anterior, si desea ejecutar scripts en el disco, 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
    
respondido por el dbrews 14.12.2010 - 09:26
13

Siempre puede invocar explícitamente el intérprete de guiones, en cuyo caso los permisos de ejecución no son necesarios. Si el script usa bash , como se puede verificar 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 los binarios en comparación con los archivos de script textuales escritos en Bash Script, Perl, Python o similares.

    
respondido por el loevborg 14.12.2010 - 11:00
8

De acuerdo con la sección Propiedad y permisos del NTFS-3G documentación, podemos usar las opciones de montaje para controlar el archivo acceso y la creación . Las combinaciones son muy complicadas (ver las dos tablas allí). Además, no leo y me los llevo a todos. Por ejemplo, no sé si POSIX ACL está seleccionado en tiempo de compilación o no del paquete binario NTFS-3G. Pero lo mejor que he logrado es utilizar un mapeo de usuarios combinado con algún montaje opciones para aproximar una asignación verosímil de propiedad de archivos y permisos entre Windows y Linux.

Advertencia : Esto es lo que mejor funciona para compartir una partición de datos NTFS (unidad D: en Windows) entre Windows 8 dual y Kubuntu 14.04. Las instrucciones se registran en una cuidadosa retrospección pero no se prueban a fondo. Es muy agotador y tedioso repetir todo el procedimiento nuevamente. Entonces sígalo bajo su propio riesgo. Pero si lo haces, comparte tu experiencia. Si decides seguir las instrucciones, léelo por completo para obtener 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. Parte 3 es para prueba.

Parte 1

La sección User Mapping de la documentación NTFS-3G especifica dos versiones para configurar mapeo de usuario 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 un señorito . La cuenta de Linux no se asignó a mi cuenta de Windows, pero alguna cuenta desconocida apareció en 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 se vuelven inaccesibles. Pero incluso si manejas, es todavía una asignación incorrecta. Eso significa que más adelante cualquiera de los archivos que cree en Linux se asignará a esa cuenta desconocida en Windows y aquellos en Windows se asignarán a la raíz en Linux (si no recuerdo mal). Por lo tanto, en Windows necesita recuperar la propiedad y cambiar la propiedad de Linux. Eso no es lo que esperamos que sea. Después de varios intentos desesperados para solucionar el problema, me di por vencido y recurrí a la versión de Windows. Eso funcionó. A continuación, se detallan las instrucciones detalladas extraídas de la sección pertinente de la documentación de NTFS-3G:

  1. Descargue la herramienta usermap , 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 (de forma predeterminada) de la herramienta usermap . A continuación, 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, por ejemplo, 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 primer SID debe ser su SID de usuario, mientras que el segundo es el SID de su grupo. Puede verificarlos respectivamente mediante los comandos whoami /user y whoami /groups .

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

  4. Guarde el archivo. Moverlo a un directorio llamado .NTFS-3G (créelo si aún no existe) en la partición NTFS para 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 arranque en Linux. sudo edita el archivo /etc/fstab . Agregue o modifique la línea de la partición NTFS compartida a algo como lo siguiente:

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

Lo esencial es establecer que el umask ( dmask y fmask también funcione pero no se haya probado). Elige un valor para umask que te guste, aunque elegí 077 . Parece que sin esta configuración, se otorgarán todos los permisos a o thers para los archivos recién creados.

Guarda el archivo.Ahora sudo mount o remontar ( sudo umount y luego sudo mount ) la partición NTFS compartida (en mi caso /data ):

$ sudo mount /data

Parte 3

Ahora (todavía en Linux) cd al punto de montaje (en mi caso, /data ), ls -l los archivos allí. Compruebe si su propiedad y permisos coinciden respectivamente con los que especificó en el archivo UserMapping y el umask que estableció en /etc/fstab (la coincidencia entre permisos y umask requiere algún cálculo complementario, consulte man (1) umask para más información). Si lo hacen, felicitaciones, se logra la mitad del objetivo. De lo contrario, pobre de ti. Pregunta a Ubuntu o Windows.

Luego crea un nuevo directorio y un nuevo archivo. ls -l para verificar su propiedad y permisos. La propiedad debe ser su nombre de usuario y grupo principal, como de costumbre. Los permisos deben coincidir con umask . Ahora reinicie su computadora e inicie en Windows. Ubique 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 lo son, felicitaciones, ya has terminado. De lo contrario, mala suerte. Pregunta a Windows o Ubuntu.

EOF

    
respondido por el reflectionalist 23.08.2014 - 00:35
5

Tema viejo, lo sé, pero sigue siendo relevante y falta un consejo particular sobre el caso de uso, compuesto de diferentes sugerencias en varios foros / hilos y probado en Ubuntu GNOME 13.04 donde quería un disco externo para albergar una biblioteca de 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 conectarse, puede usar el siguiente método para hacer udev mount ntfs particiones con derechos de ejecución.

Abre una ventana de terminal y hazlo:

$ 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 (de lo contrario, salga de nano y vuelva a emitir el comando, pero inicie el nombre del archivo con un número más alto como 91 -...):

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

Luego guarda y cierra. Desenchufa la unidad y luego hazlo en la terminal:

$ sudo service udev restart

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

    
respondido por el user17254 15.09.2013 - 01:51
2

Todos los pasos:

  1. Instalar ntfs-3g :

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

    sudo umount /mnt/windows
    
  3. Use ntfs-3g.usermap para generar su archivo UserMapping :

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

    o

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

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

    sudo vim /etc/fstab
    

    Actualizar línea montar :

    1. ¡Haz una copia de seguridad de tu línea de montaje actual! Duplique la línea y coméntela agregando un # al principio.
    2. Cambiar siguiente: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Por el siguiente: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Use ntfs-3g y solo default option)

    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 utilizando su fstab :

    sudo umount /mnt/windows
    sudo mount -a
    

¡Hazlo una vez por cada NTFS partición que tengas!

¡ADVERTENCIA CON WINDOWS OS!

Lo verifico con Windows 7 + y los permisos afectan al sistema operativo Windows. Cambié los permisos de mi Directorio de inicio en la partición de Windows, y cuando utilicé Windows nuevamente ¡pude ver que el usuario estaba roto!

    
respondido por el Eduardo Cuomo 26.02.2017 - 15:49
1

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

    
respondido por el lumbric 28.12.2011 - 16:06
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 puedes cambiarlo a través de chmod.

Suposición: la unidad USB se ve como sdb1 , modificar para que coincida con la letra de la unidad y el número de partición en su caso . La sintaxis general es sdxn , donde x es la letra de la unidad y n es el número de partición visto por ejemplo sudo lsblk -f

Preparación

  • Desmontar la partición NTFS.

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

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

    grep ^"$USER" /etc/group
    

    y usa ese número si quieres 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 puede ejecutar el script this-script con

    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-script con

    /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
    
respondido por el sudodus 15.09.2017 - 13:02

Lea otras preguntas en las etiquetas