某伺服器最近由Windows 2003升級到Windows 2008 R2,原本複製檔案到該伺服器的排程發生存取被拒錯誤,經偵察獲得以下線索:
- 主症狀為使用該伺服器的本機管理者帳號(該伺服器未加入網域)從遠端機器存取其C$、D$等系統內建網路分享出現Access Denied
- 同一排程作業在升級Windows 2008 R2前可行
- 確定帳號密碼無誤,因為使用同一帳號可以Terminal Service登入問題伺服器
- 若另開一個網路分享並授與該帳號讀取權限,可順利存取無誤
同事提供情資一則,原來這是Windows Vista起(亦適用Windows 2008+)加入的新政策-UAC Remote Restriction(詳情請參考KB951016):
概念很簡單,啟用UAC之後,每次動用管理者權限都要額外提示及確認,若假冒來自遠端的存取就能繞過UAC直接以管理者權限存取機器,有可能淪為安全漏洞。故Windows預設會一併啟用UAC Remote Restriction,落實以下原則:
本機帳號 (Security Account Manager,SAM使用者帳號)
當使用隸屬本機管理者群組(Local Administrators)帳號連上管理用的網路分享,如:\\ remotecomputer \Share$,該連線將不會被賦與完整管理者權限,如需使用管理權限執行作業,必須以遠端協助(Remote Assistance)或遠端桌面(Remote Desktop)方式互動式登入。
網域使用者帳號 (Active Directory 使用者帳號)
當使用AD帳號遠端連線管理用的網路分享,若該帳號屬於本機管理者群組,則不受上述UAC Remote Restriction限制。
用Windows 2008跟C$/D$做法已好一段時間,之前一直沒遇到問題是因為都是用AD帳號,這台機器性質特殊沒加入網域,只能使用本機管理者帳號,一升級到Windows 2008立刻爆炸。
解決方法有兩種:
- 避用 C$、D$,另開網路分享滿足檔案傳輸需求,如此可繼續享有UAC Remote Restriction的保護(建議做法)
- 透過Registry關閉UAC Remote Restriction,位置:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy REG_DWORD –> 1。(安全性較差,不建議)