none
windows用户如何实现最低权限 RRS feed

  • 问题

  • 最新我想做一个在线评测系统(OJ),该系统可以会接收到不安全的代码,在服务器上保存、编译、并运行,这样以来服务器非常容易受到攻击,一个可能的想法是使用一个权限很低的用户,请问windows中是否存在这一用户,使其只允许修改一个文件夹下的文件,不能访问其它任何目录,不能试图调用其它dll(如C语言禁止使用windows.h中的函数),更不能使用system("shutdown")来关闭计算机,请问

    1、是否存在这样的用户帐户?
    2、若存在这种帐户,如何编程实现它?(建议使用C#实现)


    2011年8月16日 11:11

答案

  • 请问你用的是什么服务器的操作系统?我的想法是可以建立一个比较安全的Guest账户,对其权限做一些设定。但是我觉得C#托管代码很难做到操作系统底层的权限控制。如果你使用的是Windows Server操作系统,建议你去TechNet论坛咨询下有关用户权限控制方面的内容。http://social.technet.microsoft.com/Forums/zh-CN/category/operatingsystemscn.

    谢谢!


    Michael Sun [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    • 已标记为答案 Flysha 2011年8月25日 14:46
    2011年8月24日 5:24
  • 这个用户应该可以建立起来,可以建立一个不属于任何用户组的用户,然后通过控制文件夹权限和组策略来限制权限,应该就可以达到你们目的。

     

    不过你这个用户到底要怎么用我没明白(你的需求写的不是很清楚,按照道理上来说,服务器上运行的东西,应该不容易被攻击的啊,通常都是被防火墙保护的。)


    family as water
    • 已标记为答案 Flysha 2011年8月25日 14:46
    2011年8月16日 13:25
  • 我的意思是用户提交一段可能不安全的代码,然后在服务器上编译,并运行,我希望有一个用户,在这个用户上运行可以使编译后的程序没有危害服务器的权限,并希望可以用简单的方法(如Process.Start)来实现它


    这个我觉得可以从多个方面来实现,不知道你注意过apple的app store没有,这里提交的程序他们是要检查的,如果发现不合法的调用方法,不会让你进入app store,你也可以采取类似的方式,在提交代码的时候就检查是否有一些敏感的方法,如果有,直接不给调用。

    对于以某个身份运行程序可以参考这个kb:http://support.microsoft.com/kb/306158/en-us

     


    family as water
    • 已标记为答案 Flysha 2011年8月25日 14:46
    2011年8月17日 3:20

全部回复

  • 这个用户应该可以建立起来,可以建立一个不属于任何用户组的用户,然后通过控制文件夹权限和组策略来限制权限,应该就可以达到你们目的。

     

    不过你这个用户到底要怎么用我没明白(你的需求写的不是很清楚,按照道理上来说,服务器上运行的东西,应该不容易被攻击的啊,通常都是被防火墙保护的。)


    family as water
    • 已标记为答案 Flysha 2011年8月25日 14:46
    2011年8月16日 13:25
  • 我的意思是用户提交一段可能不安全的代码,然后在服务器上编译,并运行,我希望有一个用户,在这个用户上运行可以使编译后的程序没有危害服务器的权限,并希望可以用简单的方法(如Process.Start)来实现它
    2011年8月16日 14:14
  • 服务器上可以装虚拟服务的话,可以在虚拟机里面运行这个程序,运行完的话就重设虚拟机,丢弃更改。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年8月16日 21:51
    版主
  • 重设虚拟机的开销貌似很大,而且虚拟服务间的消息传递应该不是很方便,不应该这样考虑
    2011年8月16日 23:38
  • 我的意思是用户提交一段可能不安全的代码,然后在服务器上编译,并运行,我希望有一个用户,在这个用户上运行可以使编译后的程序没有危害服务器的权限,并希望可以用简单的方法(如Process.Start)来实现它


    这个我觉得可以从多个方面来实现,不知道你注意过apple的app store没有,这里提交的程序他们是要检查的,如果发现不合法的调用方法,不会让你进入app store,你也可以采取类似的方式,在提交代码的时候就检查是否有一些敏感的方法,如果有,直接不给调用。

    对于以某个身份运行程序可以参考这个kb:http://support.microsoft.com/kb/306158/en-us

     


    family as water
    • 已标记为答案 Flysha 2011年8月25日 14:46
    2011年8月17日 3:20
  • 创建一个AppDomain,并设置其权限,然后运行结束后再卸载该AppDomain。

    不知道这样是否能够满足楼主的需求。

    2011年8月17日 7:50
  • 请问具体如何操作?如何在.NET中创建AppDomain,然后如何设置其权限,最后如何卸载之?
    2011年8月17日 23:59
  • http://msdn.microsoft.com/zh-cn/library/6s0z09xw.aspx
    2011年8月18日 3:00
  • AppDomain似乎只能为托管代码提供运行环境,似乎不能管理非托管代码吧?
    2011年8月19日 10:26
  • 你好,我使用你的办法,已经建立起一个比较强大的用户,但仍然无法满足我的要求,比如程序可以无限调用自己,使服务器爆掉,可以无限打开系统程序,如记事本,也会使服务器爆掉,请问权限控制能限制程序调用?
    2011年8月22日 14:23
  • 请问你用的是什么服务器的操作系统?我的想法是可以建立一个比较安全的Guest账户,对其权限做一些设定。但是我觉得C#托管代码很难做到操作系统底层的权限控制。如果你使用的是Windows Server操作系统,建议你去TechNet论坛咨询下有关用户权限控制方面的内容。http://social.technet.microsoft.com/Forums/zh-CN/category/operatingsystemscn.

    谢谢!


    Michael Sun [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    • 已标记为答案 Flysha 2011年8月25日 14:46
    2011年8月24日 5:24