要求仅使用标准帐户的管理员特权



我正在将某些文件移至/应用程序目录,并使用smjobbless()提升为管理权特权。

但它提示了任何类型的帐户或标准_user的管理凭据,我们可以通过使用任何Objective-C API?

edit - 如果有人尝试过或经过安装Dropbox的过程,则Dropbox Installer可以执行相同的操作(即,它仅要求用于将其.App文件复制到/的标准帐户中应用程序)。

基于另一个问题的答案,我制作了一个似乎适合您的文件(我刚刚将其从C转换为Objective-C并删除了printf;链接在答案的结尾)。

nsprivileges.h

#import <Foundation/Foundation.h>
@interface NSPrivileges : NSObject
+(BOOL)hasAdminPrivileges;
@end

nsprivileges.m

#import "NSPrivileges.h"
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <strings.h>
#include <pwd.h>
#include <grp.h>
@implementation NSPrivileges
+(BOOL)hasAdminPrivileges{
    uid_t current_user_id = getuid();
    struct passwd *pwentry = getpwuid(current_user_id);
    struct group *grentry = getgrgid(getgid());
    struct group *admin_group = getgrnam("admin");
    while(*admin_group->gr_mem != NULL) {
        if (strcmp(pwentry->pw_name, *admin_group->gr_mem) == 0) {
            return YES;
        }
        admin_group->gr_mem++;
    }
    return NO;
}
@end

现在,您只需要将nsprivileges.h导入到需要知道用户是否是管理员的文件中,然后使用命令[NSPrivileges hasAdminPrivileges]来找出答案(它将返回BOOL,因此很容易交易和)。希望对您有帮助。

这是我的参考:目标C和OS用户类型

最新更新