Разрешения по умолчанию для новых файлов и umask по умолчанию

Я смонтировал общий ресурс NFS на своем Android-устройстве с root-доступом, используя монтирование busybox.

Я могу читать и создавать файлы, но когда я создаю файл в любом приложении, права доступа к файлу устанавливаются на 0600 (потому что umask внутри приложения — 077). Это означает, что файл, созданный приложением, может быть доступен только этому приложению.

Как я могу изменить это поведение и создать новые файлы с дополнительными разрешениями? Есть ли способ запустить приложения с другим umask?

Кроме того, почему все файлы, созданные на SD-карте, имеют номер 0775 (таким образом игнорируя umask приложения)? Я хочу, чтобы мое крепление NFS вело себя как SD-карта

У меня есть рутированная версия Android 4.4.2.

Ответы (1)

Быстрый поиск в Google показывает новый API в Java 7, который позволяет изменять биты разрешений для отдельных файлов. Это не поможет изменить umask, но должно позволить вам переопределить его после создания файла. Проверить:

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

Если вам действительно нужно изменить umask, похоже, это не функция, которая в настоящее время предоставляется непосредственно BCL. Вам придется прибегнуть к собственным вызовам или использовать библиотеку, чтобы сделать это от вашего имени. Я слышал, что такие библиотеки уже существуют — вы бы искали ту, которая дает доступ к функциям операционной системы POSIX.

Что касается того, почему файлы на SD-карте игнорируют umask, SD-карты обычно форматируются с использованием файловой системы vfat, которая в основном обратно совместима с MS-DOS/Windows 95 и не распознает концепцию пользователей. Таким образом, у него нет возможности ограничить доступ к файлу; если вы не можете ограничить доступ для определенных пользователей, тогда вы ограничите доступ только для всех , и зачем вам вообще это делать? :-)

У vfat есть атрибуты файла — только для чтения, скрытый и системный. Не существует эффективного способа сопоставить с ними большинство комбинаций файловых режимов UNIX. Драйвер, таким образом, просто всегда сообщает, что файлы имеют определенный режим, установленный при монтировании файловой системы. Android монтирует SD-карты, чтобы этот режим возвращался как 0755 (-rwxr-xr-x).