2
我正在爲學生代碼執行加強沙盒。我認爲我很滿意學生們不能共享文件系統或信號上的數據,因爲我發現明確的規則規定了這些數據,並且他們作爲不同的非特權用戶執行。然而,當我創建共享內存(或更一般的IPC - 隊列或信號量)時,我很難查看文檔來確定哪些內容可以看到。如果你創建共享內存,任何人都可以在同一臺機器上打開它,或者有辦法控制它嗎?控制位於創建內存的程序中,還是由系統管理員限制?誰可以在Linux共享共享內存?
我正在爲學生代碼執行加強沙盒。我認爲我很滿意學生們不能共享文件系統或信號上的數據,因爲我發現明確的規則規定了這些數據,並且他們作爲不同的非特權用戶執行。然而,當我創建共享內存(或更一般的IPC - 隊列或信號量)時,我很難查看文檔來確定哪些內容可以看到。如果你創建共享內存,任何人都可以在同一臺機器上打開它,或者有辦法控制它嗎?控制位於創建內存的程序中,還是由系統管理員限制?誰可以在Linux共享共享內存?
同一個ipc命名空間中的任何進程都可以看到並(可能)訪問由同一個ipc命名空間中的其他進程創建的ipc對象。每個ipc對象具有與文件系統對象相同的用戶/組/其他rwx權限 - 請參見svipc(7)手冊頁。
通過使用帶有CLONE_NEWIPC
標誌的clone(2)系統調用,可以創建一個新的ipc名稱空間。您可以使用unshare(1)程序通過此或某些其他CLONE標誌對另一個程序執行克隆+執行程序。
如果我使用fork()而不是clone(),您認爲我可以使用unshare()而不使用CLONE_NEWIPC嗎? (這是一個很棒的函數名稱,讓我的問題看起來有點愚蠢) – daveagp 2014-09-27 19:45:57
看起來像'unshare'只是用適當的標誌調用clone + exec,所以它應該完全按照你想要的來做...... – 2014-09-27 19:57:34
是的,它似乎做的伎倆。手冊警告:「unshare()沒有實現可以反轉CLONE_SIGHAND,CLONE_THREAD或CLONE_VM的效果的標誌」,但是這些標誌看起來都與我的情況無關。謝謝! – daveagp 2014-09-27 20:50:24