Sửa lỗi [WinError 1314]: Tạo Symlink không cần quyền Admin trên Windows

intermediate🪟 Windows2026-06-25| Windows 10/11 (Build 15063+), Python 3.x, Node.js, Git Bash.

Error Message

[WinError 1314] A required privilege is not held by the client
#windows#python#nodejs#devops#sysadmin

Vấn đề

Bạn đang tập trung vào dự án, chạy npm link, một script tự động hóa Python, hoặc một script build tùy chỉnh, thì Windows đột ngột dừng tiến trình. Terminal của bạn hiển thị một thông báo khó hiểu:

OSError: [WinError 1314] A required privilege is not held by the client

Điều này xảy ra vì Windows coi các liên kết tượng trưng (symbolic links - symlinks) là một rủi ro bảo mật. Chính sách này có từ thời Windows Vista. Theo mặc định, hệ điều hành hạn chế việc tạo symlink cho những người dùng có quyền quản trị cao (administrative privileges). Ngay cả khi bạn sở hữu thư mục đó, một phiên terminal thông thường vẫn thiếu quyền "Create Symbolic Links" mà kernel yêu cầu.

Quá trình kiểm tra

Tôi đã gặp lỗi này khi đang kiểm tra một thư viện Python nội bộ. Mã nguồn rất đơn giản:

import os
os.symlink('source_dir', 'link_name')

Các quyền tệp tiêu chuẩn như chmod sẽ không giúp ích gì ở đây. Đây là vấn đề về User Rights Assignment (Phân bổ quyền người dùng). Để xác nhận hệ điều hành đang chặn bạn, hãy thử tạo một liên kết thủ công trong Command Prompt thông thường:

mklink /D test_link target_folder

Nếu bạn thấy thông báo "You do not have sufficient privilege to perform this operation," bạn đã xác nhận rằng Windows đang chủ động chặn lệnh gọi hệ thống này.

Giải pháp 1: Bật Developer Mode (Khuyến nghị)

Kể từ Windows 10 (phiên bản 1703), Microsoft đã cung cấp một cách để các nhà phát triển tạo symlink mà không cần chạy mọi terminal dưới quyền Administrator. Đây là cách sửa lỗi hiệu quả nhất cho các môi trường phát triển hiện đại.

  • Mở Settings.
  • Điều hướng đến Privacy & security > For developers.
  • Chuyển Developer Mode sang On.
  • Nhấp vào Yes trong hộp thoại xác nhận.

Developer Mode thay đổi hành vi trên toàn hệ thống của API CreateSymbolicLink. Nó cho phép bất kỳ người dùng nào tạo liên kết mà không cần token nâng cao. Bạn thậm chí không cần khởi động lại máy; thay đổi sẽ có hiệu lực ngay lập tức.

Giải pháp 2: Chạy dưới quyền Administrator

Nếu bạn đang làm việc trên máy tính công ty nơi Settings bị khóa, giải pháp tạm thời ngay lập tức là sử dụng một shell có quyền nâng cao.

  • Nhấp chuột phải vào Windows Terminal, PowerShell, hoặc CMD.
  • Chọn Run as administrator.
  • Thực thi lại script hoặc câu lệnh của bạn.

Hãy coi đây là một giải pháp tạm thời. Việc chạy IDE hoặc terminal với toàn quyền admin là một rủi ro bảo mật. Nó cấp cho các script nhiều quyền lực hơn mức cần thiết chỉ để di chuyển các tệp tin.

Giải pháp 3: Chỉnh sửa Local Security Policy

Nếu bạn sử dụng Windows Pro, Enterprise hoặc Education, bạn có thể cấp quyền cụ thể này cho tài khoản của mình. Lưu ý rằng phương pháp này không hoạt động trên Windows Home Edition, vì công cụ secpol.msc không có sẵn.

  • Nhấn Win + R, nhập secpol.msc, và nhấn Enter.
  • Đi đến Local Policies > User Rights Assignment.
  • Nhấp đúp vào Create symbolic links.
  • Nhấp vào Add User or Group và nhập tên người dùng Windows của bạn.
  • Nhấp OK. Bạn phải đăng xuất và đăng nhập lại để Windows cập nhật token bảo mật của bạn.

Xác minh

Xác minh việc sửa lỗi bằng cách mở Command Prompt thông thường (không phải admin). Chạy các lệnh sau để tạo và sau đó xóa một liên kết thử nghiệm:

cd %TEMP%
mklink /D test_link .
rmdir test_link

Nếu kết quả hiển thị symbolic link created, bạn đã thành công. Các script Python và Node.js của bạn giờ đây sẽ chạy mà không gặp lỗi đặc quyền.

Những điểm chính cần lưu ý

  • Symlinks và Hard Links: Windows cho phép tạo hard link cho bất kỳ người dùng nào, nhưng symlink yêu cầu các đặc quyền cụ thể vì chúng có thể trỏ đến các đường dẫn từ xa.
  • Developer Mode là thiết yếu: Đối với công việc CLI hiện đại, Developer Mode là một điều kiện tiên quyết. Nó loại bỏ những rắc rối của mô hình bảo mật Windows cũ.
  • Môi trường CI/CD: Nếu lỗi này xuất hiện trên một build agent như Jenkins hoặc GitHub Actions runner, hãy đảm bảo tài khoản dịch vụ đã được gán quyền "Create symbolic links" thông qua SecPol.

Related Error Notes