我正在用Java设计一个小软件.我不知道我正在做什么的术语/定义,但我提示从Java到终端的命令.像这样的东西:
Process process = Runtime.getRuntime().exec("command");
Run Code Online (Sandbox Code Playgroud)
我以前在Linux中做过这个,我用过gksudo需要root密码的命令.
gksudoOS X中有没有?任何要求root密码的图形弹出窗口?
我使用Eclipse作为我的IDE,当我运行我的应用程序时,我希望应用程序本身以root身份运行.我的程序当前检查它是否是root,如果不是,它会自动重启gksudo.但是,输出不会写入控制台.我无法使用sudo,因为它没有给我一个图形提示.(虽然我的程序是CLI,Eclipse不允许控制台交互)
升级我的应用程序的"正确"方法是什么?
是否可以使用sudo前端(如gksudo)来提升当前进程的权限?我知道我可以做到以下几点:
sudo cat /etc/passwd-
Run Code Online (Sandbox Code Playgroud)
但我有兴趣这样做:
sudo-become-root # magic function/command
cat /etc/passwd-
Run Code Online (Sandbox Code Playgroud)
我正在用Python写作.我的用例是我有一个以用户身份运行的程序,但可能会遇到根目录所有的读/写文件.我想提示输入密码,获得root权限,执行我需要的操作,然后再选择删除权限.
我知道我可以将管理逻辑和非管理逻辑分离到单独的进程中,然后以root身份运行管理进程(通过一些通信 - policykit/dbus非常适合这里).但我希望有一个更简单(虽然承认风险更大)的解决方案.
我正在考虑通过sudo运行Solaris的ppriv然后修改当前进程的权限.这似乎是一个hacky-but-workingable往返.但据我所知,linux不提供ppriv.
(我很惊讶,这不是明摆着了;它似乎是想要一个不常见的事情,并不似乎是一个安全漏洞,允许在工艺升级上一个新的进程的升级.)
我正在研究netbeans中的一个项目,该项目要求正在运行的项目具有root权限.
我希望每次按"运行项目"(F6)时我的项目都以root身份运行,所以使用相当于"gksudo javac Main",因为它有一个GUI.
一种选择是使用root权限启动netbeans,通过编辑"gksudo netbeans"的快捷方式轻松完成.但是由于我在netbeans中有多个项目,这意味着对于每个项目,我必须使用root权限运行netbeans,这不是我想要的.
当然,另一个选择是简单地从shell运行我的项目,但这也不是理想的.
我认为这可以通过改变这个项目build.xml文件来实现,但我很难搞清楚如何.
经过一些研究,似乎这是一个Apache Ant问题,我可以访问build.xml,我可以修改,所以我需要知道如何让Ant用sudo/gksudo运行我的项目.但是,我无法弄清楚如何做到这一点或是否有可能.
我的部分python程序需要管理员访问权限.如何使用类似于gksudo命令的GUI弹出窗口获得root权限?
我只需要我的程序的一小部分的root权限,所以最好只拥有特定功能的权限.
我希望能够做到这样的事情:
gksudo(my_func, 'description of why password is needed')
Run Code Online (Sandbox Code Playgroud) 我正在使用PyInstaller将两个脚本转换成一个可执行文件,其中一个调用另一个.我遇到的问题是我无法弄清楚如何捆绑这两个脚本并仍让它们相互引用:
导致该问题的代码是一个脚本,script1.py包含:
subprocess.call(['gksudo','python script2.py'])
Run Code Online (Sandbox Code Playgroud)
这在我正常运行脚本时工作正常,但是一旦它们被打包在PyInstaller中,我就不知道如何使调用工作.
我想用sudo来一个特设的基础上安装两个独立的网络驱动器作为我的NAS设备并不总是就行,所以我不相信,添加什么/ etc/fstab文件是必要的.
以下代码能够实现这一点,但是我不打算从终端运行脚本,因此sudo密码提示是我的问题:
#!/bin/sh
sudo mount -t cifs //10.1.1.9/Volume_1 /media/DNS323-A -ousername=user,password=pass,iocharset=utf8
sudo mount -t cifs //10.1.1.9/Volume_2 /media/DNS323-B -ousername=user,password=pass,iocharset=utf8
Run Code Online (Sandbox Code Playgroud)
我需要选择"在终端中运行"才能从文件浏览器窗口成功运行该脚本.因此我更喜欢使用gksudo,这将打开一个提示窗口,让我输入sudo密码.
但是,如果我改为使用以下代码,我必须输入两次sudo密码!
gksudo "mount -t cifs //10.1.1.9/Volume_1 /media/DNS323-A -ousername=user,password=pass,iocharset=utf8"
gksudo "mount -t cifs //10.1.1.9/Volume_2 /media/DNS323-B -ousername=user,password=pass,iocharset=utf8"
Run Code Online (Sandbox Code Playgroud)
在这一点上我试图将智能和使用gksudo选项"运行方式须藤"如下,但只有第一个驱动器安装,如第一个脚本上面会失败默默如果不从终端上运行:
gksudo -S "mount -t cifs //10.1.1.9/Volume_1 /media/DNS323-A -ousername=user,password=pass,iocharset=utf8"
sudo "mount -t cifs //10.1.1.9/Volume_2 /media/DNS323-B -ousername=user,password=pass,iocharset=utf8"
Run Code Online (Sandbox Code Playgroud)
我真正希望能做的是以下内容,但我不确定它是否可行:
gksudo this{
command1
command2
command3
}
Run Code Online (Sandbox Code Playgroud)
它只是我还是gksudo有短暂的记忆?
我需要使用 sudo 执行命令,并希望显示一个对话框窗口供用户输入其凭据。尝试使用 Applescript 自定义提示简直令人痛苦,并且使用内置的“以管理员权限执行 shell 脚本”不允许自定义窗口,因此用户知道请求来自何处。

当然,有一种方法可以显示一个窗口,让用户输入他们的凭据并将值发送回 sudo 以执行命令?cocoasudo看起来很有前途,但它也在提示窗口中写了“cocoasudo”,我需要用我的应用程序名称替换它。有没有人找到实现这种功能的解决方案?
gksudo ×8
sudo ×5
python ×4
root ×2
shell ×2
ant ×1
applescript ×1
eclipse ×1
executable ×1
java ×1
linux ×1
macos ×1
netbeans ×1
privileges ×1
pyinstaller ×1
unix ×1