You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拒绝NT AUTHORITY\NETWORK对本地命名管道的访问?

如何拒绝NT AUTHORITY\NETWORK对本地命名管道的访问?

你好!针对你的问题,咱们分两部分来聊,既解决权限困惑,也结合你现有的代码给出具体方案:

首先,先说说你提到的PIPE_REJECT_REMOTE_CLIENTS标志——它其实已经能直接阻止远程客户端连接你的命名管道了。当你在CreateNamedPipeW的dwPipeMode里设置这个标志时,任何来自远程计算机的连接请求都会被直接拒绝,这已经满足你“本地仅用”的核心需求。不过如果你还想从权限层面严格限制NT AUTHORITY\NETWORK的访问(相当于双重保障),那咱们就需要手动创建自定义的安全描述符。

你当前代码里的SECURITY_ATTRIBUTES用了lpSecurityDescriptor = NULL,这会让管道继承父进程的权限,并没有专门限制NETWORK账户。要实现拒绝NETWORK的访问,我们可以通过SDDL(安全描述符定义语言)快速创建对应的安全描述符,步骤如下:

1. 构造SDDL字符串定义权限规则

我们可以用这样的SDDL字符串:

它的含义拆解一下:

  • D: 表示这是自主访问控制列表(DACL)
  • (A;;GA;;;SY):允许SYSTEM账户拥有完全访问权限(GA代表Generic All)
  • (A;;GA;;;BA):允许内置管理员组拥有完全访问权限
  • (A;;GA;;;LU):允许本地用户组拥有完全访问权限
  • (D;;GA;;;NW):拒绝NT AUTHORITY\NETWORK组的所有访问权限

2. 修改你的安全属性代码

把上面的逻辑整合到你现有的代码里,替换原来的attr.lpSecurityDescriptor = NULL部分:

SECURITY_ATTRIBUTES attr;
attr.nLength = sizeof(SECURITY_ATTRIBUTES);
attr.bInheritHandle = TRUE;

// 创建自定义安全描述符,拒绝NETWORK访问
PSECURITY_DESCRIPTOR pSD = NULL;
if (!ConvertStringSecurityDescriptorToSecurityDescriptorW(
    L"D:(A;;GA;;;SY)(A;;GA;;;BA)(A;;GA;;;LU)(D;;GA;;;NW)",
    SDDL_REVISION_1,
    &pSD,
    NULL))
{
    // 这里记得添加错误处理,比如用GetLastError()排查问题
}
attr.lpSecurityDescriptor = pSD;

// 后续调用CreateNamedPipeW的代码不变...

// 使用完安全描述符后,一定要释放内存
LocalFree(pSD);

总结

  • 如果你只需要阻止远程连接,PIPE_REJECT_REMOTE_CLIENTS标志就足够用了,简单直接;
  • 如果你想从权限层面严格限制NETWORK账户的访问,那就加上自定义安全描述符,和管道标志配合使用,双重保障本地管道的安全性。

备注:内容来源于stack exchange,提问作者Benjamin Krausse DB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:03:06