仅为标准帐户请求管理员权限

时间:2015-05-02 09:06:14

标签: objective-c cocoa security elevated-privileges smjobbless

我正在通过我的应用程序将一些文件移动到/ Applications目录,并使用SMJobBless()来提升管理员权限。

但是它会提示输入任何类型的帐户管理员凭据或标准用户,我们是否可以使用任何objective-c API对标准用户进行检查并询问管理员凭据?

编辑 - 如果有人尝试或经历过安装Dropbox的过程,那么Dropbox安装程序会做同样的事情(即它只要求标准帐户的管理员权限将其.app文件复制到/应用)。

1 个答案:

答案 0 :(得分:1)

根据另一个问题的答案,我已经制作了一个似乎适合你的文件(我刚刚将它从C翻译成了Objective-C并删除了printf' s链接在答案的最后)。

<强> 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 ,所以很容易处理)。希望对你有帮助。

以下是我的参考: Objective C and OS user type

相关问题