如何判断 .NET Core 应用程序以管理员身份运行的
有时候,我们需要知道当前程序是否以管理员身份运行,以便执行一些需要特殊权限的操作。
在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 应用程序是以管理员身份运行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
asp.net中将js的返回值赋给asp.net控件的小例子
要做一个显示用户在线停留时间的功能,拖了一个label控件用于显示时间,而时间是通过js来实现的,现在要把js的返回值赋给label,方法如下:2013-03-03Asp.net中使用PageDataSource分页实现代码
这篇文章主要介绍asp.net中使用PageDataSource分页的方法,需要的朋友可以参考下2013-04-04
最新评论