Я делаю приложение cocoa, которое создает некоторые папки в моем указанном месте в пользовательской среде. Теперь я хочу защитить эти папки от любого типа чтения, записи, копирования, перетаскивания доступа от всех типов пользователей (т.е. Недоступен для пользователей admin и non-admin). Есть ли способ защитить эти папки от любого типа доступа, Можем ли мы использовать метод NSFileManager -setAttributes: OfItemAtPath: error: Но я не уверен в словаре атрибутов этого метода.
В основном, я хочу предоставить трейлерам некоторые файлы пользователю (скажем, 1-дневную пробную версию) и удалить эти файлы, как только истечет срок, и все эти файлы помещаются в определенную папку в пользовательской среде. Какой должен быть лучший подход, который я должен использовать для защиты этих файлов?
Короткий ответ: Нет. Кто-то с повышенными привилегиями может делать что угодно. Никакая игра с разрешениями не приведет вас туда и не позволит вашему приложению получить доступ к файлам.
Если бы вы могли просто отключить все права доступа, как вы ожидаете, что ваше собственное приложение получит доступ к файлам? Включение прав доступа само по себе является правом доступа...
Более длинный ответ: Может быть. Это зависит от того, чего вы пытаетесь достичь. Вы действительно хотите остановить копирование файлов или просто доступ к их содержимому?
Шифрование может использоваться для защиты контента (например, на уровне файла, с использованием зашифрованного изображения с разреженным спамом и т.д.), Хранение идентификационной информации в файле может предупредить вас о том, что вы используете копию (например, посмотрите, что произойдет, если вы переместите/скопируйте VMWare виртуальную машину или воссоздать папку Google Диска) и т.д.
И вы всегда можете реализовать свою собственную файловую систему с помощью FUSE; и предотвращать копирование, доступ и т.д. по вашему собственному механизму, однако файловая система в целом все еще может быть скопирована (т.е. эффективно реализовать свой собственный эквивалент зашифрованного sparsebundle через FUSE и реализовать свой собственный механизм доступа).
Чего вы пытаетесь достичь? Если вы заметите, что люди могут предложить альтернативные решения.
См. Также этот вопрос о том, как запретить root писать в файлы.
Вы можете использовать NSFileManager setAttributes: OfItemAtPath: error: с ключом атрибутов NSFilePosixPermissions. При этом вы можете установить права доступа к файлам Unix для своей папки, указав их с целым значением, которое представляет шаблон бита разрешения. Установка его на ноль означала бы отсутствие доступа к этому каталогу:
NSDictionary *attribs = [NSDictionary dictionaryWithObjectsAndKeys:
NSFilePosixPermissions, [NSNumber numberWithInt:0], nil];
Однако все же можно было бы переместить или переименовать этот каталог.