2023年5月31日 星期三

[重要]小心Windows 對於檔案複製與剪下的NTFS權限變化,同樣的行為操作,在不同磁碟,也會不同。

[重要]小心Windows 對於檔案複製與剪下的權限變化,同樣的行為操作,在不同磁碟,也會不同。

因為經常被雷到,所以爬許多文,特別紀錄一下。
對於微軟的這個設計,感到很頭痛,但又拿他沒辦法。




問題:
請教各位大大有關Windows File Server的權限問題,如果我在同一個磁碟下剪下檔案貼到另一個路徑的資料夾底下時,其檔案的權限卻依然是原先設定的權限,沒辦法套用新的父資料夾權限。比如說A主管將他的個人資料用剪下貼上的方式移動到B主管的個人資料夾去,但B主管卻無法讀取A主管放過去的資料,才發現其檔案的權限是先前A主管設定只有他自已可以讀取而已,並未被改變成B主管的資料夾權限。請教各位大大,是不是有方法能讓其檔案不管是用剪下貼上的方式或是用複製貼上的方式都能讓檔案的權限就直接套用新路徑下的父資料夾權限呢?




解答:
  1. 複製貼上的操作方式,是在新的目錄建立新的檔案,因此複製過去的檔案會繼承該目標目錄的存取權限,亦即原檔案的 NTFS 權限並不會跟著過去
  2. 剪下貼上可分成 2 種狀況:
    • 相同磁碟
      原檔檔案的 NTFS 權限會被保留,可視為替檔案重新命名的操作
    • 不同磁碟
      同 1. 所述:原檔案的 NTFS 權限並不會跟著過去



===================

之前在客戶那邊發生過好幾次檔案權限不足的問題,每次客戶拿到我們提供的更新檔,他都會先將檔案先複製到「桌面」,然後才會「搬移」到 C:\inetpub\wwwroot 網站目錄,結果每次更新檔案都會發生權限不足的問題,且他每次更版都要手動調整那些複製進去的檔案的檔案權限,這都是起因於 NTFS 權限在檔案被複製或搬移時雖時都有可能發生權限的變更,此基本且重要的觀念不可不知!

將檔案從一個目錄「複製」到另一個目錄時 ( Ctrl + C , Ctrl + V )

由於「複製」檔案時,視同在「新目錄」下「建立新檔案」,所以複製檔案時原本該檔案的 NTFS 權限並不會帶過去,而複製過去的檔案會直接繼承該目標目錄的存取權限。

例如:我要將 C:\DirA\test.txt 複製到 C:\DirB\test.txt 時,C:\DirB\test.txt 的權限就會變成是繼承 C:\DirB 目錄的 NTFS 權限!

將檔案從一個目錄「搬移」到另一個目錄時 ( Ctrl + X , Ctrl + V )

在「搬移」檔案時,情況稍稍複雜一些,共有兩種狀況:

1. 在相同磁碟之間搬移檔案 ( 例如從 C:\DirA 複製到 C:\DirB )

這種情況下,檔案被搬移過去後,檔案的 NTFS 權限會被完整保留
這種相同磁碟搬移檔案的過程就好像在同一個目錄下將檔案「重新命名」一樣,而在作業系統中實際上也真的只是做重新命名的動作而已!
2. 在不同的磁碟之間搬移檔案( 例如從 C:\ 複製到 D:\ )

這種情況與「複製」檔案是一樣的,檔案必須先在目的磁碟建立新檔,然後再將來源檔案刪除!
換個角度想,如果你有一個 50GB 的大檔案,如果從 C:\DirA 目錄搬移到 C:\DirB 目錄,也許只要 1 秒的時間,但是若你將這個 50GB 的大檔案,從 C:\ 目錄搬移到 D:\ 目錄,可能會花上 10 分鐘之久。
額外補充一個不算觀念的觀念(算常識)

如果你將檔案搬移或複製到非 NTFS 的檔案磁區 (例如: FAT, FAT32, … ),那麼所有的 NTFS 權限也將會全部遺失。
如果你的檔案從非 NTFS 的檔案磁區複製或搬移到 NTFS 的檔案磁區 (FAT, FAT32, … ),那麼這些檔案會直接繼承目的目錄的權限。
簡言之:FAT, FAT32 沒有權限概念!
所以,如果你的 USB 隨身碟不是 NTFS 權限的話(大部分都不是),那麼也就不用那麼考慮權限變更的問題。
這一個簡單的小觀念可能會對網站部署造成大影響,因此不可不知!






資料來源
https://social.technet.microsoft.com/Forums/zh-TW/2aca73ee-9051-4903-ba4e-a881f8409b0f/21098199792728426696360282104021516199682049130913308793034021?forum=generalsecurityzhcht

https://blog.miniasp.com/post/2010/02/25/NTFS-file-permission-changes-during-copy-and-move

沒有留言:

如何在Windows的事件檢視器event viewer,查詢開機關機的紀錄

Windows 如何 事件檢視器 查詢開機關機紀錄 Step1: 打開windows的 「 事件檢視器 」,開啟「 建立自訂檢視… 」視窗,在「事件記錄檔」選項,將「Windows 紀錄」內勾選「系統」選項。 Step2: 內含/排除事件識別碼: 」排除事件識別碼打「6005,6...