如何判断 .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;

好了,问题解决,文章写完了。

177c219b8c59d2cf8a5b7e27df44798f.gif

等等!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()}");

4e8cdf2dec142e2bde58207f13097c60.png

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

2ab9d2dcd319032cfd1b98893d31fadd.png

那为什么要搞2个Id呢?

setuid

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

Demo

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

d255b7927bd439aa2e67f401e74eedb2.png

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

dc00b9687b047445acefb4fe6bfbe7d0.png

192921eef9e62238592dd59e783fc676.png

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

14454d0b014914ba83411e3da0fd1f83.png

结论

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

想了解更多内容,请关注我的个人公众号”My IO“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之Content和activity、service、Application关系和attachBaseContext函数调用的时候

1、Content和activity、service、Application关系 2、Application里面attachBaseContext和onCreate函数调用顺序 Application-> attachBaseContext ();ContentProvider:onCreate()Application:onCreate()人还是容易忘记,先记录下来。

批量创建域账号

创建5列的csv文档(注意文件编码) 执行如下脚本 for /f "tokens1,2,3,4,5 delims," %a in (c:\test.csv) do dsadd user "cn%c,oumk,ouicgroup,dcicdomain,dccom" -samid %d -upn %dicdomain.com -ln %a -fn %b -pwd %e -disabled no…

如何快速编写并运行Tiny模板语言?

2019独角兽企业重金招聘Python工程师标准>>> 说到模板开发,当然就离不开要调试,要运行。 由于一般情况下模板语言都是由Java程序驱动跑的,因此,每次都需要搞一个Java类来驱动它,才能运行出结果。这个对于悠…

Windows 11 上大招!正式支持安卓!

面向 Windows 11 正式版用户,微软现已发布累积更新 KB5010414,更新后版本号升级至 Build 22000.527。KB5010414 是一个可选更新,因此除非您主动点击“获取更新”按钮,否则它不会下载或安装。该更新将于 2022 年 3 月向所有 Window…

博客流量分析

接连两篇Spark内核分析的文章都被推荐到CSDN首页,带来的流量还是很客观的,基本上一天最少500个独立IP的访问。这个访问量还是很客观的,比推荐到博客首页和侧边栏还是效果好处不少的。88%的流量来自首页。北京不愧是码农的聚集地啊&#xff0c…

WPF 基础控件之CheckBox样式

WPF开发者QQ群:340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS:有更好的方式欢迎推荐。支持NugetInstall-Package WPFDevelopers.Minimal -Version 3.0.001—代码如下一、创建 Styles.Check…

Theano3.2-练习之数据集及目标函数介绍

来自http://deeplearning.net/tutorial/gettingstarted.html#gettingstarted 一、下载 在后续的每个学习算法上,都需要下载对应的文档,如果想要一次全部下好,那么可以复制git上面的这个教程的资料: git clone git://github.com/li…

C#使用NPOI导出Excel文件

欢迎您成为我的读者,希望这篇文章能给你一些帮助。前言今天咱们一起来看看在C#中如何使用NPOI第三方控件进行数据的导出。关于NPOI插件网上资料很多,大家感兴趣的可以去看看。本文使用的版本是NPOI 2.5.1。大家可在包管理器NuGet或者下面网址进行下载。h…

Android之ActivityLifecycleCallbacks的得到当前的activity的状态

1、ActivityLifecycleCallbacks的介绍 Application通过此接口提供了一套回调方法,用于让开发者对Activity的生命周期事件进行集中处理,注意是在Application里面,路径如下 android.app.Application.ActivityLifecycleCallbacks要求API 14+ (Android 4.0+) ActivityLifecyc…

开放产品开发(OPD):Archi 汉化工具下载

在OPD中,我们使用了ArchiMate 作为架构语言,这是一个高层、简单的描述语言,之前我也写过一系列相关的文字,架构语言ArchiMate - 开篇:企业架构语言ArchiMate介绍架构语言ArchiMate - 语言结构&a…

【数据库中间件】MyCat分表分库规则实现

2019独角兽企业重金招聘Python工程师标准>>> /*** * 先根据截取字段的日期分组,再根据字段值数据按天入表 * author Fx_demon * */ public class PartitionBySubstringRangeDateDay extends AbstractPartitionAlgorithm implements RuleAlgo…

[C# 项目实战]: 制作一个备忘录(经典)

01—概述前几天群里有人问如何制作备忘录,感觉这样一个小实例挺适合新手们入门学习使用,所以就抽空做了出来。界面如下图:这个备忘录主要包括了如下功能:① 备忘录信息的增、删、改、查;② 备忘录时间到了以后进行语音…

RedHat 5.4下构建postfix全功能电子邮(七)-extmail extman平台-(下集)

2019独角兽企业重金招聘Python工程师标准>>> RedHat 5.4下构建postfix全功能电子邮(七)-extmail extman平台-(下集) 三、设置邮件系统的图形化日志信息 [rootmail ~]# ln -sf /usr/local/apache2/htdocs/extman/addon…

JNI中的内存管理(转)

源:JNI中的内存管理 JNI 编程简介 JNI,Java Native Interface,是 native code 的编程接口。JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native code;在 native code 中嵌入 Java 虚拟机调用 Java 的代码…

C# 异步方法的异常处理

在使用异步方法时,应该知道错误的一些特殊处理方式。所有 ErrorHandling 示例的代码都使用了如下名称空间:SystemSystem.Threading.Tasks从一个简单的方法开始,它在延迟后抛出一个异常:static async Task ThrowAfter(int ms, stri…

Mark Down 使用实例

为什么80%的码农都做不了架构师?>>> Mark Down 使用实例 MarkDown是一个非常轻量级的 【标记语言】,有点有很多,书写比较快速,学习成本低,统一的排版模式,可导出 PDF HTML 等文档格式&#xff…

JoySSL付费版证书的优势

JoySSL付费版证书相比免费版有很多优势。首先,付费版证书通常由权威的CA(证书颁发机构)签发,在浏览器和操作系统中具有99.99%的兼容性,被主流浏览器如Chrome、Firefox、Safari和Edge等广泛支持和认可。这确保了无论用户…

Git命令集十三——快照操作

2019独角兽企业重金招聘Python工程师标准>>> Git命令集十三——快照操作 Git工具中提供了一个stash命令,这个命令的作用是创建快照。快照主要的用途是将当前未更新到缓存区的修改进行入栈保存,创建快照后,Git的状态会变回上一次提…

Asp.net core IdentityServer4与传统基于角色的权限系统的集成

img写在前面因为最近在忙别的,好久没水文了 今天来水一篇;在学习或者做权限系统技术选型的过程中,经常有朋友有这样的疑问 :“IdentityServer4的能不能做到与传统基于角色的权限系统集成呢?”“我的公司有几百个接口&a…

算法小白——基本排序算法入门

计算的 时间复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。一般而言,好的性能是O(n log n),且坏的性能是O(n^2)。对于一个排序理想的性能是O(n)。仅使用一个抽象关键比较运算的排序…