微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows的速度ImpersonateLoggedOnUser+ RevertToSelf与Unix的seteuid+ setegid

在Unix中,当代表某个用户做一些动作时,系统程序通常会调用seteuid(UID)(附带setegid())先切换到该用户,然后执行该操作,并在使用seteuid完成后切换回超级用户0)。 我的时间seteuid(),它是在一到几微秒的顺序(这意味着,相对于需要做的操作,如操作文件或运行CGI程序相当便宜)。

我不熟悉Windows API。 我们在Windows上做同样的事情(但使用ImpersonateLoggedOnUser()+ RevertToSelf()API函数)? 一般来说,这些function有多快?

PHP LDAP安全远程服务器上的绑定Windows失败

java.security.NoSuchProviderException:没有这样的提供者:SunMSCAPI

PHP隐藏所有的错误

所有用户都可以在同一台电脑上写入文件

保护UDP – OpenSSL或GnuTls或…?

它大体上是相同的,但有一个重要的区别需要记住:你提到的Windows API需要一个有效令牌的HANDLE。

换句话说,即使以SYstem(或任何具有SeTcbPrivilege的进程)身份运行,您也需要模拟登录用户

用户可以通过多种方式登录

与物理计算机交互

通过远程桌面会话

几乎所有的Microsoft网络连接,如文件共享,名称管道,邮筒,RPC和所有其他构建在上面的网络连接。

创建一个进程将在大多数情况下继承当前令牌。

在IIS中使用Kerberos,NTLM还是HTTP BASIC身份验证无关紧要。 这些都是通过Windows验证的,所以你得到一个令牌。 另一方面,Tomcat中的HTTP BASIC身份验证不会为您提供Windows令牌,因此模拟是无法实现的。

现在与棘手的部分。

当你考虑它时,令牌实际上只是一个具有授权访问控制列表(DACL)和审计(SACL)的内存结构。 它由验证包 (AP)创建。 AP创建令牌。 有点像Unix中的PAM,AP可以被自定义代码替换。

事实上,存在一个开源的setuid认证包。 将CVS移植到Windows NT的人做了写AP的工作,只要你拥有SeTcbPrivilege(根等价物), 无线 AP就可以创建一个令牌 。 我从来没有尝试过,但它可以给本地机器上的一个令牌缺席的用户代码是相当旧的(它只会创建高级令牌),但除此之外,它LGTM。 没有身份验证,没有密码或智能卡涉及,所以一个由令牌运行的进程将无法使用它来验证到另一台计算机。

总结:

总的想法是一样的

如果按照规则进行游戏,则只能模拟登录用户,而不管登录过程或位置如何

你可以改变那个行为,但是

在Unix和Windows中,模仿可能同样快,因为内部工作大致相似。 机会是你不会注意到的差异。

一个建议:我的Windows安全编程的副本全是黄色的咖啡,后贴便笺和撕裂的页面。 关于这个问题的最好的文本,如果你想了解Windows的安全性必须阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐