我不太了解 Windows 权限,但是有没有办法让脚本或应用程序有权创建仅在应用程序“拥有”的目录树内链接的符号链接?(链接位于树中。目标也是如此。)
笔记:我不想授予脚本管理员权限。
答案1
抱歉,没有内置任何内容。您可以为运行该进程的用户(您自己或其他帐户)授予 SeSymbolicLink 权限,这样就可以创建符号链接,而无需授予其他管理员级别的访问权限。符号链接仍然只能在该帐户可以创建文件的任何位置创建,并且仍然适用常规访问检查(如果符号链接指向您可以读取但不能写入的文件,您将能够通过符号链接读取它,但仍然无法写入它)。希望这足够安全;符号链接在 Windows 上需要特殊权限的唯一原因是它们直到 Vista 才可用,因此许多旧版程序无法正确处理它们,尤其是对于目录循环或其他此类糟糕想法。
要允许特定用户创建符号链接(通过授予用户 SeSymbolicLinkPrivilege),请执行以下操作:
- 运行本地安全策略编辑器 (
secpol.msc
)。它需要管理员访问权限。 - 查看“本地策略”->“用户权限分配”。找到“创建符号链接”条目。
- 双击该条目将其打开,然后按
[Add User or Group...]
。 - 在出现的框中,输入您的 Windows 用户名并按
[Check Names]
。它应该会变为一个带下划线的完全限定名称。如果没有,您应该尝试其他形式的用户名。您也可以单击[Advanced]
以搜索选项列表。 - 一旦框中的用户名被划线,点击
[OK]
“选择用户和组”窗口,然后点击[OK]
“创建符号链接属性”窗口。 - 如果相关用户已登录,请注销并重新登录。该用户现在应该能够创建符号链接,而无需管理员权限。
另一种选择是使用 NTFS 硬链接。与符号链接不同,任何用户都可以创建硬链接(默认情况下)。但是,与符号链接不同(也与 POSIX 硬链接不同),除非您对目标文件具有特定权限(写入属性?一般类别为“写入”),否则您无法创建硬链接。因此,如果您只需要链接文件(而不是目录),并且您对相关文件具有写入权限,那么您可能可以很好地使用硬链接(它们的操作类似于 POSIX 硬链接,遵循文件节点而不是文件名,并且如果您删除“原始文件”但不删除链接,则数据不会被删除,直到您也删除链接)。
如果您也需要目录链接,您可以 - 如@WesSayeed 所建议的 - 使用 NTFS 连接点。它们很难通过编程创建(尽管通过脚本很容易),但对于您通常使用目录符号链接的大多数用途来说,它们都可以正常工作。
答案2
普通用户不需要任何特殊权限来创建连接(与目录符号链接非常相似)。
您可以亲自查看这一点,方法是打开命令提示符(非提升权限),然后输入mklink /j <link> <target>
(将链接和目标名称替换为您想要的任何目录)。即使您没有管理员权限,您也会看到此命令成功执行。您仍然无法使用但是,如果您没有访问目标的权限,则无法访问该链接。
mklink
只需在脚本中使用该命令它就可以正常工作。