1

我想更改文件权限和文件所有权(root o mobile) 我已经找到了如何成功设置权限(777)。但现在我正试图获得文件所有权。

这是我已经得到的,但它似乎不起作用:

NSMutableDictionary *dict2 = [[NSMutableDictionary alloc] init]; 
    [dict2 setObject:[NSString stringWithFormat:@"mobile"] forKey:NSFileOwnerAccountName]; 
    [dict2 setObject:[NSString stringWithFormat:@"mobile"] forKey:NSFileGroupOwnerAccountName];
    NSFileManager *fm2 = [NSFileManager defaultManager]; 
    NSError *error2; 
    [fm2 setAttributes:dict2 ofItemAtPath:omgPath error:&error2];

有人可以帮我弄这个吗?:)

这是权限的工作代码:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
    [dict setObject:[NSNumber numberWithInt:511] forKey:NSFilePosixPermissions]; 
    NSFileManager *fm = [NSFileManager defaultManager]; 
    NSError *error1; 
    [fm setAttributes:dict ofItemAtPath:omgPath error:&error1];

这是另一个大问题:

没有文件权限(如果文件没有权限)我不能使用 chown 命令,否则我会使用它。如果“所有者”的所有权是 root,我无法运行权限脚本。所以我必须让一个工作而不需要另一个。

所以设置所有权在没有权限的情况下不起作用设置权限仅在所有权是移动的而不是root时才起作用

有任何想法吗?

4

2 回答 2

0

由于某种原因,您的代码分段错误,我不确定确切的错误,但您的风格有点奇怪,例如,为什么您创建了一个可变字典而不是普通字典?当你只需要一个普通的字符串时,为什么要使用 NSStringWithFormat 呢?无论如何,我不确定哪个确切的问题导致了 seg 错误,但在这里它已修复:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"mobile",NSFileOwnerAccountName,
                          @"mobile",NSFileGroupOwnerAccountName,
                          nil];

NSError *error = nil;
[[NSFileManager defaultManager] setAttributes:dict ofItemAtPath:omgPath error:&error];
if(error){
    NSLog(@"Error settings permission %@",[error description]);
}
于 2013-04-27T22:52:27.293 回答
0

只有超级用户可以设置文件的所有权。而且,一般来说,如果任务可以使用较低级别的 API 完成,则不应使用特权辅助工具中的 Cocoa,因为这样可以减少攻击风险。

如果方法失败,您应该检查通过引用返回的错误对象(这与 indiekiduk 的答案不同,您应该通过查看方法的布尔返回值来确定,而不是错误变量是否为nil)。它将解释失败的原因。

于 2013-04-28T00:20:30.503 回答