2010-09-28 102 views
0

是否可以禁止某些程序完全訪問文件? 由於我不希望它有任何訪問系統上的文件,是否有可能編譯它,所以它無法訪問文件流或運行它無論如何它無法訪問文件?c/C++禁止訪問文件

+0

不幸的是,操作系統是一個單身你不能做任何事情。 :-(請參閱:http://www.object-oriented-security.org/lets-argue/singletons在我看來,Linux需要一種方法來刪除進程的所有權限,以便您可以強制它使用IPC(通過 – Omnifarious 2010-09-29 02:46:13

回答

6

最接近你的就是在chroot監獄裏運行你的程序。

+0

我怎麼能chroot程序,所以它可能仍然可執行,我嘗試了幾種方法,但它會擺脫錯誤,因爲一些庫不能找到 – srolija 2010-09-28 18:04:16

+1

@ user460907 :如果你有權訪問源代碼,那麼你應該可以在那裏完成,不用麻煩,從jail外部運行程序,然後讓程序進入jail並chroot本身。或者,你可以啓動程序監獄,但所需的程序庫必須在監獄中存在谷歌,這裏有教程 – Thanatos 2010-09-28 18:08:41

+0

或使用SELinux ... – 2010-09-28 18:15:05

1

在非託管環境中,代碼無法告訴自己不應該做它不應該做的事情。 CAS僅是託管環境的一部分,運行時提供了額外級別的訪問控制。操作系統要阻止應用程序執行代表他們運行的用戶無法執行的操作。你應該能夠運行應用程序,就好像你是一個不同的,更有限的用戶一樣;那麼,您可以限制用戶對資源的訪問權限,操作系統將阻止代碼訪問它。

1

在Linux中,您可以將進程的所有者更改爲nobody。這是沒有什麼大的安全性增加,因爲沒有人仍然可以訪問文件等,但它比運行作爲本地用戶或根更好:

 struct passwd *pw = getpwnam("nobody"); 
     if (!pw) 
     printf("Error: Unable to look up info about user nobody"); 
     else{ 
     setuid(pw->pw_uid); 
     setgid(pw->pw_gid); 
     } 
0

從理論上講,你可以直接鏈接不鏈接fopen等。您可能必須使用靜態鏈接。


但是,當你遇到像這樣的需求時,你正在從錯誤的方向接近問題。這個黑客想要達到什麼目的? 爲什麼你想要這個嗎?

+0

即使像fopen()這樣的函數沒有鏈接,進程總是可以直接進行系統調用,而不需要任何外部庫代碼。 – caf 2010-09-29 09:45:11

0

在Windows下,你可以在一個restricted token

這需要比Windows API的只是一個基本的知識更啓動過程,但它是可能的。