首先让我声明:我知道任何想要运行程序(甚至登录)的用户都必须有权访问(可能至少)Windows系统目录和共享库%ProgramFiles%
,但我想成为能够访问 Skype,例如,通过使用非特权用户运行它并确保它不能访问任何不必要的文件。
我担心这样做的唯一方法是识别我存储不希望该用户访问的文件的所有大量目录,然后创建一个可以访问这些目录的新用户组,或者运行 Skype 和 Azureus在虚拟机中。
有没有更好的办法?
首先让我声明:我知道任何想要运行程序(甚至登录)的用户都必须有权访问(可能至少)Windows系统目录和共享库%ProgramFiles%
,但我想成为能够访问 Skype,例如,通过使用非特权用户运行它并确保它不能访问任何不必要的文件。
我担心这样做的唯一方法是识别我存储不希望该用户访问的文件的所有大量目录,然后创建一个可以访问这些目录的新用户组,或者运行 Skype 和 Azureus在虚拟机中。
有没有更好的办法?
通常,帐户至少是用户组的成员,它确实可以访问许多东西。您可以使该帐户成为任何组的成员,或者是非常严格的来宾组。
真正的问题是程序的令牌(一个跟踪正在运行的进程具有哪些安全身份的内部安全对象)将包含每个人和经过身份验证的用户组,它们也具有对许多内容的读取权限。没有这些组就无法创建帐户。您可以删除每个人和经过身份验证的用户组对大多数所有内容的访问权限,但要跟踪所有这些内容将需要大量工作。
我想说为不受信任的程序创建标准用户或访客访问帐户就足够安全了。为了支持自我更新并将相关文件保存在同一位置,我建议您将这些程序直接安装在它们将运行的用户帐户的配置文件中,例如C:\Documents and Settings\skype\Program Files\Skype
如果您想获得真正的花哨,您可以使用受限令牌来使每个人、经过身份验证的用户等组仅拒绝(因此他们不能授予任何访问权限)或创建受限 SID 列表。这将很难实现,因为程序期望访问的全局对象是 Everyone 组可以访问的,这通常是一个安全的选择。
还有一个开源命令行程序,我为此创建了一个用于动态创建受限令牌和作业对象的程序:UlimitNT
也许sudown是一个解决方案。这是一种类似于 sudo(从 Linux 中得知)的方法,以非特权用户身份运行,但可以在需要时升级为管理帐户(使用密码)。
我想你可以锁定机器,这样用户就可以单独登录,甚至不能用他的权限启动 Skype,而是通过 sudown 的“运行方式”启动 Skype。
除了使用虚拟机之外,您还可以考虑使用沙盒。以Sandboxie fox 为例。
只需使用 acl apis(msdn 中的示例)