Безопасно изменить домашний каталог - PullRequest
82 голосов
/ 22 октября 2008

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

Может кто-нибудь сказать мне, как они изменили это в Cygwin?

Ответы [ 11 ]

96 голосов
/ 29 ноября 2008

РЕДАКТИРОВАТЬ: Для последних версий Cygwin (1.7.34 и выше), см. этот новый вопрос .

Как и ответ sblundy, вы всегда можете редактировать от руки.

Но если вы хотите сделать это "официальным" способом, используйте команду mkpasswd, специфичную для cygwin. Ниже приведен фрагмент официальных документов mkpasswd:

Например, эта команда:

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

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

поместит домашние каталоги локальных пользователей в каталог «Профили» Windows.

На странице документации Cygwin Utilities (которая включает mkpasswd) есть множество действительно полезных команд. Использование cygpath в приведенном выше примере является еще одним из этих специфичных для cygwin инструментов.

Пока вы занимаетесь этим, вам, вероятно, также стоит прочесть документацию Эффективное использование Cygwin с Windows . Есть куча действительно хороших советов.

19 голосов
/ 22 октября 2008

В итоге я вышел из всех своих оболочек cygwin и отредактировал их вручную в текстовом редакторе. Пока все хорошо.

Примечание: не пропускайте пробелы в каталоге «Documents and Settings». Запись будет выглядеть как

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

Строка помечена символом :.

16 голосов
/ 25 апреля 2012

Самый простой ответ, который я нашел, - сделать / home мягкой ссылкой на каталог Windows Home / UserProfile

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

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

8 голосов
/ 22 апреля 2015

Для текущего пользователя у меня работает следующее:

  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.

4 голосов
/ 22 октября 2008

Я всегда устанавливаю HOME в качестве пользовательской переменной среды в Свойствах компьютера.

3 голосов
/ 12 декабря 2008

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

Вы можете сделать это, набрав команду:

mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
2 голосов
/ 23 ноября 2016

Оригинал ответ Кристофер из в другом месте

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

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

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
  • %_ Поскольку для разделения схем используются пробелы и символы табуляции, пробел в имени файла должен быть задан как %_ (это подчеркивание).
  • %% Символ процента.

Вместо пути вы можете указать одну из четырех предварительно заданных схем именованных путей.

  1. windows Домашний каталог пользователя настроен на тот же каталог, который используется в качестве домашнего каталога Windows, обычно это что-то вроде %USERPROFILE% или C:\Users\$USERNAME. Конечно, каталог Windows преобразуется в стиль POSIX Cygwin.

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

  3. unix Только AD: в домашнем каталоге пользователя указан путь POSIX, указанный в атрибуте unixHomeDirectory из вспомогательного класса posixAccount. См. Также раздел «Схема Unix» .

  4. desc Для домашнего каталога пользователя задан путь POSIX, заданный в параметре home = "..." в формате XML в атрибуте описания пользователя в SAM или AD. См. Подробное описание в разделе «Схема desc».

Следующее действие сделает домашний каталог пользователя в 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 во всех открытых диалоговых окнах, чтобы применить этот новый параметр

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

В командной строке Cygwin bash введите следующее:

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

* 114Переключатель 2 * указывает mkpasswd включить пользователей DOMAIN, а -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

2 голосов
/ 30 мая 2012

Использование переменной среды Windows: HOME

Это работает для меня на постоянное, непереносимое, не сетевое решение; т.е. постоянная установка переменной среды HOME в 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-файл ( текущий пользователь):

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%

2 голосов
/ 13 июня 2011

Мне нравится сохранять синхронизацию моей установки 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.

1 голос
/ 17 февраля 2016
cd /home
rm -rf chris
ln -s /cygdrive/z chris

Я не совсем уверен, что это самое безопасное решение, но это возможное решение, которое работает для меня;)

...