完全限制对文件夹的所有类型的访问

时间:2015-01-18 10:19:29

标签: c++ objective-c macos cocoa bsd

我正在创建一个cocoa应用程序,它在用户环境中的指定位置创建了一些文件夹。现在我想保护这些文件夹免受来自所有类型用户的任何类型的读取,写入,复制和拖动访问(即管理员和非管理员用户无法访问)。是否有办法保护这些文件夹免受任何类型的访问。 我们可以使用,NSFileManager方法 -setAttributes:OfItemAtPath:错误: 但我不确定这种方法的属性字典。

基本上我想向用户提供一些文件的踪迹(假设为1天试用),并在路径到期后立即删除这些文件,并将所有这些文件放在用户环境中的某个文件夹中。应该用什么来保护这些文件的最佳方法?

2 个答案:

答案 0 :(得分:1)

您可以将NSFileManager setAttributes:OfItemAtPath:error:与属性键NSFilePosixPermissions一起使用。这样,您可以通过使用表示权限位模式的整数值指定文件夹的Unix file permissions来设置它。将其设置为零意味着根本无法访问该目录:

NSDictionary *attribs = [NSDictionary dictionaryWithObjectsAndKeys:
    NSFilePosixPermissions, [NSNumber numberWithInt:0], nil];

但是,仍然可以移动或重命名该目录。

答案 1 :(得分:1)

简短回答:否。拥有提升权限的人可以做任何事情。不玩任何权限会让你到那里,仍然允许你的应用程序访问文件。

如果您可以关闭所有访问权限,您希望自己的应用程序如何访问这些文件?打开访问权限本身就是一种访问权限......

更长的答案:可能。这取决于您要实现的目标。您真的想要停止正在复制的文件,还是只访问其内容?

加密可用于保护内容(例如,在文件级别,使用加密的稀疏图像等),将标识信息存储在文件中可以提醒您正在使用副本(例如,如果您看到会发生什么)移动/复制VMWare虚拟机或重新创建Google云端硬盘文件夹等等。

您可以使用FUSE始终实现自己的文件系统;并且通过您自己的机制防止复制,访问等,但是文件系统整体仍然可以被复制(即通过FUSE有效地实现您自己的加密稀疏捆绑的等价物并实现您自己的访问机制)。

你想要达到什么目的?如果你拼写说民间可能会建议替代解决方案。

另见this question on preventing root from writing to files