Permisos en Mac OS X y chflags

En Mac OS X, el sistema de archivos nativo usa más allá de simples permisos UNIX clásicos. Como utilizo 3 sistemas operativos, terminé por decidir utilizar una partición comun para documentos en un sistema de archivos que pudiera leer y escribir desde los 3. Concluí que lo mejor para mi caso, era utilizar «HFS+ (sin registro)» (es decir, sin journaling), dado que para Mac OS X es nativo, en windows se puede montar sin problemas con Macdrive y en Linux se puede montar como rw cuando tiene el journaling desactivado.

Lo malo es que para cada sistema, el tema de los permisos sigue tratandose diferente. Por ejemplo, al crear un nuevo archivo o directorio en Mac, el dueño es «gon:staff», mientras que en Linux se crea como «gon:gon». En Windows por otro lado, los nuevos archivos heredan el dueño del directorio, pero además el driver de macdrive le aplica ciertos «flags» extra a cada uno. Estos flags pueden significar «oculto», «inmutable para usuarios», «inmutable para el sistema», entre otras cosas. Esto en realidad no me interesa, me interesa que mis archivos en la particion de DOCUMENTOS sean accesibles entre los 3 sistemas, sin tener conflictos de permisos a la hora de trabajar con ellos.

Los problemas más comunes que tengo es cuando se actualizan archivos en mi Dropbox desde windows, pero luego entro a Mac OS X y no los puedo editar, mover o renombrar porque están con flag de inmutable.

Lo mismo con archivos nuevos que creo en Windows. En Linux el mayor problema que tengo es que no tengo homologados los ids de usuarios y grupos, es decir, que en Linux y Mac el usuario gon tenga el mismo uid y los grupos a los que pertenecen tengan los mismos gid.

Entonces, se me ocurrió meter mano en esto y encontré que el comando adecuado para quitarle los flags a mis archivos es chflags.

Al final agregué 2 detallitos más. En Windows cuando «veo» archivos con nombre «Icon» que terminan en un \r (retorno de carro en mac) dentro de directorios de Dropbox , entonces se confunde y crea otro archivo con nombre «Icon_». El problema es que por esta tontera vuelve a re-recrear varios «Icon_» algo así:

hope:mac gon$ ls -l /Volumes/Documentos/Dropbox/Icon*
-rw-r--r--@ 1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon?
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1~1~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1~1~1~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1~1~1~1~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1~1~1~1~1~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1~1~1~1~1~1~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1~1~1~1~1~1~1~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1~1~1~1~1~1~1~1~1
-rw-r--r--  1 gon  staff  0 Jan 15 18:20 /Volumes/Documentos/Dropbox/Icon_~2~1~1~1~1~1~1~1~1~1~1~1

En adelante, el script solución. Lamentablemente, lo que no se es como hacer que chflags cambie varios flags en todos los archivos de una sola vez, es decir, en una sola linea Por suerte encontré como cambiar varios flags en una sola linea, acelerando un poco más la cosa (ya que es un escaneo recursivo de directorios, y harto grande que es el mío):

#!/bin/bash

# cambiar permisos conflictivos

/usr/bin/sudo chflags -R dump,nouchg,noschg,nouappnd,noopaque /Volumes/Documentos/

/usr/bin/sudo chown -R gon:staff  /Volumes/Documentos/backup/ /Volumes/Documentos/Games/ /Volumes/Documentos/Pictures/ /Volumes/Documentos/Desktop/ /Volumes/Documentos/Documentos/ /Volumes/Documentos/Compartir/

# remove stupid "Icon_*" files created when Windows is confused

/usr/bin/find /Volumes/Documentos/Dropbox -name "*Icon_*" -exec rm "{}" \+ > /dev/null 2>&1

# remove Dropbox conflictive copies

/usr/bin/find /Volumes/Documentos/Dropbox -name "*Copia conflictiva*" -exec rm "{}" \+ > /dev/null 2>&1

exit 0

Con esto debería ser suficiente.

2 comentarios sobre “Permisos en Mac OS X y chflags

  1. Hola! Quisiera preguntar si conocen un tipo de permiso denominado «descargando» que me aparece en la Info de Mavericks 10.9, nunca lo había visto. Además de éste, que esta gritado, están «admin» y «everyone».

    A decir verdad me extraña que tenga esta denominación. Es como si estuviera permitiendo una descarga, no solicitada por mi, en forma permanente.

    Agradezco quien pueda comentar algo que se útil para comprender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.