返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >如何判断 .NET Core 应用程序以管理员身份运行的
  • 875
分享到

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

2024-04-02 19:04:59 875人浏览 泡泡鱼
摘要

目录1.euid2.setuid3.Demo有时候,我们需要知道当前程序是否以管理员身份运行,以便执行一些需要特殊权限的操作。 在github上找到了一个解决方案: //需要引用nu

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

在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 应用程序是以管理员身份运行的的文章就介绍到这了,更多相关判断 .Net Core 应用程序是以管理员身份运行内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

本文链接: https://lsjlt.com/news/141101.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作