首页
社区
课程
招聘
[求助]由OpenSCManager return 5 到 runas admin 到 访问控制权限
发表于: 2018-9-21 16:56 3090

[求助]由OpenSCManager return 5 到 runas admin 到 访问控制权限

2018-9-21 16:56
3090
编写一个加载驱动的代码。在我同事的机器上跑时,OpenSCManager时返回5。在我机上跑一切顺利。
但我让我同事 "以管理员身份运行" 这个程序时就一切OK。
我们同样不是以 Admin 登录的为啥不一样?

按照我的粗鄙理解:

Logon之后,用户被授予了一个Token,参照"Access Control Model"。每个进程复制了这个Token (钥匙的概念),而 Object是(锁的概念)记录了哪些Token可以访问之。这个机制与 Linux中的 uid, gid, sgid  与 文件的 -rwxrwxrwx 类似。但Windows的复杂得多。


参照 流传很广的进程提升权限 OpenProcessToken + LookupPrivilegeValue + AdjustTokenPrivileges

https://blog.csdn.net/yockie/article/details/17029293


一直不理解提升权限是啥机制,难道一个guest用户写个代码就能有Admin 同样的power???
我的猜想是进程默认被User X创建出来的时候,仅管X拥有强力的操作权限, 安全起见,许多权限都默认被**自我限制**了,以防止作出意料之外的事情。 而提升权限就是自我解锁令牌限制的声明,声明 SE_DEBUG_NAME之后,表示我这个程序就是用来调试某些进程的,同时未**显式**声明解锁的功能还是不能用。 但是如果 X 本身就没有权限的话,声明解锁也没用(返回失败)。

联系之前的情况,产生的问题如下:
0. 上述理解有没有问题?
1. OpenSCManager, SCManager是否是一个Security Object??? 需要 哪个 SE_xxx_NAME 打开?
2. Run as Admin 到底是什么原理? sudo + UID SID GID 这些概念都清楚,  sudo 都需要root密码,但是我们Run as admin 凭什么不需要密码。。。
3. 为何我们同样不Run as Admin 我能成功,我同事失败。
4. 我想开启 LoadDriver 权限。
            LookupPrivilegeValue(NULL, SE_LOAD_DRIVER_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
   结果我同事机器上返回 1300 ( Error:1300 Not all privileges or groups referenced are assigned to the caller ),我机器没问题,怎么回事?




众位大神有谁能帮忙梳理一下这方面的知识?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 3586
活跃值: (4729)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
同跟楼主求解 这方面很模糊
很有趣的 原来WIN8还是WIN8.1 你知道么楼主 右键 以管理员身份运行 和 右键属性 设置管理员身份 起来的权限也不一样

我一直感觉WINDOWS权限方面从WIN8开始 比LINUX复杂的多
2018-9-22 17:43
0
雪    币: 202
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
syser 同跟楼主求解 这方面很模糊 很有趣的 原来WIN8还是WIN8.1 你知道么楼主 右键 以管理员身份运行 和 右键属性 设置管理员身份 起来的权限也不一样 我一直感觉WINDOWS权限方面从W ...
syser , 万能的SO上好像有这好回答,与君分享。

https://stackoverflow.com/questions/8986971/what-precisely-does-run-as-administrator-do
2018-9-25 16:15
0
游客
登录 | 注册 方可回帖
返回
//