好的,我意识到这可能是不可能的......
我有一个运行linux的设备,它可能没有可见的用户界面。它将有一个打开的USB端口......我希望能够编写java以允许整个系统检测设备何时插入USB端口然后安装设备。
我知道如何从命令行执行此操作,但它需要“sudo”来分叉具有提升权限的新进程来执行任务。我不知道如何编写一个可以绕过的java程序(是的,我想绕过)mount的安全保护。
runtime.exec()并没有真正做我希望完成的事情。这是一个“无法在Java中完成”的问题吗?
我希望不借助外部可执行代码来做到这一点。
你无法绕过mount的安全保护。保护不是挂载。保护在内核中。
如果您偶然发现并发布它,它将被删除。
如果您可以控制正在运行的操作系统,则可以将选项user添加到/ etc / fstab中的mountpoint。在这样做之后,“mount / path”和“umount / path”在没有提升的情况下从runtime.exec()
工作。 mount
和umount
是setuid-root以允许它工作。
文件安装由主机操作系统控制。因此,控制挂载是通过系统调用完成的。您似乎使用的是Unix操作系统,因此这意味着系统调用接口是C.因此您可以使用JNI来调用需要进行系统调用的小型C函数。
但所有这些问题都取决于系统和特权操作。因此,该方法会产生可移植性和安全性问题。所以你可能会更好地重新考虑为什么你的程序本身必须这样做,而不是让控制组件(如systemd
)为你做。