溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么判斷.NET?Core應(yīng)用程序是以管理員身份運(yùn)行的

發(fā)布時(shí)間:2022-03-03 09:10:03 來源:億速云 閱讀:167 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了怎么判斷.NET Core應(yīng)用程序是以管理員身份運(yùn)行的的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇怎么判斷.NET Core應(yīng)用程序是以管理員身份運(yùn)行的文章都會(huì)有所收獲,下面我們一起來看看吧。

有時(shí)候,我們需要知道當(dāng)前程序是否以管理員身份運(yùn)行,以便執(zhí)行一些需要特殊權(quán)限的操作。

在github上找到了一個(gè)解決方案:

//需要引用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)中每個(gè)進(jìn)程都有2個(gè) ID,分別為用戶 ID(uid)和有效用戶 ID(euid)。

root的用戶 ID確實(shí)是0。

Console.WriteLine($"UID: {Mono.Unix.Native.Syscall.getuid()}");
Console.WriteLine($"EUID: {Mono.Unix.Native.Syscall.geteuid()}");

怎么判斷.NET?Core應(yīng)用程序是以管理員身份運(yùn)行的

那為什么要搞2個(gè)Id呢?

2.setuid

因?yàn)閘inux系統(tǒng)有一個(gè)功能:如果一個(gè)程序被設(shè)置了 setuid 位,那么它無論被哪個(gè)用戶執(zhí)行,都會(huì)具備 setuid 對(duì)應(yīng)用戶的權(quán)限,進(jìn)程的 EUID 也會(huì)變成對(duì)應(yīng)用戶的 UID。

3.Demo

我們來試驗(yàn)一下,默認(rèn)情況下demo1用戶無法操作1.txt,因?yàn)槲募怯蓃oot用戶創(chuàng)建的,如下圖:

怎么判斷.NET?Core應(yīng)用程序是以管理員身份運(yùn)行的

這時(shí)我們?cè)俅芜\(yùn)行程序,發(fā)現(xiàn)1.txt操作成功,而且euid也變成0(root用戶)了。

怎么判斷.NET?Core應(yīng)用程序是以管理員身份運(yùn)行的

關(guān)于“怎么判斷.NET Core應(yīng)用程序是以管理員身份運(yùn)行的”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“怎么判斷.NET Core應(yīng)用程序是以管理員身份運(yùn)行的”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI