尝试在 windows 10 上使用 python 创建符号链接时出现权限错误

Privlege error trying to create symlink using python on windows 10

我正在尝试在 windows 10(家庭版)上使用 python 创建符号链接。代码:

import ctypes

kdll = ctypes.windll.LoadLibrary("kernel32.dll")
kdll.CreateSymbolicLinkW(src_dir, dst_dir, 1)

但我明白了。错误:

*** error: (1314, 'CreateSymbolicLink', 'A required privilege is not held by the client.')

如何解决这个问题?

如果启用了 UAC 并且您的用户是管理员,则本地安全机构(LSA,托管在 lsass.exe)使用受限访问令牌登录您的用户。对于此令牌,BUILTIN\Administrators 组仅用于拒绝访问;完整性级别标签为中等而不是高;通常授予管理员的权限已被过滤掉。

要创建符号 link,您需要使用 unrestricted/elevated 访问令牌(即从中等完整性级别提升到高完整性级别)创建流程。通过右键单击并选择 "Run as administrator" 来执行此操作。此提升的令牌将由子进程继承,因此它足以从提升的命令提示符 运行 您的 Python 脚本,您可以通过键盘快捷键 Win+X[= 打开它26=]A。您可以通过 运行ning whoami /priv 并检查是否存在 SeCreateSymbolicLinkPrivilege 来验证 cmd shell 是否已提升。如果状态被禁用,请不要惊慌。 Windows CreateSymbolicLink 函数自动启用此权限。

就是说,既然您正在创建一个 目录 符号 link,那么联结也许也能正常工作。创建联结不需要特殊特权。您可以使用 cmd 的 mklink 命令创建联结。例如:

subprocess.check_call('mklink /J "%s" "%s"' % (link, target), shell=True)

https://www.scivision.dev/windows-symbolic-link-permission-enable/

  1. 打开gpedit.msc

  2. 计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 用户权限分配 → 创建符号链接

    键入用户名并单击“检查名称”然后确定。

  3. 重启电脑