Permisos predeterminados para archivos nuevos y umask predeterminado

Monté un recurso compartido NFS en mi dispositivo Android rooteado usando el montaje de busybox.

Puedo leer y crear archivos, pero cuando creo un archivo en cualquier aplicación, los permisos del archivo se establecen en 0600 (porque el umask dentro de la aplicación es 077). Esto significa que solo esa aplicación puede acceder a un archivo creado por una aplicación.

¿Cómo puedo cambiar este comportamiento y crear los nuevos archivos con más permisos? ¿Hay alguna forma de que las aplicaciones comiencen con un umask diferente?

Además, ¿cómo es que todos los archivos creados en la tarjeta SD son 0775 (ignorando así el umask de la aplicación)? Quiero que mi montura NFS se comporte como la tarjeta SD

Tengo una caja de Android rooteada con la versión 4.4.2.

Respuestas (1)

Una búsqueda rápida en Google revela una nueva API en Java 7 que permite modificar los bits de permisos para archivos individuales. Esto no ayuda a cambiar el umask, pero debería permitirle anularlo después de la creación del archivo. Verificar:

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#setPosixFilePermissions%28java.nio.file.Path,%20java.util.Set%29

Si realmente necesita cambiar el umask, no parece ser una función actualmente expuesta directamente por el BCL. Tendrás que recurrir a llamadas nativas, o usar una biblioteca para que lo haga por ti. Escuché que tales bibliotecas ya existen; estaría buscando una que le dé acceso a la funcionalidad del sistema operativo POSIX.

En cuanto a por qué los archivos en la tarjeta sd ignoran el umask, las tarjetas sd generalmente se formatean con el sistema de archivos vfat, que es básicamente compatible con versiones anteriores de MS-DOS/Windows 95 y no reconoce el concepto de usuarios. Como tal, no tiene forma de restringir el acceso a un archivo; si no puede restringir el acceso para usuarios particulares, entonces solo estaría restringiendo el acceso para cualquier persona , y ¿por qué querría hacer eso? :-)

Lo que tiene vfat son atributos de archivo: solo lectura, oculto y sistema. No existe una forma efectiva de asignar la mayoría de las combinaciones de modo de archivo UNIX a estos. El controlador, por lo tanto, simplemente siempre informa que los archivos tienen un modo particular, establecido cuando se monta el sistema de archivos. Android monta tarjetas SD para que ese modo se devuelva como 0755 (-rwxr-xr-x).