Why you shouldn't run as admin...

安全运行程序
本文探讨了为何不应以管理员身份运行程序,列举了减少暴露风险、确保软件兼容性和树立良好示范作用等三大理由。管理员身份使程序拥有完全访问权限,一旦遭到恶意攻击,可能导致系统受损。

为何不应以管理员身份运行程序

原英文版本:http://blogs.msdn.com/aaron_margosis/archive/2004/06/17/157962.aspx

首先,让我们定义一些名词术语,为了简单起见,我们仅仅描述两种类型的用户:Administrator(系统管理员)和User(普通用户)。他们在本质上区别于分别属于“Administrators”和“Users”两种本地组。“Administrators”可以有对计算机或者域完全的和不受限制的访问能力。而普通用户则不能随便或有目的地进行系统级别的操作,比如安装程序,启动/停止系统服务,修改注册表信息等。

我们的讨论缩减成两种类型的用户并非毫无理由的选择。事实上,这是Windows XP家庭版精确地区分用户的两种类型,默认情况下,XP Home Edition只能创建这两种类型的用户,Administrator(计算机管理员)和User(普通用户)。在这个区分之下,XP家庭版的计算机管理员和普通用户分别是Administrators组成员和Users组成员。除此之外,如“Power Users”或者“Backup Operators”中的组成员和管理员在权限上是可以说是等价的。所以当我说到以非管理员身份运行程序时,我并非意味着使用Power User替代。

言归正传,如果你是一个允许(或者需要)可以管理你自己计算机的管理员,为什么不始终以管理员的身份登录呢?我们来做个假设,如果你是一个外科医生,你是否愿意总是拿着锋利的解剖刀,拟或宁愿放在一个安全的地方,等到真的需要的时候才用?你觉得这个比喻是否恰当?ok,那我们现在跳过这个比喻,下面我们给出三个不使用管理员身份运行程序的理由。

以非管理员身份运行的首要原因是为了防止暴露。当你是admin身份时,你运行的每一个程序将可以没有限制地访问计算机。如果一个恶意的或者其他“不受欢迎”的代码利用了这些程序,同样地它也可以没有限制地访问计算机。企业防火墙只能针对Internet的恶意攻击提供局部的保护:你依旧在浏览网站,接收Email,或者运行一个或者多个IM(即时通信)软件或者网络游戏。即使你使用了最新的安全补丁和病毒库,增强了安全设置,并且小心翼翼地处理电子邮件的附件,可还是防不胜防。我们假设你使用喜好的搜索引擎搜索并点击了一个看起来挺正常的链接,然而这个链接指向了一个针对你正在使用的浏览器漏洞的恶意站点,而且站点上有一个可以导致在你机器上执行任意代码的Exploit。当一个Exploit以管理员的特权运行,相对于只是User权限来说,它便对你计算机的危害越大,也越不容易被侦测出来,攻击其他在你网络上的计算机的可能性就越高。如果Exploit在编写的时候恰巧由于编写者的原因而不得不使用管理员权限运行时(大多数Exploit都如此,详见后面第二点理由),如果我们以普通用户身份运行程序,则这个Exploit几乎没有什么威胁,但如果不幸运的你恰好也用了管理员的身份运行程序,那么这个Exploit就有可能带来以下危害:

安装内核级别的rootkits以及/或者键盘记录器(这种方式将很难被发觉)
安装和启动系统服务
安装ActiveX控件,包括IE和shell add-ins(通常附在Spyware和adware中)
访问本属于其他用户的数据
截获所有登录到这台机器的用户和密码
使用木马替换操作系统系统文件或者其他程序文件
访问LSA Secrets,包括其他敏感的账号信息,可能包括域用户账号的信息
禁用或者卸载反病毒软件,以避免被侦测出来
掩盖(删除)在事件日志中留下的痕迹
导致操作系统不能启动
如果你的账号恰好是网络上其他计算机的administrator账号,Exploit将同样会获得这些计算机的管理员权限。

其他诸如此类的危害还有很多

第二个以非管理员身份运行的原因适用于软件开发人员。开发中的软件以普通用户身份而非管理员身份运行有助于确保软件在最终用户的系统中正常地运行。千万别给我任何像Windows Messenger 4.x这样必须使用管理员身份安装的软件,当然,除非用户至少使用管理员权限运行这个软件一次,否则没有人可以使用这个软件。这还不单单是“任何用户使用前需要管理员运行一次”,Messenger确实需要管理员的特权来运行(参考:http://support.microsoft.com/kb/325717/en-us)。Keith Brown即将出的书同样也深入地批评了这种观点(参考:http://www.pluralsight.com/keith/book/html/whatis_anonprivilegeduser.html),一些人认为开发人员应该以管理员登录的身份来开发程序,并使用普通用户的身份来测试程序,我不认为这是个好的主意,或许我会在今后的文章中逐渐让人接收这种观点。

第三个不使用管理员身份的理由是为微软的相关人员量身定制的。比如微软技术支持工程师,微软最有价值专家(MVP),特别是那些直接与微软客户沟通的职能角色。我们要做出榜样,人们都以我们为榜样,学习面对、解决Windows相关问题的正确方法。在Unix环境下,除了必要的操作外,Unix的管理员从来不使用Root身份登录。必要的时候就使用“su”命令进行二次登录,操作完后就退出到普通用户的模式。当我们总是习惯于使用root身份时,我们就不算是一个好的典范。对于这样的技术人员来说,你应该习惯于使用“User”的身份来操作计算机,并让你的客户和向你学习的人也了解这点。如果你这样做了,请不要再将自己的账号添加回Administrators组去。对于微软的用户来说,如果你看到一个微软的Sales,MCS,Premier,PSS或者类似的人员仍然使用管理员的身份运行程序的话,请告诉他们:“你不是一个好的榜样,我对你感到失望。”

接下来的文章我们将会讨论如何以非管理员的身份工作而又不至于抓狂。

 



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=469808


### GitHub Copilot Response Filtered Solution 在使用 Visual Studio Code 中的 GitHub Copilot 时,有时会遇到响应被过滤的情况。这种现象通常与以下几个因素相关: #### 1. 内容安全性和合规性 GitHub Copilot 的响应可能会因为内容的安全性或合规性问题而被过滤。例如,如果生成的代码或文本包含潜在的敏感信息、不适当的内容或违反了某些规则,则 Copilot 会自动过滤掉这些响应[^2]。 #### 2. 输入上下文的质量 Copilot 的表现高度依赖于输入的上下文质量。如果提供的注释或代码片段过于模糊、不完整或不符合常见编程模式,Copilot 可能无法生成合适的建议,从而导致响应被过滤。确保输入清晰且具有足够的上下文信息可以提高生成结果的质量[^1]。 #### 3. 配置和设置问题 某些情况下,VSCode 的配置可能会影响 Copilot 的行为。例如,如果禁用了自动补全功能或设置了过于严格的过滤规则,可能导致有效建议被误过滤。检查并调整以下设置可以帮助解决问题: - **GitHub Copilot: Enabled** - 确保 Copilot 功能已启用。 - **GitHub Copilot: Show Suggestions Automatically** - 允许自动显示建议。 #### 4. 示例:解决响应被过滤的问题 以下是一个示例,展示如何通过优化输入上下文来避免响应被过滤: ```javascript // Create a simple Express server that listens on port 3000 and responds with "Hello, World!" const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello, World!'); }); app.listen(port, () => { console.log(`Server is running at http://localhost:${port}`); }); ``` 在上述代码中,提供明确的注释和结构化代码片段有助于 Copilot 准确理解需求并生成适当的建议。 #### 5. 使用聊天功能获取更复杂的帮助 最新版本的 GitHub Copilot 提供了聊天功能,允许用户通过对话形式描述复杂问题并获得解决方案。可以通过以下方式启动聊天: - 打开命令面板(`Ctrl + Shift + P`),然后选择 `GitHub Copilot: Start Chat`。 #### 6. 调整 API 和框架支持 确保 Copilot 支持当前使用的编程语言和框架。如果发现特定语言或框架的支持不足,可以尝试更新扩展版本或参考官方文档以获取更多支持信息[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值