2015-04-03 32 views
0

一個簡單的問題。有沒有可能鎖定在Linux下的目錄?實際上,我需要的是隻有一個應用程序(我寫的)可以訪問由此應用程序創建的指定目錄。所以基本上它是該應用程序的緩存目錄,所以用戶一直在搞這個。所以我希望在將來避免這種情況。解決方案鎖定一個目錄 - linux

是否有可能這樣做?以及如何(語言:C++)?

+1

你的意思是* cache *,對嗎? – Brian 2015-04-03 22:30:19

+0

簡短答案是否定的,你不能阻止一個目錄被一個正常的應用程序使用,並且不讓用戶看到/知道它在那裏。具體取決於你想阻止用戶做什麼,可能會有一些不同的解決方案(散列內容,以特權運行[注意,不會阻止具有root訪問權限的人從緩存中「搞亂」),等等) – 2015-04-03 22:32:58

+0

他們可以看到它,沒問題,但只要他們不亂它:編輯文件,寫入鎖定它們,更改它們的名稱和目錄本身的名稱 – user8060 2015-04-03 22:36:29

回答

0

在標準C++中根本不可能。

在Linux下,對可執行文件使用setuid權限,因此它在所有者的上下文中運行。然後,您可以鎖定目錄的訪問權限,因此只能由可執行文件的所有者訪問。

當然,這不會阻止用戶使用您的程序搞亂緩存。您需要設計程序,以防止用戶採取不恰當的行動。並確保所有者帳戶(可以專門爲您的應用程序設置)沒有超出其所需的特權。

0

如果您信任對其安裝的系統具有「root」權限的用戶,則可以依靠擁有特殊用戶或組,並使用setuid和/或setgid來防止他人篡改文件。但是,這確實意味着軟件的安裝程序需要擁有root權限,因此「any」用戶無法安裝該軟件,在某些情況下這可能不是一個好的解決方案。

更好的解決方案是真正要麼存儲在文件中的文件的哈希[加上一些常量數據或一些這樣的,所以用戶不能只是運行sha1 modified-file並得到「正確哈希」],或加密整個文件。

這些方法都存在的問題是,你仍然不能100%地依靠它 - 有足夠的動機和資源的人會弄清楚常數是什麼,只是在修改數據之後計算出新的散列在你的文件中。同樣,假設您的應用程序知道如何解密文件,可以對應用程序進行反向設計以找到加密密鑰和加密方法。

因此,您正在與您的「用戶」進行一場「代碼大戰」(對冷戰的雙關語)。

有許多商業解決方案可用於許可證管理(我一直是FlexLM的用戶,但也有其他幾個)。這是一個更多的工作,可能會花費一點點的許可證費用,但如果您使用商業產品,您將爲自己節省大量的潛在頭痛。

+0

如果您不能相信系統上的特權用戶,那麼您可能也不能相信非特權用戶,並且您也不希望「任何」用戶安裝該軟件。許可證管理只是這個問題的一種形式 - 強制用戶遵守許可限制。另一方面,與授權很少有關,可以減少用戶意外或故意混淆數據並影響程序運行的可能性。後者不是代碼大戰 - 它只是限制程序的使用,因此可以實現服務質量。 – Peter 2015-04-03 23:19:26

+0

我只是指出,系統允許root訪問本地機器(例如通過「sudo」)並不罕見,因此普通用戶無論如何都可以訪問任何文件。無論是我目前和以前的工作地點,我和我的所有同事都可以訪問root,以便輕鬆安裝新版本的軟件,而無需等待IT部門的某個人參與進來。 – 2015-04-04 10:42:32

相關問題