2012-07-05 78 views
2

我試圖阻止對給定工作目錄之外的文件的訪問。
我的第一次嘗試是使用chdirchroot,但chroot只能由root用戶使用。防止訪問給定工作目錄之外的文件

還有其他的可能嗎?我聽說過另外一個,但我不記得了。

也許一個簡單的函數來檢查路徑是否在工作目錄或第二個參數之外。

有關該計劃的一些細節:

  • 應在Linux上運行
  • 簡單的shell PROGRAMM沒有任何互動元素
  • 將一個目錄的說法,這是工作目錄

感謝您的任何建議。

編輯:
經過一番研究,我發現不同的約定,但我不能使用它們中的任何一個。

  • pivot_root
  • set_fs_root(Linux內核)

是否有可能使用嗎?

也許有可能打開一個給定的目錄中包含的文件。所以我使用參數文件路徑和「根」路徑來調用函數。

+0

你正在編寫一個shell或者一些相互作用的東西嗎?提供更多細節。 – tuxuday 2012-07-05 13:44:41

+0

如果它的一個shell,那麼你應該有一個命令chdir? – tuxuday 2012-07-05 13:54:07

+0

@tuxuday chdir的作品,但我總是可以訪問我的工作目錄之外的文件 – CSchulz 2012-07-05 15:00:32

回答

1

我假設你在Linux/MacOSX平臺上。有幾種方法。一種方法是爲您的程序創建一個擁有該目錄的特殊用戶,但不具有系統中其他任何內容的寫入權限*。另一種選擇是使用像SELinux這樣的程序只允許對程序進行某些操作,但這似乎是過度殺傷性的。

*:您必須總是給予用戶讀取權限。您的程序如何在沒有讀取glibc的情況下運行?

+0

是的,我正在使用Linux。我會在我的問題中加上這一點。程序應該以普通用戶身份運行,並且可以給出一個目錄作爲參數。該程序使用fopen,不得訪問工作目錄之外的文件。沒有可能使用SELinux或自己的用戶。 – CSchulz 2012-07-05 13:47:40

1

您可能想要查看受限制的shell;我認爲大多數常見的shell都有一個限制模式的選項,禁止cd,禁止更改某些環境變量以及其他一些內容。對於pdksh,這將是/bin/ksh -r。不過,對於其他shell,該選項會有所不同,因此請閱讀相應的man ual頁面。

+0

用戶不得打開受限制的shell只啓動程序。是否沒有選項來檢查路徑是否在允許的路徑內? – CSchulz 2012-07-05 15:23:14