2012-07-11 28 views
0

我想创建使用管理员密码在bash中运行某些脚本的应用程序。例如:MacOS - 获取管理员密码的合法方式

echo **pass** | sudo -S reboot 

什么是最好的方式来得到它。

我看了this教程,以及所有我了解的 - 它是如何运行授权窗口。

AuthorizationRef authRef= NULL; 
AuthorizationItem right = { "com.my.app", 0, NULL, 0 }; 
AuthorizationRights rightSet = { 1, &right }; 
OSStatus status; 

if (AuthorizationCreate(
         NULL, 
         kAuthorizationEmptyEnvironment, 
         kAuthorizationFlagDefaults, 
         &authRef) != errAuthorizationSuccess) 
{ 
    NSLog(@"Could not create authorization reference object."); 
} 

status = AuthorizationCopyRights(authRef, &rightSet, kAuthorizationEmptyEnvironment, 
           kAuthorizationFlagDefaults | 
           kAuthorizationFlagPreAuthorize | 
           kAuthorizationFlagInteractionAllowed | 
           kAuthorizationFlagExtendRights, 
           NULL); 

有没有一种方法可以在此步骤后获取密码?

或所有这些错误 - 并存在另一种方式?

谢谢!

+5

不,当然授权API不会给你用户的密码。这将是非常愚蠢的。 – geoffspear 2012-07-11 12:15:23

+0

我是否理解正确 - 在shell中执行一些命令我应该创建第二个应用程序,它会这样做,而我的第一个应用程序应该调用具有权限的第二个应用程序,它是从授权API获得的?在这种情况下,命令将从管理员权限执行? – kaa 2012-07-11 13:52:03

回答

3

你不能(也不应该)得到实际的密码。操作系统甚至不知道它是什么。这是有意的。正如你注意到的,你应该创建一个小帮手程序,它的权限可以升级。

如果可能,你应该完全避开壳。这是非常脆弱的。编写一个纯粹的C/ObjC程序会更好,它可以完成你想要的任务并提升它的权限。