Windows

如何僅從 Windows 上的普通使用者刪除有關符號連結的刪除權限

  • November 9, 2018

我們有一個程序可以創建臨時目錄並HT%USERPROFILE%\AppData\Local\Temp那里工作,並在我退出程序時刪除臨時目錄。我想讓程序不在TempSSD 分區上生成其臨時目錄F:\Somewhere

不幸的是,該程序沒有任何設置來更改臨時目錄。此環境(Windows)安裝在 HDD 中,並具有 SSD 分區。(由於一些問題,我無法在 SSD 上安裝 Windows。)

所以,我想我HT%USERPROFILE%\AppData\Local\Temp哪個直接指向F:\Somewhere. 似乎奏效了。但是,我無法阻止程序刪除 symlink HT。換句話說,我需要在退出程序後一次又一次地進行符號連結。

如何防止從程序中刪除符號連結?

我嘗試過的解決方案

我試圖%USERPROFILE%\AppData\Local\Temp\HT從普通使用者中刪除有關符號連結的刪除權限(該程序由普通使用者執行,而不是 UAC 升級使用者)。

從屬性 -> 安全 -> 高級(?,我的環境是日本的,但似乎是高級的) 1. 禁用權限繼承 2. 為普通使用者、管理員和系統添加關於刪除權限的拒絕策略

但是程序可以刪除符號連結。

總結問題

如何防止從不是以管理員權限執行的程序中刪除指向目錄的符號連結?

PS對不起不尋常的詞。我使用的是日文視窗,所以我找不到正確匹配的英文片語。

補充筆記

  • 我不想完全將Temp目錄更改為另一個目錄/分區。只是目錄HT下而已~~/Temp/HT

更改符號連結的權限不起作用,因為父目錄上的“刪除子文件夾和文件”權限優先於符號連結本身的任何權限。在這種情況下,我不建議修改父目錄的權限,因為很多軟體都依賴於臨時目錄,並且對權限的任何更改都可能導致在許多情況下很難診斷的問題。

相反,您可以在符號連結上設置只讀標誌。請注意,您必須從命令行執行此操作,因為 Windows 資源管理器 GUI 不支持對目錄使用只讀標誌(參見腳註)。這些命令應該可以工作:

cd /d %temp%
attrib /L +r HT

您可能還需要更改權限以防止符號連結被移動或重置只讀標誌:

icacls HT /L /deny Everyone:(M)

仍然存在軟體將對無法刪除符號連結做出不良反應的風險,例如,通過崩潰。在這種情況下,除了嘗試設置以便根據需要自動重新創建符號連結之外,您無能為力,但幸運的是,這種情況很少見。

腳註:

Explorer 也不會顯示目錄的只讀標誌,甚至會建議使用者只讀標誌對目錄沒有影響,從某種角度來看,我想這是真的,因為它不會阻止目錄被重命名或移動,或者內容被改變,正如人們所期望的那樣。只讀標誌所做的只是防止刪除空目錄(或目錄符號連結,無論目標是否為空),但在這種特殊情況下,這正是需要的。

邊注:

需要阻止的特定訪問權限是寫入屬性 (WA) 以防止只讀標誌被重置和同步 (S) 以防止符號連結被移動到資源回收筒。應該注意的是,這種方法僅適用於目錄符號連結,而不是普通目錄,因為訪問目錄的內容需要同步權限。NTFS 中似乎沒有任何方法可以防止在不更改父級權限的情況下移動普通目錄。

引用自:https://serverfault.com/questions/939307