我正在尝试使用我构建的API的结果更改某些文件上的活动ACL权限。使用Java进程设置Linux 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);
}
查询到的API目前所做的每1秒,一旦确认为“风险值”改变时,它会得到新的权限。
我正在运行它作为JAR文件夹中的权限应该制定的文件。
我以根用户身份运行JAR。
我试图做一些简单的事情,就像在循环的每次迭代中将一行附加到与JAR相同的目录中的文件一样简单,但它不会执行任何操作。
每个命令都是一个有效的命令,当我手动在终端中运行它时会起作用。 System.out.println被用来确保命令被正确解释,但是看到因为我尝试了什么命令并不重要,所以我没有想法。
它每次都会以状态0退出,尽管也尝试使用processbuilder和该方法的变体(包括错误输出),但我仍无法调试。
这是我无法使用Java程序做的简单事情吗?
提前致谢!
对不起,忘了改回原来的代码,我想修复。 – user7636904
对,我收回了我的近距离投票。不过,一般情况下,您应该使用'ProcessBuilder'而不是'Runtime.exec'。 – Aaron
好吧,我正在投票再次关闭你的问题,对不起:p这次它应该为你提供一个强大的解决方案!编辑:好吧,我还没有收回我以前的投票。这里去:http://stackoverflow.com/questions/21360619/is-there-a-java-interface-for-managing-unix-acl – Aaron