gpt4 book ai didi

java - 使用 Java 进程设置 Linux ACL 权限

转载 作者:太空狗 更新时间:2023-10-29 12:41:23 26 4
gpt4 key购买 nike

我正在尝试使用我构建的 API 的结果更改对某些文件激活的 ACL 权限。

executorService.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("hello");
JSONArray data = ServerAPI.riskCheck();
if(data != null){
JSONArray policycontent = data;

for(int i = 0; i < policycontent.length(); i++){
JSONObject privilege = policycontent.getJSONObject(i);
String user = privilege.getString("user");
String filepath = privilege.getString("filePath");
String accesses = "";
if(privilege.getBoolean("read") == true){
accesses = accesses + "r";
}

if(privilege.getBoolean("write") == true){
accesses = accesses + "w";
}

if(privilege.getBoolean("execute") == true){
accesses = accesses + "x";
}
if(privilege.getBoolean("execute") == false && privilege.getBoolean("write") == false && privilege.getBoolean("read") == false){
accesses = "-";
}
try {
System.out.println("TRYING TO RUN:");
Process p = Runtime.getRuntime().exec("setfacl -m \"u:" + user + ":" + accesses + "\" " + filepath);
//p.waitFor();
int exitVal = p.waitFor();
System.out.println("Exited with error code "+exitVal);



} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println("setfacl -m \"u:" + user + ":" + accesses + "\" " + filepath);
}
}
System.out.println(ServerAPI.getRiskValue());
}
},1, 1, TimeUnit.SECONDS);

}

目前每1秒查询一次API,一旦“风险值”发生变化,就会获得新的权限。

我将其作为文件夹中的 JAR 运行,其中包含应对其授予权限的文件。

我以 root 身份运行 JAR。

我试图做一些简单的事情,例如在循环的每次迭代中将一行附加到与 JAR 相同目录中的文件,但是它没有做任何事情。

当我在终端中手动运行时,每个命令都是有效的命令。 System.out.println 用于确保命令被正确解释,但鉴于我尝试的命令并不重要,我已经没有想法了。

它每次也以状态 0 退出,尽管我也尝试使用 processbuilder 和该方法的变体,包括错误输出,但我无法调试。

这仅仅是我无法使用 Java 程序完成的事情吗?

提前致谢!

最佳答案

这类问题的常见根源是 Runtime.exec() 不提供 shell。如果您想在 shell 中执行命令,则需要实际执行 shell。

一种可能的解决方法是创建包含您要运行的命令的 bash shell 脚本。将 #!/usr/bin/env bash 放在脚本的顶部,以确保它由 bash shell 运行。

然后你可以 exec() 脚本,并向它传递你需要的任何参数。

编辑 - 过去我通过创建单个 shell 脚本作为应用程序安装的一部分来完成此操作,而不是动态创建它。如果你只需要做一件事,并且可以参数化脚本,这很有效。

关于java - 使用 Java 进程设置 Linux ACL 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42515049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com