第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java沙箱和ProcessBuilder

Java沙箱和ProcessBuilder

躍然一笑 2021-05-02 12:52:12
我按照本教程進(jìn)行操作,以實(shí)現(xiàn)插件代碼的Java沙箱。插件代碼已獲得以下權(quán)限運(yùn)行:private PermissionCollection pluginPermissions() {    Permissions permissions = new Permissions();     permissions.add(new FilePermission("/projects", "read,write,execute"));    return permissions;}  它工作正常。但是,我希望允許插件啟動(dòng)一個(gè)進(jìn)程,這些進(jìn)程也將受到這些權(quán)限的限制。例如,只要腳本位于/ projects目錄中并且不能在其他任何地方訪問,它就可以通過運(yùn)行“ python test.py”命令來運(yùn)行python腳本。類似于以下代碼,其中cmnd是“ python”,mainFilePath是python腳本,位于受該進(jìn)程限制的目錄中。public static File startProcess(String cmnd, String mainFilePath, String directory){        try {            ProcessBuilder pb =                    new ProcessBuilder( cmnd, mainFilePath);            pb.directory(new File(directory));            File f = pb.directory();            System.out.println(f.exists());            File log = new File(directory,"log.txt");            pb.redirectErrorStream(true);            pb.redirectOutput(ProcessBuilder.Redirect.appendTo(log));            Process p = pb.start();            return log;        }catch (Exception e){            e.printStackTrace();        }        return null;    }如果我從插件運(yùn)行此代碼,則會(huì)收到以下異常:java.security.AccessControlException: access denied ("java.io.FilePermission" "<<ALL FILES>>" "execute")    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)    at java.security.AccessController.checkPermission(AccessController.java:884)    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)    at java.lang.SecurityManager.checkExec(SecurityManager.java:799)    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1018)    at engine.LogHelper.startProcess(LogHelper.java:28)    at engine.ZEngine.build(ZEngine.java:13)    at Main.main(Main.java:29)這表明我需要授予所有文件“執(zhí)行”權(quán)限。但是我只需要對(duì)指定目錄中的文件進(jìn)行限制。那么如何在允許ProcessBuilder在受限目錄中啟動(dòng)進(jìn)程的同時(shí)實(shí)現(xiàn)沙箱?
查看完整描述

1 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

您運(yùn)行命令python(非限定),因此start()不知道文件在哪里,因此檢查是否允許execute訪問<<ALL FILES>>。由于您不在,因此被拒絕。

如果您指定文件的完整(絕對(duì))路徑python 授予對(duì)該python文件的訪問權(quán)限,那么它將起作用。

有關(guān)SecurityManager.checkExec(String cmd)權(quán)限檢查的說明,請(qǐng)參見的javadoc :

SecurityException如果不允許調(diào)用線程創(chuàng)建子進(jìn)程,則拋出a 。

通過execclass方法為當(dāng)前的安全管理器調(diào)用此方法Runtime。

此方法調(diào)用checkPermissionFilePermission(cmd,"execute")權(quán)限,如果cmd是絕對(duì)路徑,否則,它調(diào)用checkPermissionFilePermission("<<ALL FILES>>","execute")。


查看完整回答
反對(duì) 回復(fù) 2021-05-12
  • 1 回答
  • 0 關(guān)注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)