我安装了 Cygwin,后来删除了我的 Windows 7 帐户,并重新创建了同名帐户。现在我无法编辑 Cygwin 文件夹中的文件或创建新文件夹/文件。是否有命令可以运行以恢复我的权限?
答案1
我不得不用承担在 cygwin 中首先获取所有文件的所有权。我以管理员模式运行 cygwin(右键单击)。获取 cygwin 目录的所有权很棘手,因为cygdrive将链接到您的所有硬盘,因此我建议不要在 cygwin 文件夹上递归执行此操作。语法为:
夺回/F文件夹/R
其中 /R 是递归的。因此,对 cygwin 中的所有文件和文件夹执行此操作(或者在 cygwin 文件夹上尝试,但我不建议这样做)。
之后,我需要通过 Windows 资源管理器设置我的权限。右键单击“cygwin”文件夹,转到“安全”选项卡,确保您的用户名在顶部窗口中。我还删除了“未知”用户,我认为这是我以前的帐户。如果您不在那里:单击编辑->添加->输入您的姓名,然后单击“检查姓名”。它应该会找到您认为的您,然后单击“确定”。单击允许“完全控制”复选框,它应该选中所有框。单击“确定”。
然后你应该仍然在安全选项卡中,单击“高级”->“更改权限”->突出显示你的用户名->“编辑”->确保“允许”下的所有框都被选中,并且适用于是“此文件夹、子文件夹和文件”(复选框不要选中)。按一次“确定”,确保“替换所有子对象权限...”已选中,单击“确定”、“确定”、“确定”。
你就可以出发了。
答案2
人类的名字并不重要。计算机依靠数字来运作。
在这个特殊情况下,数字是安全标识符,SID。
当您创建新帐户时,会为其分配一个新的 SID。旧帐户的旧 SID 不会被重新使用。(否则会造成安全问题。)您的所有文件和目录都以旧 SID 为创建者-所有者进行标记。它们还很可能在其 ACL 中向其创建者-所有者或直接向旧 SID 授予访问权限。因此老的SID 将继续拥有访问权限。
因此,例如,如果您的旧帐户有 SID S-1-5-21-90593156-579754539-1338337383-1002
,则您的新帐户将具有不同的 SID,例如S-1-5-21-90593156-579754539-1338337383-1003
。文件和目录授予-1002
SID 读/写/搜索/任何访问权限,而-1003
SID 没有访问权限。
使用诸如这样的工具获取所有权takeown
是解决此问题的一个答案,因为 ACL 授予创建者所有者而不是直接地到旧的 SID。只需更改创建者所有者,授予创建者所有者权限的 ACL 会自动将权限授予正确的 SID。问题是在 Windows NT 中,获取所有权的权限必须由原所有者授予归属于预期的新所有者。所有权不能(没有特殊权限)转让,也不能未经许可就被盗用。您已删除具有旧 SID 的帐户,因此现在没有原始所有者授予该权利。因此,您必须使用三步程序。首先,具有任何所有权的帐户(例如管理员帐户)必须取得所有权。然后,该帐户必须授予您的新帐户所有权。最后,您的新帐户必须从管理员帐户取得所有权。
如果 ACL 直接授予对旧 SID 的访问权限,而不是通过创建者-所有者间接授予访问权限,则获取所有权不是答案是,尽管有人可能以后出于其他原因想要这样做。在 ACE 中用新 SID 替换旧 SID 是可行的。您可以使用subinacl
资源工具包中的工具及其/replace
参数来执行此操作。
进一步阅读
- 微软公司(2004 年)。下载 SubInACL. 下载中心。
- 微软公司(2003-03-08)。安全描述符和访问控制列表工具和设置. 科技网。
- Jesper M. Johansson(2008 年)。用于管理 ACL 的安全监视工具. MSDN 杂志。TechNet。
- Jesper M. Johansson(2005-11-08)。如何用安全措施自掘坟墓,第 2 部分:是否使用 ACL. 科技网。
- 微软公司(2006-11-01)。 如何在Windows NT 中将对象从一个域迁移到另一个域. ID 301940。Microsoft 知识库。
答案3
因此,我能够以 cygwin 管理员身份使用 takeown。我同意只应递归更改目录 cygwin/,而不是 cygdrive。我唯一能补充的是,一旦我取得所有权,我就可以以管理员身份发出 unix 命令来更改权限
chmod 744 *
更改权限,使所有者拥有 rwx 权限,其他人拥有只读权限。因此,无需对 Windows 端进行修改。