java - 以 Root 身份运行 Java 程序的一部分

标签 java security root

全部,

我想以 root 身份运行我的 Java 程序的一部分。只有一个特定的功能作为 root。程序的另一部分应该以启动该程序的用户权限运行。我只想以 root 身份运行以下代码,而其他代码则按原样运行。这是因为我看到这段代码在以 ROOT 权限运行时有不同的行为。

 try
    {
         addr = Inet6Address.getByName(host);
         isReachable = addr.isReachable(20*1000);
    } catch (UnknownHostException e)

提前致谢

最佳答案

Java 程序没有可移植的方法来更改有效用户 ID;即从以 root 权限运行更改为另一个用户。 (即使在 C 中,应用程序也不能随意在特权和非特权之间切换。特权切换是单向的。)

阅读 InetAddress.isReachable 的 javadoc它确实根据 JVM 进程的权限使用不同的机制。但是,isReachable 使用的两种方法都不能保证有效。例如

  • 某些防火墙可能会选择性地阻止 ICMP ECHO 消息,
  • 目标机器可能没有在端口 7 上运行 Echo 服务……或者端口 7 可能被防火墙锁定。

所以我会完全解决避免问题。只要尝试做您真正想做的事,而忘记使用isReachable。或者,如果它在您的控制范围内,请修复机器/网络,以便这两种机制都适用于您需要测试的机器。


@Geek - 你说你不能测试特定的端口,因为它们可以被阻止。好吧,任何都可以被阻止,包括 ICMP PING、ICMP ECHO 以及您可能用来测试主机是否可达的任何其他内容。

只有一件事真正重要:您能否与您实际要使用的服务对话。只有一种方法可以找出答案:尝试使用它。

或者换句话说,测试主机是否可用没有意义。主机不可用:特定服务可用。

关于java - 以 Root 身份运行 Java 程序的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5271731/

相关文章:

android - 绕过 android 5.1 的 android usb 主机权限确认对话框

java - 从 ArrayList 访问索引值并将它们存储在单独的新 ArrayList 中

java - 在Java中确定多播数据包的剩余TTL

php - 加盐密码安全

php - 在参数中设置 symfony 缓存目录

android - 卸载错误后无法安装应用程序

angularjs - 如何检测第一个 "/"路由调用?

java - 如何使用 JSON API 和 CloseableHttpClient 将文件上传到 Google Cloud Storage 存储桶?

java - 使用构造函数的 Graphics2D

security - 在 EVM 区 block 链中存储 secret