在大多数(如果不是全部的话)Linux发行版上用root权限重启jar

我正在开发一个需要root /pipe理员权限才能正常工作的Java应用程序。 如果用户没有以这样的权限启动应用程序,我想通知用户并用这些权限重新启动程序。 我已经想出了如何在Windows和OS X上做到这一点,但无法在Linux系统上find方法。 在Windows上,我find了一个程序来提升你传递给它的任何命令,在OS X上可以通过运行一个简单的AppleScript来实现,但是在Linux上,根本就没有可移植的方法。

我的计划是使用gksu,但是最近我发现这在大多数Linux系统上都没有默认安装,也不是Debian,所以我也不能安装它。 是否有任何可移植的方式来重新启动应用程序的root权限,如果不是所有的Linux发行版和Java版本?

编辑:我能够检查程序是否以pipe理员身份在所有平台上运行。

你不能在Linux上干净地这样做,因为升级特权的想法在Linux中并不存在。 sudo实际上是特权执行的答案,但实际上所做的只是以root用户身份运行一个命令,这在概念上与以相同用户身份运行命令不同,但具有升级特权。

考虑一下这样的事实,即使是基线sudo (甚至不考虑gksudo或类似的),只是一个用户空间应用程序,而不是Linux的核心组件。 例如,Arch上的某个人可能还没有安装过它,如果他们喜欢用su来做事的话。

这种哲学与OS X和Windows(与桌面相关的)非常鲜明地对比,因此可以方便地管理和定期使用。 由于Linux在桌面和服务器发行版上都使用相同的内核,因此服务器环境中对安全性要求较高的内核往往会在内核级别上围绕这些类型的内容进行策略控制,因此您不会得到一个不具体的解决方案到某些类型的面向桌面的发行版。

还有一个文化差异。 Linux用户往往是那种需要对如何运行事物进行细粒度控制的人,大多数人可能会认为某些以ro​​ot特权作为病毒形式重新启动的东西:P

简单的答案:抛出一个错误消息,说应用程序需要root权限,退出一个非零的错误代码,称之为一天。 这或多或少是Linux-land中的“预期”行为。

Hack -y回答:如果你打算在图形环境中运行,那么把gksudo作为一个依赖关系与gtk (或者如果你使用qt或者其他类似的东西,等等)连接起来,然后用它来提示升级。 即使没有默认安装,您也可以利用Linux发行版的精美包管理,轻松安装,而无需您为此付出额外的努力。 在非图形环境中,你只是运气不好。

**至少,仅仅只有一个应用程序是不值得的,特别是考虑到你的应用程序可能成为任何试图编写一个新的rootkit的攻击媒介。