Безопасное изменение домашней директории

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

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

Ответ 1

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

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

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

Линия символизируется символом :.

Ответ 2

EDIT: Для последних версий Cygwin (1.7.34 и выше) см. этот новый вопрос.

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

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

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

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

  • Закрыть Cygwin.
  • Установите переменную пользовательской среды HOME Windows.
  • Запустите Cygwin.
  • запустите "mkpasswd -c -p" $(cygpath -H) " > /etc/passwd".
  • Перезапустите 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.

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

Использование переменной среды 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^%

Примечание: Затраты ^ до процента-знаков%

IMPORT REG FILE

Импортируйте этот файл 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%

Ответ 9

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

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

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

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

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

  • 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, которая указывает на ваш профиль пользователя:

  • Откройте систему на панели управления
  • На вкладке "Дополнительно" щелкните "Переменные среды" (в нижней части).
  • В области "Пользовательские переменные" нажмите "Создать..."
  • Для имени переменной введите HOME
  • Для значения переменной введите %USERPROFILE%
  • Нажмите 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 

Коммутатор -d сообщает mkpasswd включить пользователей DOMAIN, а -l должен выводить только пользователей LOCAL. Это важно, если вы используете ПК на работе, где информация пользователя получена от контроллера домена 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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

cd ${HOMEPATH}

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

export HOME=${HOMEPATH}

Таким образом, я не мешаю установке Cygwin.