我正在嘗試使用我構建的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