2018/03/31

symbolic link privilege not held が出る場合の対処方法 (Windows 10)

Python でシンボリックリンクを作成するには `os.symlink()` を使用します。
ただ、Windows でこれを普通に実行すると `OSError: symbolic link privilege not held` が発生してしまいます。



### 原因は権限不足
シンボリックリンクの作成には `SeCreateSymbolicLinkPrivilege` が必要です。
しかし、デフォルトでこの権限が与えられているのは管理者のみ管理者グループにも与えられていないなので、一般ユーザで実行すると上記のエラーが発生してしまいます。

> 参考
>
> [Windowsのシンボリックリンクとジャンクションとハードリンクの違い:Tech TIPS - @IT](http://www.atmarkit.co.jp/ait/articles/1306/07/news111.html)


### 対策 (Windows 10 Pro)
`SeCreateSymbolicLinkPrivilege` を対象のユーザーに与えます。

以下は Windows 10 Pro で動作確認しました。

1. スタートメニューから `gpedit` (グループポリシーの編集)を起動
1. コンピューターの構成 → Windowsの設定 → セキュリティの設定 → ローカルポリシー → ユーザー権限の割り当て → シンボリックリンクの作成
1. ユーザーを追加する 1. サインアウト 一度サインアウトしないと反映されません ### 他の環境での対策 Windows 10 Home には `gpedit` がインストールされていないようなので、事前にインストールする必要があります。また、Windows 7 では `secpol.msc` を使用するようですどちらも、動作未確認。 > 参考 > - [Windows10 Homeでローカルグループポリシーエディター(gpedit.msc)をインストールする方法](https://www.billionwallet.com/goods/windows10/windows10_gpedit.html) > - [How do I create a link in Windows 7 home premium as a regular user? - Super User](https://superuser.com/questions/124679/how-do-i-create-a-link-in-windows-7-home-premium-as-a-regular-user)

0 件のコメント: