Как мне создать символическую ссылку - PullRequest
0 голосов
/ 03 февраля 2019

На томе NTFS в Windows 10 версии 1803, сборка 17134.523 с включенным режимом разработчика у меня есть файл myfile.Я могу сделать символические ссылки на этот файл с mklink.Однако, если я вызываю Files.createSymbolicLink на java jre 1.8.0_201, если выдает:

java.nio.file.FileSystemException: linkname: A required privilege is not held by the client.

    at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsFileSystemProvider.createSymbolicLink(Unknown Source)
    at java.nio.file.Files.createSymbolicLink(Unknown Source)
    at CreateLinks.main(CreateLinks.java:15)

То же самое работает без проблем в подсистеме Windows для Linux (WSL) с jre 1.8.0_191-8u191-b12-0ubuntu0.18.10.1-b12

Как я могу заставить это работать на окнах, не заходя в WSL?И где именно это исключение выбрасывается?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

это не связано с вашей Java, это просто связано с вашей ОС.см. следующую ссылку: Как создать символическую ссылку Soft с помощью java.nio.Files

Win10 с отключенным UAC - мне нужно было установить Локальные политики> Параметры безопасности> Контроль учетных записей пользователей:Запустите всех администраторов в режиме одобрения администратором = отключено - в противном случае - то же самое исключение FileSystemException: требуемая привилегия не удерживается клиентом

0 голосов
/ 03 февраля 2019

Создание символических ссылок требует SeCreateSymbolicLinkPrivilege, если только система не находится в режиме разработчика и WinAPI CreateSymbolicLink вызывается с флагом SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE (*).Команда CMD mklink использует этот флаг в Windows 10. Очевидно, что Java JRE версии 1.8.0_201 этого не делает.

Что касается WSL, она наследует контекст безопасности, из которого она запускается.При запуске из входа в систему с SeCreateSymbolicLinkPrivilege последние версии WSL будут создавать обычные символические ссылки Windows на томе drvfs (например, NTFS).В противном случае WSL использует пользовательский тип символической ссылки, основанный на точке повторного анализа IO_REPARSE_TAG_LX_SYMLINK (0xA000001D) вместо обычной точки повторного анализа IO_REPARSE_TAG_SYMLINK (0xA000000C).Вы можете запросить тип точки повторной обработки с помощью команды fsutil reparsepoint query <filename>.


(*). В документах говорится: «[s] установите этот флаг, чтобы разрешить создание символических ссылок, когда процесс не повышен»,Точнее, этот флаг позволяет создавать символические ссылки без SeCreateSymbolicLinkPrivilege, что связано только с «повышением» системных настроек по умолчанию.Лично я предоставляю эту привилегию группе «Прошедшие проверку», и в этом случае создание символических ссылок не требует повышения до полного доступа администратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...