Неможливо змінити дозволи файлів на Ubuntu Bash для Windows 10


8

Я намагався використовувати екземпляр ssh, і я отримав цю помилку:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for 'privkey.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "privkey.pem": bad permissions
Permission denied (publickey).

Що дивно. Я спробував змінити дозвіл за допомогою команди chmod, але це, здається, не вийшло. Баш створив враження, що команда зареєструвалася, але я перевірив дозволи ключа, і це все ще було на рівні 777. Я відкрив свій git bash і міг без проблем ввімкнути свій примірник, і дозволи не були 777 як добре.


1
То яке оновлення ? Що станеться, якщо повернути його назад?
DavidPostill

1
Подібно до цього superuser.com/q/1321072/726810
Бісвапріо

Відповіді:


19

Якщо ви посилаєтесь на файли у файловій системі Windows, вони за замовчуванням не зберігають права доступу до Linux. Однак є спосіб це зробити. Відредагуйте або створіть (використовуючи sudo) /etc/wsl.confта додайте наступне:

[automount]
options = "metadata"

Вимкніть всі екземпляри WSL та перезавантажте екземпляр, і всі chmodзміни тепер зберігаються.


4
Це абсолютна правильна відповідь!
постійність

1
Не працює для мене. Я робив саме так, як ви пропонуєте, але набір дозволів із використанням chmodвсе ще не відображається під час виконання ls -al. Як не дивно (і це було також до внесення змін), деякі chmodзначення працюють, а інші - ні. Наприклад, 0600 не має ефекту, але 0400 змінює його на -r-xr-xr-x.
Ясен

@Ash переконайтеся, що ваші дозволи на WSL не суперечать дозволу Windows. Наприклад, якщо ви позначаєте файл, доступний лише для читання в Windows, він також не буде доступним для запису в WSL, оскільки дозволи на Windows перевищують дозволи на WSL.
nilskp

@nilskp Файл не позначений лише для читання в розділі Windows, і дозволи для Windows для нього є Повний контроль для системи, адміністраторів та користувача. Якщо права доступу до Windows відмінені, то саме за цим твердженням це не означає, що будь-яке chmodзроблене через WSL не буде дотримуватися?
Ясен

@Ash, поглянь на відповідь optionsВасиля А. Можливо, вам потрібна одна або обидві ці маски. Я недостатньо знаю проблему, щоб вирішити цю проблему.
nilskp

9

Чи закритий ключ у вашій файловій системі Windows (під / mnt /)? Ви не можете змінювати дозволи файлів у файловій системі Windows, використовуючи chmod на Bash в Ubuntu в Windows. Вам доведеться скопіювати приватний ключ у домашній каталог WSL (~) і зробити це там.

Деякі дискусії тут: https://github.com/Microsoft/WSL/isissue/81


4
Для цього обговорення є щонайменше 3 сторінки. Ви дійсно повинні цитувати інформацію, яку ви вважаєте, що стосується автора.
Рамхаунд

1
Річ у тім, що, безумовно, мені вдалося без проблем зіткнутися з моїм екземпляром. Це почалося лише сьогодні
iii

1
@iii Що ж змінилося останнім часом? Ви встановили будь-які оновлення Windows? Ви змінили будь-які конфігураційні файли? Відредагуйте та оновіть своє запитання.
DavidPostill

1
@iii - Яке оновлення? Ваше запитання не посилається на те, що воно працювало раніше. Ваше запитання також не вказує на те, що ви нещодавно встановили оновлення. Я не згоден з цією відповіддю, тому що посилання є від моменту, коли WSL було змінено (я вважаю), щоб підтримати те, що ви намагаєтесь зробити. З цієї причини я
підштовхував

3
@Ramhound, відповідна інформація з цієї дискусії перефразована у моїй відповіді, я щойно додав це посилання як джерело джерела. Відповідна інформація є у першій відповіді. Я не знав, що запитуючий стикався з цією проблемою лише після оновлення Windows, але вони не сказали, чи є ключ у файловій системі Windows, тому я все ще думаю, що це найімовірніше пояснення, поки вони не вкажуть на інше.
erobertc

6

Правильний спосіб впоратися з цим:

  1. Створіть файл з назвою /etc/wsl.confта відредагуйте його, щоб він містив:
    [automount]
    enabled = true
    root = /mnt/
    options = "metadata,umask=22,fmask=11"

Щоб зрозуміти значення кожного параметра вище, зверніться до цієї статті на msdn: https://blogs.msdn.microsoft.com/commandline/2018/02/07/automatically-configuring-wsl/

  1. Закрийте всі відкриті WSL-термінали, потім відкрийте новий.

Тепер ви все налаштовані, зміна дозволів на файл у Windows з / mnt / c / буде відображено правильно в підсистемі Linux через функцію "метадані" WSL.

Конфігурація WSL завжди встановлюватиметься правильно при запуску WSL.


1
Не працює для мене. Я робив саме так, як ви пропонуєте, але набір дозволів із використанням chmodвсе ще не відображається під час виконання ls -al. Як не дивно (і це було також до внесення змін), деякі chmodзначення працюють, а інші - ні. Наприклад, 0600 не має ефекту, але 0400 змінює його на -r-xr-xr-x.
Ясен

маску потрібно встановити на 111. Див. devblogs.microsoft.com/commandline/chmod-chown-wsl-improvements
Arunprasad Rajkumar

Ця відповідь добре працює для мене. @ArunprasadRajkumar, fmask не має бути 111 - використовуючи це , вилучаєте прапор, що виконується, з усіх файлів за замовчуванням (про що йдеться у статті, на яку ви посилаєтесь), і, мабуть, це не те, що ви хочете. Використання fmask=11використовуваних прапорів з файлової системи за замовчуванням, тому добре працює.
zelanix

Щоб уточнити мій попередній коментар, fmask=111вилучає права виконання з усіх файлів для власника, групи та анонімних користувачів. fmask=11видаляє права на виконання лише для групових та анонімних користувачів, використовуючи право виконання з файлової системи для власника (це, мабуть, те, що ви хочете, і добре працює з git). umask=22видаляє права запису з файлів та каталогів для групових та анонімних користувачів.
zelanix

-1

Скопіюйте файл ключа в будь-яку частину підсистеми Linux, потім змініть дозвіл та підключіться.

cp /mnt/path/to/key/file /home/$USER/

chmod 400 /home/$USER/key_file_name.pem

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.