怎樣創建一個可以修改不可以刪除的文件夾或文件呢?按如下方法設置:
然后在D盤打開cmd命令窗口運行:icacls 123
123 NT AUTHORITY\SYSTEM:(OI)(CI)(F) NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(M) BUILTIN\Users:(OI)(CI)(RX) NT AUTHORITY\Authenticated Users:(RX,W) 已成功處理 1 個文件; 處理 0 個文件時失敗
icacls 123\456
123\456 BUILTIN\Administrators:(DENY)(D) NT AUTHORITY\SYSTEM:(OI)(CI)(F) NT AUTHORITY\Authenticated Users:(OI)(CI)(RX,W) BUILTIN\Users:(OI)(CI)(RX) 已成功處理 1 個文件; 處理 0 個文件時失敗
icacls 123\789.txt
123\789.txt NT AUTHORITY\SYSTEM:(F) NT AUTHORITY\Authenticated Users:(RX,W) BUILTIN\Users:(RX) 已成功處理 1 個文件; 處理 0 個文件時失敗
如果輸出同上,則設置成功了。現在目錄456和文件789.txt即便是管理員也無法直接刪除,由於它們都在123目錄內,所以123也無法再刪除。
如果想要刪除時怎么辦,修改目錄和文件的權限,456目錄去除拒絕刪除權限,789文件修改“寫入”權限為“修改”權限即可。
windows目錄和文件權限實測總結 針對當前登錄用戶(可能具有管理員身份):
父目錄如無寫入權限則無法在目錄內創建任何對象
系統的標准修改(M)權限包含了刪除子權限,包含修改(M)即可刪除,但可以自定義實現我們通常理解的可修改不可刪除
顯式指定給對象的權限優先於對象繼承的權限,即指定的修改(M)大於繼承的拒絕刪除、指定的拒絕刪除大於繼承的修改(M)
如果子對象不可刪除,則會連帶其父目錄也無法刪除,但父目錄重命名不受影響
對象本身(應用於含該文件夾)無修改權限則右鍵菜單“刪除”前出現UAC圖標(盾牌),能否刪除還需要看父目錄是否有刪除子對象權限和該對象的子對象是否有刪除權限
對象本身(應用於含該文件夾)無寫入權限則右鍵菜單“重命名”前出現UAC圖標,能否重命名還需要看父目錄是否有寫入權限或刪除子對象權限
管理員如果具有容器(即父目錄)的控制權限,即使沒有容器內子對象的權限,甚至子對象本身有拒絕管理員刪除的權限,也仍然能夠刪除子對象
用戶有管理員身份時,子對象單獨拒絕刪除不起作用,但子對象的子對象即孫對象如去除刪除權限或添加拒絕刪除,則能達到拒絕刪除的目的
繼承拒絕刪除,再指定可以刪除,可以到達選擇性刪除的目的
意外發現:windows的重命名是通過父目錄的寫入+子對象的刪除實現的,從上文所述“重命名”首先需要對象本身具有寫入權限,然后父目錄也具有寫入權限,但實測發現對象本身只有寫入權限無法成功重命名,必須有修改權限(包含了刪除)才行。
另外可以證明這點的是,C#里面文件的Name屬性是只讀的,沒有對應cmd的rename命令的方法,只有一個MoveTo方法可以實現重命名(MoveTo含義就是用新名字復制一份到新位置然后刪除舊文件),而其他權限設置選項全部都有對應的方法和參數。
這說明了,如果想創建一個可以重命名但不可以刪除的文件夾或文件是做不到的。但創建一個可以刪除卻不可以重命名的文件夾或文件是可能的,如下圖第一種方案。
下面是更多測試結果:
上圖的子對象(即子目錄或文件)和父目錄權限如不一致,表示是手動修改或添加的,如一致,可以是直接繼承的。