【发布时间】:2015-10-23 17:56:09
【问题描述】:
我正在尝试以非常受限的模式 (Windows) 运行 program.exe。这意味着 program.exe 应该可以访问五个 .txt 文件,并且没有其他权限,例如查看新进程、关闭、编辑其他文件等。
我花了一个月的时间试图实现它,但仍然没有结果。我尝试以受限用户身份运行它:runas /trustlevel:10000 "program.exe",然后添加权限:icacls program.exe /grant *S-1-5-12:F
但似乎这样的用户仍然有一些权限,例如他可以运行 notepad.exe 和 explorer.exe,这在我的情况下是不可接受的。我也玩过 CreateProcessAsUser() winapi 函数,但它导致相同的结果。
所以我的问题是:我怎样才能在这个限制下运行 program.exe,也许我应该创建有限制的新用户?怎么样?
P.S:基本上我想获得原始沙箱。
谢谢。
感谢您的帮助,我编写了以下代码:
hToken = NULL;
OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
SID_AND_ATTRIBUTES sidsToDisable;
ConvertStringSidToSid(L"S-1-1-0", &sidsToDisable.Sid);
sidsToDisable.Attributes = NULL;
SID_AND_ATTRIBUTES sidsToRestrict;
ConvertStringSidToSid(L"S-1-1-0", &sidsToRestrict.Sid);
sidsToRestrict.Attributes = NULL;
CreateRestrictedToken(hToken,NULL,1,&sidsToDisable,0,NULL,1,&sidsToRestrict,&hToken);
PROCESS_INFORMATION pi;
if (CreateProcessAsUser(hToken, wszPath, NULL, NULL, NULL,TRUE, CREATE_NEW_CONSOLE /*| CREATE_SUSPENDED*/, NULL, NULL, &si, &pi))
{
//...
//ok process created
}
但它不起作用。 0xc0000022 错误一直发生,或 0xc00000142 使用管理员 SID 时。当我通过 SaferComputeTokenFromLevel() 创建 hToken 时,它工作正常。我做错了什么?
【问题讨论】:
-
不,它不是重复的。PsExec 如何帮助我?
-
您的要求,尤其是禁止启动子进程的愿望,并不能真正构成“原始”沙箱——这需要相当复杂的沙箱。
-
我认为可以使用标准的 Windows API 创建这样的“沙盒”,而且我几乎可以肯定它在 Linux 中是可能的,而且更容易......