如何判斷?.NET?Core?應用程序以管理員身份運行的
有時候,我們需要知道當前程序是否以管理員身份運行,以便執(zhí)行一些需要特殊權(quán)限的操作。
在github上找到了一個解決方案:
//需要引用nuget包Mono.Posix.NETStandard public static bool IsAdministrator => ? ? RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ? ? ? ? new WindowsPrincipal(WindowsIdentity.GetCurrent()) ? ? ? ? ? ? .IsInRole(WindowsBuiltInRole.Administrator) : ? ? ? ? Mono.Unix.Native.Syscall.geteuid() == 0;
Windows 下的判斷很好理解,用戶屬于 Administrator 角色。但是 linux 下的??geteuid() == 0??
是什么意思?
1.euid
linux 系統(tǒng)中每個進程都有2個 ID,分別為用戶 ID(uid)和有效用戶 ID(euid)。
??root???的用戶 ID確實是0。 ?
Console.WriteLine($"UID: {Mono.Unix.Native.Syscall.getuid()}"); Console.WriteLine($"EUID: {Mono.Unix.Native.Syscall.geteuid()}");
?那為什么要搞2個Id呢??
2.setuid
因為linux系統(tǒng)有一個功能:如果一個程序被設置了 setuid
位,那么它無論被哪個用戶執(zhí)行,都會具備 setuid 對應用戶的權(quán)限,進程的 EUID 也會變成對應用戶的 UID。
3.Demo
我們來試驗一下,默認情況下??demo1???用戶無法操作??1.txt???,因為文件是由??root??用戶創(chuàng)建的,如下圖:
這時我們再次運行程序,發(fā)現(xiàn)??1.txt??操作成功,而且euid也變成0(??root??用戶)了。
結(jié)論:
綜上,github 上給的解決方案非常完美,如果你要判斷當前用戶是否??root???,則需要使用??getuid() == 0??
。
到此這篇關(guān)于如何判斷 .NET Core 應用程序是以管理員身份運行的的文章就介紹到這了,更多相關(guān)判斷 .NET Core 應用程序是以管理員身份運行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Entity?Framework根據(jù)實體的EntityState狀態(tài)實現(xiàn)增刪改查
這篇文章介紹了Entity?Framework根據(jù)實體的EntityState狀態(tài)實現(xiàn)增刪改查,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03asp.net core常見的4種數(shù)據(jù)加密算法
這篇文章主要介紹了asp.net core常見的4種數(shù)據(jù)加密算法,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-06-06.net core在服務器端獲取api傳遞的參數(shù)過程
這篇文章主要介紹了.net core在服務器端獲取api傳遞的參數(shù)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10asp.net文件上傳功能(單文件,多文件,自定義生成縮略圖,水印)
上傳功能,是大家經(jīng)常用到了,可能每一個項目都可以會用到。網(wǎng)上到處都有上傳功能的代碼。比我寫的好的有很多。我這里也僅是分享我的代碼。2011-09-09MVC+EasyUI+三層新聞網(wǎng)站建立 實現(xiàn)登錄功能(四)
這篇文章主要為大家詳細介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第四篇,教大家實現(xiàn)登錄功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07