如何判断 .NET Core 应用程序是以管理员身份运行

有时候,我们需要知道当前程序是否以管理员身份运行,以便执行一些需要特殊权限的操作。

在github(https://github.com/dotnet/runtime/issues/25118#issuecomment-367407469)上找到了一个解决方案:

//需要引用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是什么意思?

euid

linux 系统中每个进程都有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()}");

我又换成demo1用户试了一下,这2个Id也是一样的。

那为什么要搞2个Id呢?

setuid

因为linux系统有一个功能:如果一个程序被设置了 setuid 位,那么它无论被哪个用户执行,都会具备 setuid 对应用户的权限,进程的 EUID 也会变成对应用户的 UID。

Demo

我们来试验一下,默认情况下demo1用户无法操作1.txt,因为文件是由root用户创建的,如下图:

当我们使用root用户设置了 setuid 位后,可以发现程序的权限起了变化:

这时我们再次运行程序,发现1.txt操作成功,而且euid也变成0(root用户)了。

结论

综上,github 上给的解决方案非常完美,如果你要判断当前用户是否root,则需要使用getuid() == 0。

(0)

相关推荐

  • Win7下如何让程序始终以管理员身份运行

    在Win7中,有些程序必须“以管理员身份运行”才能正常使用,一般情况下,在开启这类程序时,用鼠标右键点击程序图标,然后选择“以管理员身份运行”就可以了。虽然操作简单,但Win7中的程序那么多,难免有时 ...

  • 让程序在Win7下始终以管理员身份运行的方法(图文教程)

    在Win7中,有些程序必须“以管理员身份运行”才能正常使用,一般情况下,在开启这类程序时,用鼠标右键点击程序图标,然后选择“以管理员身份运行”就可以了。虽然操作简单,但Win7中的程序那么多,难免有时 ...

  • Win7系统如何以管理员身份运行程序

    大家看Win7系统教程的时候经常会看见"以管理员身份运行",那么怎样才能以管理员身份运行运行Win7系统程序呢?下面系小编为大家介绍一下。 1.通常,我们一般采用直接在目标程序上点击鼠标右键打开菜单选 ...

  • Windows7技巧:始终以管理员身份运行程序

    总所周知,在微软的新一代操作平台 -- Windows7 中,若要以管理员身份运行程序,通常会使用以下两种方法: (1)在程序或其快捷方式上右键鼠标,选择"以管理员身份运行": ( ...

  • 电脑保持用管理员身份运行程序

    我们知道,在win7系统中,若要以管理员身份运行程序是需要逐步进行操作的,那么是否有办法可以跳过这些步骤,让我们在win7下保持用管理员身份运行程序?下面win7之家为您详解一下: 第一种方法:鼠标指 ...

  • Win10怎么设置始终以管理员身份运行应用程序

    第一步.对着Win10应用程序桌面图标单击鼠标右键,菜单中选择"属性"; 第二步.在程序属性对话框,点击切换到"兼容性"选项卡,找到并勾选"设置&qu ...

  • 怎么给Win10电脑设置默认以管理员身份运行程序

    我们在win10系统下,如果想要打开不被信任的程序时,就会提示需要以管理员权限执行,这时,我们就要对程序设置设置默认以管理员身份运行,今天就跟大家介绍一下怎么给Win10电脑设置默认以管理员身份运行程 ...

  • win10系统如何以管理员身份运行程序

    现在大部分电脑都是win10系统,有些用户想知道如何以管理员身份运行程序,接下来小编就给大家介绍一下具体的操作步骤.具体如下:1. 首先第一步找到并右击需要设置的应用图标.根据下图箭头所指,小编以[优 ...

  • 如何设置win10系统以管理员身份运行程序

    现在大部分电脑都是win10系统,有些用户想知道如何以管理员身份运行程序,接下来小编就给大家介绍一下具体的操作步骤.方法一:让所有软件都始终以管理员身份运行1. 首先第一步根据下图箭头所指,鼠标右键单 ...