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

时间:2016-01-07 15:26:38

标签: java linux root

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

我的计划是使用gksu,但我最近发现默认情况下并没有在大多数Linux系统上安装,也没有安装Debian所以我也无法安装它。是否有任何可移植的方法来重新启动具有root权限的应用程序,对Java中的大多数(如果不是全部)Linux发行版和风格都有?

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

1 个答案:

答案 0 :(得分:0)

你无法在Linux上干净利落地执行此操作**因为升级权限的想法在Linux中并不存在。 sudo是特权执行的事实上的答案,但所有真正做的是以root身份运行单个命令,这在概念上不同于以同一用户身份运行命令但具有升级的权限。

考虑甚至基线sudo(甚至不考虑gksudo或类似)只是一个用户空间应用程序,而不是Linux的核心组件。例如,如果Arch喜欢只使用su进行操作,那么Arch上的某个人可能还没有安装它。

这种理念与OS X和Windows形成鲜明对比,后者以桌面为中心,因此可以方便地模糊管理和常规使用之间的界限。因为Linux对桌面和服务器发行版使用相同的内核,所以服务器环境的高安全性要求往往会在内核级别围绕这些类型的策略占主导地位,所以你不会得到一个不具体的解决方案。某种面向桌面的发行版。

还有文化差异; Linux用户倾向于那种想要对如何运行事物进行细粒度控制的人,并且大多数人可能会查看以root权限重新启动自身的东西:P

简单回答:抛出一条错误消息,说明应用程序需要root权限,退出时使用非零错误代码,每天调用它。这或多或少是Linux-land中的“预期”行为。

Hack-y回答:如果您要在图形环境中运行,请将gksudo作为依赖项与gtk(或kdesudo如果您使用{{}}相关联{1}}或其他东西等)然后用它来提示升级。即使它没有默认安装,你也可以利用Linux发行版的精美软件包管理来轻松安装它,而无需你用户的任何额外工作。在非图形环境中,你只是运气不好。

**至少,对于一个应用程序而言,它的价值还不够,特别是考虑到你的应用程序可以成为任何试图编写新rootkit的人的攻击媒介。