Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要给java应用程序超级用户访问权限,以便在mac上查看受保护的文件_Java_Macos_Root - Fatal编程技术网

我需要给java应用程序超级用户访问权限,以便在mac上查看受保护的文件

我需要给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

如上所述。 我搜索过网络,也打电话给mac的支持人员,惹恼了一位mac(OSX Lion)天才(出于绝望)。 我不知道如何做到这一点,我真的不想坐在终端的顶部,给它命令。
有人遇到过这种情况或找到了解决方案吗?

您可能需要将应用程序设置为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吗?