欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

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

时间:2023-02-16 09:34:10|栏目:.NET代码|点击:

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

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 系统中每个进程都有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系统有一个功能:如果一个程序被设置了 setuid 位,那么它无论被哪个用户执行,都会具备 setuid 对应用户的权限,进程的 EUID 也会变成对应用户的 UID。

3.Demo

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

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

结论:

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

上一篇:.NET Core通过dotnet publish命令发布应用

栏    目:.NET代码

下一篇:用ASP.NET还原与恢复Sql server

本文标题:如何判断 .NET Core 应用程序以管理员身份运行的

本文地址:http://www.codeinn.net/misctech/225872.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有