Безопасно изменить домашний каталог

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

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

11 ответов

Решение

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

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

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

Линия помечена на : персонаж.

РЕДАКТИРОВАТЬ: Для последних версий 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. Есть куча действительно хороших советов.

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

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

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

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

  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.

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

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

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

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

Оригинальный ответ Christopher из других мест

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: является

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 файл с виндой %HOME% переменная, которую мы только что создали. Вход в систему Shell и удаленный вход через 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 

-d switch указывает 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

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

Это работает для меня на постоянное, непереносимое, не сетевое решение; т.е. постоянная установка переменной среды HOME в Windows.

Обратите внимание, что это не влияет на сессии ssh или telnet, которые всегда ссылаются на / etc / passwd

ref: Настройка Cygwin- Моя переменная окружения 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%

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

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

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

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

Мне нужно было только быть в C:\Users\usernameкогда я запускаю cygwin. Итак, я просто добавил.bashrc а также .profile

cd ${HOMEPATH}

Если вы предпочитаете использовать ~/. вместо того $HOMEPATH, вы также можете добавить следующее:

export HOME=${HOMEPATH}

Таким образом, я не буду мешать установке cygwin.

Другие вопросы по тегам