Mac OS X有任何图形“sudo”吗?

时间:2009-10-04 19:29:23

标签: macos shell sudo privileges gksudo

我正在用Java设计一个小软件。我不知道我正在做什么的术语/定义,但我提示从Java到终端的命令。像这样:

Process process = Runtime.getRuntime().exec("command");

我之前在Linux中已经这样做了,我使用gksudo来获取需要root密码的命令。

OS X中是否有gksudo?任何要求root密码的图形弹出窗口?

9 个答案:

答案 0 :(得分:19)

使用AppleScript shell脚本可以更好地编写自己的脚本:

#!/bin/sh
osascript -e "do shell script \"$*\" with administrator privileges"

cocoasudo看起来更美观,但已经部署了。

答案 1 :(得分:8)

这也看起来很有希望:cocoasudo

enter image description here

它使用OSX本机授权服务API:

  

对于基于Mac OS X Cocoa的应用程序,可以通过Authorization Services API提供sudo的附带功能。使用API​​可以提示用户输入用户名和密码,以请求升级权限。

     

...

     

对于那种情况,我写了一个小实用程序,我称之为cocoasudo。使用cocoasudo的方式与使用sudo的方式大致相同。但是,不会在终端窗口中提示用户输入密码,而是通过授权服务API获取对话框提示。

答案 2 :(得分:5)

如果您正在运行调用其他命令的shell脚本,我发现cocoasudo不起作用。您必须在所有子命令中使用cocoasudo,这会弹出每次调用的提示。

osascript解决方案似乎效果更好,但我需要调整它以使用涉及包含空格的路径的命令。

#!/bin/sh
export bar=""
for i in "$@"; do export bar="$bar '${i}'";done
osascript -e "do shell script \"$bar\" with administrator privileges"

答案 3 :(得分:4)

制作如下,在这个例子中我去创建一个文件夹/ var / lock并将你的权限设置为777:

String[] command = {
        "osascript",
        "-e",
        "do shell script \"mkdir -p /var/lock && chmod 777 /var/lock\" with administrator privileges" };
Runtime runtime = Runtime.getRuntime();
try {
    Process process = runtime.exec(command);
    BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
    String line;
    while ((line = bufferedReader.readLine()) != null)
            System.out.println(line);
} catch (IOException e) {
    e.printStackTrace();
}
在Linux上的

也许你可以用gksudo来做这个,但是在我测试并在这里发布结果之后我没有测试它。

答案 4 :(得分:2)

gksudosudo的GTK +版本。

您可以使用this clone,尤其是OS X。

答案 5 :(得分:2)

关注ZJR's answer后,我将其变为自动机,因此您可以将其用作服务或其他任何内容:

on run {input, parameters}
    do shell script "sudo open \"" & (POSIX path of input as string) & "\"" with administrator privileges

    return input
end run

或者,也许你只是觉得他的答案已经过时但仍然想要一个AppleScript,只需在脚本编辑器中写下这一行:

do shell script "[[your command]]" with administrator privileges

然后您可以make into an app将其用作服务或其他任何内容。

答案 6 :(得分:1)

应该使用本机OS X授权服务,而不是查看sudo和/或图形界面。

价:

[我知道这是一个迟到的答案......]

答案 7 :(得分:0)

这些答案中似乎有很多错误的信息。为了节省其他人一些时间,我发表了自己的发现:

首先,就像问题的海报一样,我也需要从Java 应用程序中提升权限

我把它分成了两个脚本。第一个脚本是从Java执行的,带有一些命令行参数。第二个脚本执行需要root权限的所有步骤。这个想法当然是在第一个脚本中使用cocoasudo以root权限执行第二个脚本。

我已通过广泛记录到单独的文件中确认脚本确实按照我的意图行事。当从命令行手动启动(当然具有普通用户权限)时,它们工作正常。

从Java应用程序启动时,我确实得到了cocoasudo提示,但没有任何反应。甚至不会显示第二个脚本的第一个日志记录输出。

当我更改第一个脚本以使用osascript时,再次确认一切正确,只要脚本运行,我甚至没有从Java内部运行时得到提示。

这是OS X Mountain Lion的全部内容。好像Apple构建了一些安全防护措施,可防止脚本在Java中以root权限执行。

由于cocoasudo本身实际运行,我倾向于认为解决方案是编写类似于cocoasudo的代码,但使用Cocoa API调用执行所有其他所需操作。然后也可以对其进行代码签名。

答案 8 :(得分:-3)

如果您正在使用终端,那么只需使用“sudo”,这将在终端本身提示用户的密码(而不是我认为使用图形弹出窗口的gksudo) 。 Sudo适用于Linux和OS X.