Надійно змініть домашній каталог


82

Я намагаюся безпечно оновити домашній каталог, як зазначено в /etc/passwd, але стандартні утиліти Linux - usermod та vipw - для цього Cygwin не надає.

Хтось може сказати мені, як вони змінили це в Cygwin?


4
Повторне запитання на stackoverflow.com/q/1494658/923560 містить відповіді на останні версії Cygwin, починаючи з 1.7.34.
Абдулл

Відповіді:


96

РЕДАГУВАТИ: Щодо останніх версій Cygwin (1.7.34 та пізніших версій), див. Це нове запитання .

Як і відповідь sblundy, ви завжди можете редагувати вручну.

Але якщо ви хочете зробити це «офіційним» способом, використовуйте команду cygwin mkpasswd. Нижче наведено фрагмент з офіційних документів щодо mkpasswd:

Наприклад, ця команда:

Приклад 3.11. Використання альтернативного домашнього кореня

$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd

помістив би домашні каталоги локальних користувачів у каталог «Профілі» Windows.

Існує купа інших дійсно корисних команд, описаних на сторінці документації Cygwin Utilities (яка включає mkpasswd). Використання cygpathу наведеному вище прикладі є ще одним із цих специфічних інструментів cygwin.

Поки ви це робите, ви, мабуть, також хочете прочитати " Ефективне використання Cygwin" з документацією Windows . Є купа дійсно хороших порад.


10
Якщо ви перебуваєте в домені, ви можете розглянути цю альтернативну команду: ( -dдля домену) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd Це не спрацювало для мене - вона в основному зависла. Оскільки я єдиний, хто використовує цю машину, я міг би скористатися цією альтернативою, яка повинна бути безпечною незалежно від того, перебуваєте ви в домені чи ні ( -cце для "поточного користувача") $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
Райан Павлік,

1
Зробивши це, .bashrc, здається, не читається, навіть якщо я скопіюю його до свого нового $HOME. Будь-яка ідея, як це виправити?
Джефф,

1
Висновок повинен бути доданий (>>) к / і т.д. / паролю (для корпоративних сценаріїв з декількома користувачами). Це спрацювало! :)
Андре

1
використовуйте uname -r, щоб побачити, на якій версії cygwin ви знаходитесь
martin jakubik

19

У підсумку я вийшов із усіх своїх оболонок cygwin і відредагував їх вручну в текстовому редакторі. Все йде нормально.

Примітка: не уникайте пробілів у каталозі "Документи та налаштування". Запис буде виглядати так

user:...:/cygdrive/c/Documents and Settings/user:/bin/bash

Рядок позначений :персонажем.


Це працює і для шляхів UNC, завдяки раніше було
замінено

Що я маю редагувати вручну? Я не знаю, чому мій домашній каталог cygwin /cygdrive/c/Users/JoseAngel/AppData/Roaming/SPB_16.6 Я хочу, щоб це було C: / Users / MyName /

16

Найпростіша відповідь, яку я знайшов, - зробити / home бути м'яким посиланням на ваш каталог Windows Home / UserProfile

cd /
mv home oldhome
ln -s "$(cygpath -H)" home

Я використовував cygpath, оскільки він отримає належне розташування для каталогу HOME у поточній версії Windows. На моєму ящику cygpath -Hповертається/cygdrive/c/Users


Проробивши це деякий час, є один недолік: мені доводиться запускати його кожного разу, коли я оновлюю cygwin за допомогою їх setup.exe. Не велика справа, але щось запам’ятати.
M Smith

Це найкраща відповідь. Цікаво, чому cygwin не виконує cygwin -Hза замовчуванням значення. Це найбільш розумне місце, і з Windows 7 на його шляху теж немає місця.
dashesy

з іншої ноти це не спрацює. Раптом вирішило проігнорувати символічне посилання!
dashesy

Вам доведеться застосувати його повторно, коли ви знову запустите налаштування. Це єдиний раз для мене це не вдалося. Я ще не пробував його на Windows 10, хоча
M Smith

Працює, як очікувалося, у Windows 10. Мені все одно доведеться подавати заявку щоразу, коли я оновлюю cygwin.
M Smith

8

Для поточного користувача для мене працювало:

  1. Закрийте Cygwin.
  2. Встановіть змінну середовища користувача HOME Windows.
  3. Запустіть Cygwin.
  4. запустити "mkpasswd -c -p" $ (cygpath -H) "> / etc / passwd".
  5. Перезапустіть Cygwin.

Я підтвердив, що це працює, запустивши ssh-keygen без будь-яких аргументів. Після внесення цієї зміни програма за замовчуванням зберігає ключ до / cygdrive / c / Users / user замість / home / user.

Я не знаю, чи потрібно налаштовувати HOME, але я все одно зробив це згідно з інструкціями щодо налаштування TortoiseGit разом із Cygwin, використовуючи офіційну документацію Tortoise для неофіційної підтримки Cygwin тут . Налаштування HOME поодинці було недостатньо, щоб ssh-keygen розпізнав зміну домашнього каталогу.

Також зверніть увагу, що офіційну документацію Cygwin з цього питання можна знайти тут .

Підтверджено в Windows 7 за допомогою 64-розрядної версії Cygwin v1.7.35.


Для Cygwin 1.7.35+ використання mkpasswd не рекомендується на користь /etc/nsswitch.conf
Крістофер

4

Я завжди встановлюю HOME як специфічну для користувача змінну середовища в Computer Properties.


Я намагаюся цього уникнути, оскільки це налаштовано на корпоративний мережевий диск. Схоже, це все одно спрацює.
sblundy

6
Зверніть увагу, що це не буде працювати для ssh, він явно ігнорує HOME і завжди використовує / etc / passwd. Див. Останнє речення cygwin.com/faq/faq-nochunks.html#faq.setup.home .
studgeek

3

Щоб уникнути проблем, викликаних наявністю пробілів у шляху до домашнього каталогу, скористайтесь короткою формою каталогу «Профілі» Windows - тобто /cygdrive/c/DOCUME~1/user.

Це можна зробити, ввівши команду:

mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd

2

Мені подобається синхронізувати встановлення cygwin з накопичувачем і іншим комп’ютером, тому я ненавиджу жорстке кодування домашнього каталогу. Я використовую наступний cygwin.bat:

echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL

SETLOCAL та ENDLOCAL переконайтесь, що SHELL та HOME не обмежують наявні змінні env для інших програм. HOME=%~dp0..\..\doc\unixвстановлює HOME як два каталоги в підкаталозі doc / unix. Потім у .... \ doc \ unix.bashrc я включаю PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin". Я не використовував start /wait %CD%\bin\bashдля запуску bash, оскільки я використовую Console2 , тому мені не потрібно додаткове вікно cmd.


2

Використання змінної середовища Windows: HOME

Це працює для мене як постійне, не портативне, немережеве рішення; тобто постійно встановлювати змінну HOME Environment у Windows.

Зауважте, що це не впливає на сеанси ssh або telnet, які завжди посилаються на / etc / passwd

ref: Налаштування Cygwin - змінна середовища My HOME - це не те, що я хочу.

CMD

Для поточного користувача (потрібно запускати один раз для кожного користувача):

reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

Для нових користувачів:

reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

Примітка: Каретки ^ перед знаками відсотка%

ІМПОРТУВАТИ ФАЙЛ REG

Імпортуйте цей файл reg ( поточний користувач):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

Для нових користувачів:

Windows Registry Editor Version 5.00

[HKU\.DEFAULT\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

REGEDIT

У Regedit, під:

Для поточного користувача:

HKEY_CURRENT_USER\Environment

Для нових користувачів:

HKU\.DEFAULT\Environment

Створіть HOME як нове значення розширюваного рядка (* REG_EXPAND_SZ *) і вставте % USERPROFILE%


На якій би інформації не базувалася ця відповідь, вона більше не актуальна. Посилання ref: посилання також порушено. Я б не намагався цього вдома.
Крістофер

2

Оригінальний відповідь на Крістофера з інших

Cygwin 1.7.34+

Для тих, хто використовує Cygwin 1.7.34 або новішої версії, Cygwin підтримує налаштування способу отримання домашньої директорії, оболонки входу та інформації про gecos /etc/nsswitch.conf. Це детально описано в розділі Посібника користувача Cygwin:

Якщо ви раніше створили файл /etc/passwdабо /etc/groupфайл, ви захочете видалити їх і налаштувати Cygwin, використовуючи нову модель безпеки Windows для зіставлення POSIX.

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

Параметр /etc/nsswitch.confфайлу db_home:визначає, як Cygwin отримує домашній каталог користувача. Значення за замовчуванням для db_home:IS

db_home: /home/%U

Тож за замовчуванням Cygwin просто встановлює для домашнього каталогу /home/$USERNAME. Ви можете змінити це, хоча вказувати на будь-який інший спеціальний шлях, який ви хочете. Підтримувані символи підстановки:

  • %u Ім'я користувача Cygwin (це малі регістри u).
  • %U Ім'я користувача Windows (це великі літери U).
  • %D Домен Windows у стилі NetBIOS.
  • %HДомашній каталог Windows у стилі POSIX. Зверніть увагу, що для db_home:налаштування це має сенс лише відразу після попередньої косої риски, як уdb_home: /%H/cygwin
  • %_Оскільки пробіли та символи TAB використовуються для розділення схем, пробіл в назві файлу повинен бути вказаний як %_(це підкреслення).
  • %% Символ на відсотки.

Замість шляху ви можете вказати одну з чотирьох іменованих схем шляхів, які є попередньо визначеними.

  1. windowsДля домашнього каталогу користувача встановлено той самий каталог, який використовується як домашній каталог Windows, як правило, щось на зразок %USERPROFILE%або C:\Users\$USERNAME. Звичайно, каталог Windows перетворюється Cygwin у стиль POSIX.

  2. cygwinТільки AD: для домашнього каталогу користувача встановлено шлях POSIX, заданий в атрибуті cygwinHome із допоміжного класу cygwinUser. Див. Також розділ під назвою «Схема cygwin» .

  3. unixТільки AD: для домашнього каталогу користувача встановлено шлях POSIX, заданий в атрибуті unixHomeDirectory з допоміжного класу posixAccount. Див. Також розділ під назвою “Схема unix” .

  4. descДля домашнього каталогу користувача встановлено шлях POSIX, вказаний у XML-подібному параметрі home = "..." в атрибуті опису користувача в SAM або AD. Детальний опис див. У розділі „Схема опису”.

Нижче наведено домашній каталог користувача в Cygwin таким же, як і для домашнього каталогу Windows.

db_home: windows

Cygwin 1.7.33 або раніше

Для тих , хто використовує Cygwin 1.7.33 або більш ранньої версії, оновлення до останньої версії Cygwin і видалити раніше використовувалися /etc/passwdі /etc/groupфайли, а потім перегляньте описані вище дії.

В іншому випадку виконайте наступні кроки нижче.

По-перше, встановіть змінну середовища Windows для HOME, яка вказує на ваш профіль користувача:

  1. Відкрийте систему на панелі керування
  2. На вкладці Додатково натисніть Змінні середовища (унизу)
  3. У області Змінні користувача натисніть "Створити…"
  4. Для імені змінної введіть HOME
  5. Для значення змінної введіть %USERPROFILE%
  6. Натисніть OK у всіх відкритих діалогових вікнах, щоб застосувати це нове налаштування

Тепер ми збираємось оновити /etc/passwdфайл Cygwin за допомогою %HOME%щойно створеної змінної Windows . Входи в оболонку та віддалені входи через sshбудуть покладатися на те, /etc/passwdщоб повідомити їм розташування $HOMEшляху користувача.

У командному рядку Cyhwin bash введіть наступне:

cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 

-dПеремикач вказує mkpasswd включати користувачів Домену, в той час як -lце тільки вихідні МІСЦЕВИХ користувачів машини. Це важливо, якщо ви використовуєте ПК на роботі, де інформація про користувача отримується з контролера домену Windows.

Тепер ви можете зробити те ж саме для груп, хоча це не потрібно, якщо ви не будете використовувати комп'ютер, який є частиною домену Windows. Cygwin зчитує групову інформацію з баз даних облікового запису Windows, але ви можете додати /etc/groupфайл, якщо ваша машина часто відключена від свого контролера домену.

У підказці Cygwin bash введіть наступне:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

Тепер вийдіть із Cygwin і запустіть його знову. Ви повинні виявити, що ваш HOME шлях вказує на те саме місце, що і ваш профіль користувача Windows - тобто/cygdrive/c/Users/username


1
cd /home
rm -rf chris
ln -s /cygdrive/z chris

Я не впевнений, що це найбезпечніше рішення, але це можливе рішення, яке працює для мене;)


0

Я відредагував свій файл / etc / passwd безпосередньо (переконавшись, що ніщо інше не матиме до нього доступу) і змінив усі посилання на / home на / Users (у Windows 7). Я виявив, що для того, щоб все працювало коректно, мені довелося видалити будь-які каталоги в каталозі / home (або перемістити їх у відповідне інше місце). В іншому випадку cygwin розвине роздвоєну особистість, де, наприклад, 'bash -l' починається в / home / Pablo, але $ HOME буде / Users / Pablo і emacs, здається, роблять зворотне. Після видалення / home / Pablo все працювало нормально.


0

Мені потрібно було бути там, лише C:\Users\usernameколи я починаю cygwin. Отже, я просто додав до .bashrcта.profile

cd ${HOMEPATH}

Якщо ви віддаєте перевагу використовувати ~/.замість $HOMEPATH, ви можете також додати наступне:

export HOME=${HOMEPATH}

Таким чином, я не заважаю установці cygwin.

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