以其他用户身份运行,但仅限于某些明确允许的程序

以其他用户身份运行,但仅限于某些明确允许的程序

在我的 Windows 10 系统上,Alice 是开发人员/管理员,而 Bob 是标准用户。Alice 编写了一组程序供 Bob 使用(.bat文件和/或运行.py中的文件的快捷方式python.exe)。当 Bob 双击这些程序时,它们应该使用 Alice(或其他提升权限的用户)的文件系统权限运行,而 Bob 无需知道其他用户的密码,也无需执行除初始双击启动之外的任何特殊操作。 同时,Bob 不应被授权运行任何别的权限已更改

这是我想要运行的程序的一个最小示例,我们称之为WhiteHat.bat

:: This is WhiteHat.bat
@echo User %1 is running this program as %USERNAME%
@pause

到目前为止,我的所有研究都指向了runas。例如,Alice 在 的同一文件夹中准备了以下文件WhiteHat.bat

::This is RunWhiteHatAsAlice.bat
@runas /noprofile /user:%COMPUTERNAME%\Alice /savecred  "%~dp0WhiteHat.bat \"%USERNAME%\""

Bob 第一次双击 时RunWhiteHatAsAlice.bat,Alice 正在输入密码。随后,Bob 可以在 Alice 不在场的情况下双击它,他将看到:

User Bob is running this program as Alice

到目前为止一切顺利。但问题是 Bob 现在似乎有权这样做任何事物以 Alice 为例。如果他在自己的主目录中写入以下两个文件:

:: This is BlackHat.bat
@echo User %1 is DELETING ALL FILES as %USERNAME%
@pause

:: This is RunBlackHatAsAlice.bat
@runas /noprofile /user:%COMPUTERNAME%\Alice /savecred  "%~dp0BlackHat.bat \"%USERNAME%\""

那么他似乎能够使用保存的凭据(Alice 仅打算将其用于运行WhiteHat.bat)来运行中的任意代码BlackHat.bat

因此,我猜这runas不是我想要的方法?除非我不知何故错过了其文档中解释如何限制用户使用已保存凭据可以执行的操作范围的部分。

什么合适的方法是什么?POSIXoid 系统只需使用setuid— 有等效方法吗?

澄清:真正的“白帽”应用程序当然会导致文件系统上的文件发生更改(假设它写入TheData.txt)。我不想简单地授予 Bob 对 的写入权限TheData.txt。我希望他能够更改它,当然,但是仅有的根据批处理/python文件中编程的特定逻辑。我不希望他能够在记事本中打开它并任意弄乱它。

答案1

因此,我猜测 runas 不是实现我想要的效果的方法?

没错。如果您保存特定用户的凭据,Windows 将不会提示输入这些凭据,因为您指定应保存它们。

做这个的适当方法是什么?

使用访问控制列表,仅允许用户需要的文件权限。实际上,没有一个好的方法可以允许进程访问文件,但不允许用户访问,因为在 Windows 上,进程的权限就是用户的权限。

一种可能的解决方法是阻止非特权用户打开任何文本编辑器。但是,如果您有一位执意要更改数据文件的用户,那么这可能是您想要避免的陷阱。

相关内容