標籤:

windows系統關於用戶和許可權的邏輯是怎樣的?

不是剛接觸電腦 以前也接觸過一些編程 只是沒有深究過系統的細節問題 但是作為計算機專業的大一新生 還是要了解這個系統的基本邏輯的吧(因為題主約等於計算機小白 所以上百度也不知道怎麼問 於是想請教知乎大佬 可以講的詳細些

就是國慶閑著沒事,我在自己搗騰配置vim,然後發現打開一個應用除了正常雙擊,還可以右鍵以管理員身份打開,想知道這和一般的打開方式什麼區別,許可權不一樣嗎?(我是win10,這台電腦上就我自己的一個微軟賬戶,所以我就是管理員對吧)還有我不明白的是,我就是用我的賬戶開的電腦啊,為什麼我有時候開文件會沒有管理員許可權(比如我寫不了一個只讀文件,但是我可以在這個文件的屬性里把所有用戶的寫入許可權勾上,然後就可以寫入了,所以這又是個什麼邏輯)貌似這個問題和這個文件所在路徑有關?還有應用是可以右鍵以管理員身份運行的,文件貌似右鍵就沒有這個,所以怎樣在打開文件的時候確定自己是以管理員身份打開的啊?

還有好幾處屬性涉及管理員許可權設置的地方(以vim為例):1.桌面上快捷方式的屬性里(1)快捷方式選項卡-高級,裡面可以勾選以管理員身份運行(2)兼容性選項卡-設置框里可以勾選以管理員身份運行此程序 (3)安全選項卡可以更改組或用戶名(這些組和用戶名都是啥,我電腦上不就我一個帳號嗎)許可權2.gvim.exe屬性中有上述(2)、(3)設置 3.***.vim文件屬性中有上述(3)設置。因為不清楚整個邏輯 所以我自己手動瞎逼設置其實我並不知道這些設置到底意味著什麼 感覺很凌亂

還有win10的windows設置和控制面板什麼關係?還有為什麼我的計算機管理-系統工具里沒有組或用戶名這一條?


你是管理員,然而桌面並沒有管理員許可權,他代表的是另一個沒有管理員許可權的你。如果你自己要干一些管理員才能幹的事情,你就要明確地授權它以你的管理員身份來干,這就叫以管理員身份打開。

如果你不是管理員,那在UAC裡面就要輸入管理員的賬號和密碼。

通常來講,你雙擊打開一個文件也好,右鍵運行一個程序也好,其實都是資源管理器在替你打開,而不是你自己在打開。所有程序都是從桌面開始的,所以默認任何東西都沒有管理員許可權。

除了你明確授權的,不管是運行的時候,還是百度、360等全家桶系列軟體在安裝的時候讓你授權然後裝一大堆驅動程序進去。因為驅動程序只要在安裝的時候授權一次,終身管理員。


管理員身份運行會使用具有完整許可權的用戶令牌啟動進程。默認情況下,新進程是用受限用戶令牌啟動,受限令牌上有個BUILTINAdministrators=DenyOnly,這會禁止AccessCheck函數讓用戶令牌的使用者以管理員的身份獲得許可權。另外SeBackupPrivilege等影響整個機器的特權被從受限令牌上移除。受限令牌和未受限令牌實際上是位於不同登錄會話中的,所以不會共享文件夾映射、網路共享連接這樣的每會話對象。

另外,管理員身份運行的進程會處於高完整級別中。處於中、低或者應用容器完整級別中的進程不能訪問高完整級別的資源,例如不能向高完整級別進程的窗口發送消息,除非高完整級別進程預先開後門,也不能跨完整級別拖放。

在啟動進程之前會切換到安全桌面運行consent.exe來取得用戶的同意。至於為什麼需要在安全桌面……那是因為以前版本的Windows的安全窗口和應用程序共享一個桌面的時候,可以注入DLL到winlogon進程接管安全窗口的窗口過程。在視頻驅動不給力的時候,桌面切換會很慢。如果被啟動的exe有顯示數字簽名,那麼啟動之前還要驗證exe文件內容是否匹配數字簽名,這個需要的時間隨exe文件大小而異。


就是國慶閑著沒事,我在自己搗騰配置vim,然後發現打開一個應用除了正常雙擊,還可以右鍵以管理員身份打開,想知道這和一般的打開方式什麼區別,許可權不一樣嗎?

確實不一樣,使用管理員運行會使用管理員許可權。而一般軟體使用雙擊運行僅使用User許可權,即使執行人是管理員。

這是 Windows 的一種安全策略。這個策略很複雜我不是 AD 和策略組的人說不太明白。

還有應用是可以右鍵以管理員身份運行的,文件貌似右鍵就沒有這個,所以怎樣在打開文件的時候確定自己是以管理員身份打開的啊?

並不是User本身去打開文件,而是User通過雙擊文件,調用文件打開方式指定的應用程序,應用程序會將打開自己的用戶的許可權信息和文件的許可權信息進行對比來決定用戶是否有權利讀寫。如果用戶的User許可權無權進行操作而該User可以提供管理員許可權,系統會詢問是否使用管理員許可權來完成這個操作。

甚至你能看到一個文件,也是Windows explorer.exe 在起到傳遞用戶許可權的作用。

1.桌面上快捷方式的屬性里(1)快捷方式選項卡-高級,裡面可以勾選以管理員身份運行(2)兼容性選項卡-設置框里可以勾選以管理員身份運行此程序 (3)安全選項卡可以更改組或用戶名(這些組和用戶名都是啥,我電腦上不就我一個帳號嗎)許可權2.gvim.exe屬性中有上述(2)、(3)設置 3.***.vim文件屬性中有上述(3)設置。因為不清楚整個邏輯 所以我自己手動瞎逼設置其實我並不知道這些設置到底意味著什麼 感覺很凌亂

(1)和(2)都是讓這個應用程序以管理員模式打開,只不過(1)是一過性的,(2)是半永久的。

(3)是可以編輯當前用戶和用戶組的許可權,比如原來Users用戶組只有讀許可權但是不能完全控制,你改成完全控制之後Users組和Administrators組就有一樣的許可權了,這是一種提權方式。

微軟不建議用戶在日常使用計算機時提升自己的許可權到完全控制。

微軟不建議終端用戶在日常使用計算機的時候用管理員許可權登陸。

都是為了你們的安全考慮呀!


不是剛接觸電腦 以前也接觸過一些編程 只是沒有深究過系統的細節問題 但是作為計算機專業的大一新生 還是要了解這個系統的基本邏輯的吧(因為題主約等於計算機小白 所以上百度也不知道怎麼問 於是想請教知乎大佬 可以講的詳細些

我不是專業的,大概答一下,錯漏難免。

既然你是這個專業的學生,想要更深入全面地了解這方面,建議你先從微軟官方的文檔、博客等入手:

Inside Windows 7 User Account Control

Windows Security Model

User Account Control

這篇來自著名的Old New Thing博客:

泰勒斯威夫特的歌名寫一段話?

不過這篇好像被人吐槽過:https://twitter.com/hFireF0X/status/765813010782908416

PS:根據UACME里的幾個繞過方式,實際上UAC開到頂也是Meh(逃)

關於UAC和Flash漏洞:

The Risks of Disabling the Windows UAC

Office的沙箱"受保護的視圖"不會載入文檔里嵌入的Flash,然後Flash里搭載的內核漏洞利用代碼就廢了。如果你關了UAC,微軟就會一併把Office的沙箱廢了,所以建議你開著。

PS:吐槽一下,有多少用戶注意這個了……隨手一點不還是BOOM(逃)

UAC繞過的詳細分析:

UAC攻擊剖析 | MottoIN

2007年的吐槽文,Vista的新安全模型是個笑話么?

https://theinvisiblethings.blogspot.com/2007/02/vista-security-model-big-joke.html

多搜一搜就能找到不少資料(也許需要科學上網、用Google搜英文內容)。深入研究我自然幫不上了。

我寫得這一堆雜亂無章,而且很可能犯望文生義之類的錯誤。

就是國慶閑著沒事,我在自己搗騰配置vim,然後發現打開一個應用除了正常雙擊,還可以右鍵以管理員身份打開,想知道這和一般的打開方式什麼區別,許可權不一樣嗎?(我是win10,這台電腦上就我自己的一個微軟賬戶,所以我就是管理員對吧)還有我不明白的是,我就是用我的賬戶開的電腦啊,為什麼我有時候開文件會沒有管理員許可權(比如我寫不了一個只讀文件,但是我可以在這個文件的屬性里把所有用戶的寫入許可權勾上,然後就可以寫入了,所以這又是個什麼邏輯)貌似這個問題和這個文件所在路徑有關?還有應用是可以右鍵以管理員身份運行的,文件貌似右鍵就沒有這個,所以怎樣在打開文件的時候確定自己是以管理員身份打開的啊?

首先,Windows啟動了,要載入各種驅動和服務。服務的配置在註冊表裡,可以配置服務進程用什麼賬戶運行。

計劃任務就是其中一個服務。計劃任務也可以配置用什麼賬戶、什麼許可權運行。

糾錯:CreateExplorerShellUnelevatedTask這個計劃任務應該是我望文生義了,登錄時啟動explorer降權和它沒有關係。

據猜測,它是explorer發現自己以管理員身份運行時,用來給自己降權的:What"s "CreateExplorerShellUnelevatedTask" ?

我重現了一下(Win10 15063 x64):如果結束explorer.exe進程,再以管理員許可權運行它,explorer.exe就會重新創建、啟動這個計劃任務來啟動一個降權的自己,原先有管理員許可權的進程會退出。不知道這個計劃任務有沒有其他用途。

1.如果啟用了UAC(通常的情況,註冊表EnableLUA=1),管理員賬戶登錄時,explorer.exe是降權啟動的,這玩意(資源管理器)就是桌面圖標、任務欄、開始菜單、文件夾窗口,它就是Windows的圖形Shell嘛。

然後,你雙擊東西,一般都是explorer啟動一個子進程(服務和計劃任務不是),繼承到的自然就是降權的令牌(filtered token)。

2.如果禁用了UAC(進入審核模式安全模式時,或者手動設置過註冊表、組策略時)管理員賬戶登錄時就不會降權啟動explorer.exe。然後,雙擊東西繼承的自然是full token,完整的管理員許可權

3.如果壓根沒用管理員賬戶登錄,那連降權都不需要了,本來繼承的就是沒管理員特權的token。

PS:Win7的控制面板里,把「用戶賬戶控制」拉到底「從不通知」就是徹底關閉UAC,運行程序不降權;Win8以後,改成了降權運行、程序要求提權時靜默提權。

PPS:微軟本來就是對UAC放棄治療的——UAC is not a security boundary,而且目前狀況已經慘不忍睹(其實也在修,但不是當作安全漏洞那樣對待):hfiref0x/UACME,如果想防禦請用標準賬戶,別用管理員賬戶。

A.對於管理員賬戶、啟用UAC的情況,具體來說:

A1.如果雙擊的是一個可執行文件,比如exe,系統會根據多種因素(比如你說的lnk里的兩個「以管理員身份運行」複選框、文件名、廠商是否匹配系統內置兼容性資料庫,右鍵直接選以管理員身份運行……等等)決定是否需要提權,如果認為需要提權,consent.exe就會粉墨登場,彈出一個UAC窗口了。

組策略里還有更細化的配置:不彈窗、靜默提權;彈窗提示輸入密碼;彈出提示確認(不輸密碼,只用點個「是」);彈窗時使用安全桌面。

額,摳門的微軟把家庭版的組策略閹割了。不過你仍然可以用註冊表(逃)。

(吐槽一下,好像也沒有簡單的辦法能讓它不彈窗、不提權?)

也許你看看看這篇帖子:Windows 7, trigger uac depends on application name?

A2.如果雙擊的不是可執行文件,explorer會去註冊表裡查文件關聯,然後根據關聯設置啟動對應的程序。具體要不要提權,先依照上面雙擊可執行文件的情況,然後就是程序自己來做決定了,比如程序可以在發現許可權不夠時申請提權。

PS:提權後進程就重啟了,這個和HIPS的攔截/放行不一樣

A3.右鍵菜單里有個「以管理員身份運行」,各種第三方軟體的界面里,也可以做一個按鈕,點了就提權,還可以根據情況,比如發現訪問被拒絕就提權。

A4.按住SHIFT鍵,右鍵菜單里還有「以其他用戶身份運行」,然後需要輸入那個賬戶的密碼。如果是輸入了受限賬戶的用戶名密碼,那自然也是「降權運行」咯。

PS:「以管理員身份運行」和「以其他用戶身份運行」都是有API的,正確調用就可以實現這兩個目的。

A5.微軟還搞了UIPI機制,大致是降權的進程不能干涉高許可權進程的窗口。

因為這個機制,QQ(降權)的遠程協助點了任務管理器(已提權)就會卡住不動,拖放文件也可能沒反應。

A6.管理員可以強制重置任何賬戶的密碼(這樣會導致那個賬戶的證書私鑰、憑據管理器等加密數據丟失),但是不能像Linux那樣直接su就以其他用戶身份運行。

A7.各種ACL仍然可以設置拒絕管理員賬戶訪問,但管理員賬戶可以強製取得所有權可以把拒絕訪問的規則刪掉

A8.每個賬戶(無論是否管理員)的文件默認都不允許其他賬戶訪問,但管理員可以強制改掉ACL來運行自己訪問。管理員還可能用其他猥瑣手段繞過ACL。

B.如果是管理員賬戶登錄,但沒啟用UAC:

B1.程序本來就繼承到full token了,也不需要彈窗提示提權了。

B2.各種管理員特權都有了,各種ACL里仍然能設置拒絕管理員訪問……不重複講了。

B3.IE和Office會放棄沙箱(也就是保護模式/受保護的視圖),UWP應用/Metro風格應用無法啟動。Chrome、Firefox等其他應用似乎沒這個問題。

Win10 15063之後這個問題(也許是有意為之?)好像修正了。

B4.程序仍然可以選擇降權運行,比如Prcess Explorer、PsExec就有這個功能。

C.如果是受限賬戶登錄:

C1.能做的事情受到限制,不能訪問其他賬戶的進程、文件等,但同一賬戶運行的應用之間並沒有隔離,鍵盤記錄、遠程控制木馬仍然可以工作。

C2.標準用戶下,程序照樣可以修改各種設置、添加自啟項、註冊explorer插件等,只是不影響別的賬戶,隻影響自己。

被UAC降權的管理員其實也是這樣。

C3.需要提權時,當然不能點個「是」就OK了,需要輸入管理員賬戶密碼。組策略里還能配置成直接拒絕提權。

對於管理員許可權,無論是Administrator、SYSTEM、TrustedInstaller、你自己開的管理員賬戶,其實都可以像Linux里的root那樣看待,root可以做任何事情!

1.可想而知,有了管理員許可權,就可以註冊服務/計劃任務等,然後程序可以隨時拿到管理員許可權,不需要用戶首肯。

規矩的軟體會用來自動更新、規避UAC彈窗,提升用戶體驗;流氓軟體/木馬自然可以利用這些偷偷幹壞事。

2.管理員還能載入內核驅動(DSE目前是個雞肋,防君子不防小人的),有了驅動,就可以直接在底層攔截系統調用,干涉各種過程——開發者可以利用內核驅動做各種事情,比如監視瀏覽器(比如迅雷、IDM),他們可以做出透明加密軟體如VeraCrypt,網路/USB抓包軟體如Wireshark,還可以做出冰點還原、HIPS系統……

我把HIPS理解為:內核驅動可以重新定義許可權。

打開一個文件時,NTFS文件系統驅動會檢查ACL,如果需要拒絕訪問,它可以返回一個ERROR_ACCESS_DENIED。

HIPS呢?HIPS開發者可以編寫一個minifilter驅動,這個驅動正確註冊後,就可以攔截各種文件操作,然後它也可以做類似的事情:返回ERROR_ACCESS_DENIED,拒絕訪問。

你也許可以安裝一個Easy File Locker來體驗一下:XOSLAB.COM

當然,對於壞人來說,也可以拿來作惡,比如拿來做內核級Rootkit,把木馬藏起來,讓管理員發現不了。國產流氓也會利用內核驅動來干鎖主頁、鎖默認瀏覽器之類的猥瑣事情。

索尼、卡普空用內核驅動做過DRM防盜版,結果因為做得太過分(Rootkit性質、爆安全漏洞)被噴慘了……

騰訊用內核驅動做了遊戲保護系統,用來反外掛/防盜號,但是這玩意也因為動不動出問題被用戶吐槽。對於做外掛的人來說,當然也要用內核驅動來對抗咯。

內核驅動還可以被用來繞過各種ACL,可以逃過ProcMon的監視,驅動也是強刪/反強刪鬥爭的焦點(滑稽):隱藏在windbg下面的攻防對抗 | 天融信阿爾法實驗室

你可以去下一個PCHunter小小體驗一把內核驅動的威力:惡意代碼檢測 虛擬機脫殼. Rootkit檢測 木馬檢測,當然,一大意系統就藍屏了,做好準備(滑稽)。

3.管理員賬戶能做更多猥瑣的事情,比如,可以直接對lsass.exe開搞——用著名的工具mimikatz,可以挖出更多憑據,用來橫向滲透。

還有好幾處屬性涉及管理員許可權設置的地方(以vim為例):

1.桌面上快捷方式的屬性里

(1)快捷方式選項卡-高級,裡面可以勾選以管理員身份運行

快捷方式就是一個擴展名.lnk的普通文件,鉤了這個就是修改了lnk文件的一個位元組——系統會根據這個決定要不要提權。

(2)兼容性選項卡-設置框里可以勾選以管理員身份運行此程序

這個是保存在註冊表裡的:HKLM或HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers

HKLM是對本機所有賬戶生效,HKCU只對當前用戶生效。

提權效果和上面應該一樣。

(3)安全選項卡可以更改組或用戶名(這些組和用戶名都是啥,我電腦上不就我一個帳號嗎)許可權

文件屬性-安全么?那是NTFS ACL,可以控制允許/拒絕對這個文件(夾)進行某種操作,我不說你也看到了,規則可以設置得非常細緻,可以針對單個用戶(比如Guest、Administrator、SYSTEM、你自己在用的賬戶)、一類用戶(比如Everyone、Authenticated Users)或一組用戶(比如Administrators、Guests、Users等),同時可以針對讀取/執行/刪除等具體操作。

PS:其實還有別的東西有ACL可以設置,比如進程,用ProcExp就可以(打個粗略的比方,遊戲進程拒絕外掛修改它的內存);甚至設備對象也可以,用WinObj設置NT Object的ACL。

你作為用戶,當然可以新建賬戶,控制面板里就把賬戶簡化為管理員和標準用戶(受限用戶)兩種了。

除了用戶自己新建的賬戶,系統里還有內置的賬戶,比如Administrator、LOCAL SERVICE、NETWORK SERVICE、SYSTEM等等,他們都有特定的用途

比如TrustedInstaller,它操作文件、註冊表時受到限制很少,是給安裝程序用的;

還有內置管理員Administrator,好像很多人把它當超級管理員,但實際上用戶自己新建的管理員賬戶許可權和它是一樣的。內置管理員應該是留給審核模式(sysprep /audit)、安全模式等情況下使用的,並不是給日常使用準備的。

2.gvim.exe屬性中有上述(2)、(3)設置 3.***.vim文件屬性中有上述(3)設置。

(2)gvim.exe的屬性里勾了以管理員身份運行,那無論你雙擊gvim.exe還是雙擊關聯到gvim(用gvim打開)的文件,都會提權(如果不想要彈窗,你可以調,參見本答案開頭)。

(3)gvim.exe的屬性-安全,NTFS ACL,剛剛都說過了,比如,你可以設置gvim.exe這個文件只能由某個賬戶運行,或者拒絕某個賬戶運行——這些剛剛都說過了,而且一目了然的不用我啰嗦,其餘的我也得去搜索一下才能現學現賣。

因為不清楚整個邏輯 所以我自己手動瞎逼設置其實我並不知道這些設置到底意味著什麼 感覺很凌亂

其實我也不懂Windows的安全策略,很多現象我都不知道如何理解:比如mmc.exe,管理員運行它一定UAC彈窗提權,雙擊msc文件,比如certmgr.msc好像也是這樣;但是標準用戶雙擊certmgr.msc就不會彈窗提權。標準用戶點了提權按鈕,則會彈出窗口提示輸入管理員賬戶密碼。

還有win10的windows設置和控制面板什麼關係?

不記得在哪裡看到的了,好像就是其他知友的回答吧,說微軟想搞Metro風格應用(Win8)/UWP應用(Win10),尤其是Win10,微軟希望UWP版「電腦設置」能取代控制面板,但是這個目標現在只實現了一部分。

所以,你看到了現在的蛋疼狀況,兩邊可能有不少功能是重複的。微軟還通過替換WIN+X菜單項等方法半強迫著讓你放棄控制面板、改用電腦設置。

UWP應用都是跑在Container里的(好像電腦設置例外),可以對應用做更細緻化的許可權限制——大概可以和Android/iOS來類比吧,每個App要幹啥都得跟系統申請,而且相互之間是隔離的,不能隨便偷窺。

然後,理論上,插手機自動adb之類流氓行為會被遏制,用戶的隱私也會得到更好的保護。

還有為什麼我的計算機管理-系統工具里沒有組或用戶名這一條?

大概是因為你在用家庭版系統(筆記本品牌機預裝的應該是CoreCountrySpecific,也就是Windows 10 家庭中文版),還是微軟摳門,把這個功能閹割了。


即使電腦上就你一個用戶,普通用戶、本地管理員、域管理員,本地SYSTEM後台用戶和用戶組等等定義都是存在的,只是你用不到而已

各種用戶組裡面的用戶可能有不同的許可權,可以用默認配置也可以用組策略修改,也可以加域後由域控制器推送統一管理的策略

找不到組策略什麼的話可能是W10 home,要Pro才有加域的功能


window:你,傻比,叫你的管理員來

Unix系:連你的管理員也是傻比,叫root來

蘋果系:只有我們的人才不是傻比

安卓:許可權?許可權是什麼?都給你拉,都給你拉


雖然你是管理員用戶,但是你的sid不是500,那麼就會受到UAC(用戶賬戶控制)的限制,微軟這樣做是為了防止一些惡意軟體在悄無聲息地獲得管理員許可權後對你的電腦造成破壞,所以你在運行一些需要管理員許可權的軟體時電腦會彈一個框讓你點擊是否授權。不過這個UAC你可以在控制面板裡面關掉,那樣你現在運行什麼軟體都是管理員許可權了,但是不建議你這樣做。


win7以前用戶管理員就是真正的管理員,所以右鍵裡面沒有以管理員身份運行,所有執行的程序都有你的許可權,導致惡意程序可以趁機格盤,自啟什麼的

而很多正常的軟體都不需要那麼多許可權的(修改系統文件,執行危險命令)所以win7以後為了提高安全性就加入了沙盒機制(AppContainer),當你正常打開一個程序時,它是被限制許可權的,當它需要執行危險操作,系統詢問你是否授權(如果關閉了uac詢問就默認禁止)不授權的話一切對系統設置的修改都是在沙盒中隔離的,如果你確信一個軟體是安全的,你可以直接管理員運行來確保他不會收到限制而發生錯誤。

-----------------------------------------------

題外話:

uac是很好,但很多軟體的作者都會讓用戶「關閉殺毒軟體,以管理員身份運行」,這就很尷尬了,因為我經常需要用一些敏感程序,但每個軟體用之前都先去逆一下看看有沒有問題又太麻煩,所以選擇一個靠譜的下載網站就很重要了( @Hmily )。

但還是感覺裸奔不靠譜,微軟自帶的defender又太難用(經常提示我有威脅,但是點擊清除無反應),最後我終於發現了火絨這個業界良心,強勢安利 @火絨安全實驗室 。


如果你接觸過 Linux 等類 Unix 系統,你應該知道 sudo。Unix 系統中只有一個唯一的 root 用戶具有管理員許可權,sudo 可以讓當前用戶獲得 root 許可權。

而 Windows 中不一樣,只要在 Administrators 用戶組內的用戶就有管理員許可權。但是直接運行起來的進程卻不含這個許可權,只有管理員身份運行的進程能獲得這個許可權。


推薦閱讀:

win10pc上微軟的office,如果試用之後不購買,還保留文件瀏覽功能嗎?
喜歡遊戲真的有錯嗎
Windows Linux 子系統(WSL)已經實現了多少內核功能了?
Windows 10 上的 Linux 子系統,能否使用 NVIDIA CUDA 加速?
win10的離線密碼忘了,沒聯網還不讓進了,怎麼辦?

TAG:Windows10 |