我需要给java应用程序超级用户访问权限,以便在mac上查看受保护的文件
如上所述。 我搜索过网络,也打电话给mac的支持人员,惹恼了一位mac(OSX Lion)天才(出于绝望)。 我不知道如何做到这一点,我真的不想坐在终端的顶部,给它命令。我需要给java应用程序超级用户访问权限,以便在mac上查看受保护的文件,java,macos,root,Java,Macos,Root,如上所述。 我搜索过网络,也打电话给mac的支持人员,惹恼了一位mac(OSX Lion)天才(出于绝望)。 我不知道如何做到这一点,我真的不想坐在终端的顶部,给它命令。 有人遇到过这种情况或找到了解决方案吗?您可能需要将应用程序设置为root用户 > su Enter password: > chown root:wheel myJavaApp > chmod ug+s myJavaApp > exit >苏 输入密码: >chown root:wheel myJava
有人遇到过这种情况或找到了解决方案吗?您可能需要将应用程序设置为root用户 > su Enter password: > chown root:wheel myJavaApp > chmod ug+s myJavaApp > exit >苏 输入密码: >chown root:wheel myJavaApp >chmod ug+s myJavaApp >出口 现在,只要wheel组中有人运行myJavaApp,它就会作为其所有者(root)运行。只需确保您在车轮组(或任何其他组)中
或者,您可以使用chmoda+s myJavaApp。。。但这将允许任何人以root用户身份运行程序。我会仔细考虑的。如果您以root用户身份运行应用程序,应用程序将拥有对所有内容的完全访问权限 但是,这是一个危险的操作,因为它给予应用程序完全权限
另一种选择是以对相关文件具有所需权限的用户身份运行它。这可以通过将用户或文件放入适当的组中来实现。尝试查看Greg Guerin的库。它是一个特定于Mac的库,用于包装 以下是一个例子:
import glguerin.authkit.*;
Privilege priv = new Privilege("system.privilege.admin");
Authorization auth = new MacOSXAuthorization();
try
{
// This will cause an authentication prompt to be
// shown to the user, requesting the "system.privilege.admin"
// privilege.
auth.authorize(priv, true);
// If we reach this point, we can execute privileged programs.
// Load the secured file.
Process proc = auth.execPrivileged(new String[] { "/bin/cat", "/root/securefile" });
InputStream inputStream = proc.getInputStream();
// Use standard I/O mechanisms to read the input.
}
catch (UnauthorizedCancellation e)
{
// User chose not to authorize the application.
// Handle appropriately.
}
auth.authorize()
调用将导致标准的“请输入密码以允许程序X进行更改”对话框。如果需要,用户可以取消,从而引发glguerin.authkit.UnauthorizedCancellation
与使用sudo
或setuid
相比,此解决方案具有巨大的优势:它仅以root用户身份运行必要的任务。
最后一个问题:AuthKit的默认JNI加载程序使用Cocoa/Java桥,自Snow Leopard起,该桥已从Mac OS X中删除。因此,在最新版本的Mac OS X上,上面的代码将失败,并出现未满足的linkerror
。要解决此问题,请使用以下方法:
// Put this class somewhere:
public class AuthKitLibLoader extends LibLoader
{
@Override
protected File makeFallbackDir()
{
return new File(".");
}
}
// Then, before calling AuthKit (using the above example), do this:
// Hook in our "Snow Leopard-safe" extension to AuthKit (see below).
System.setProperty("glguerin.util.LibLoader.imp", AuthKitLibLoader.class.getName());
最后,请务必阅读以了解更多详细信息。您希望查看的文件具有哪些权限和所有者?您希望哪个用户进行查看?你所说的查看是什么意思?好吧,有了你令人敬畏的LibLoader提示,AuthKit现在可以找到jnilib了,但是Gregory()的新jnilib和旧jnilib都不能在10.8山狮上工作。似乎是64位的问题。。。有人可以为x86_64重新编译jnilib吗?