Я пытаюсь безопасно обновить домашний каталог, как указано в /etc/passwd, но стандартные утилиты Linux - usermod и vipw - для этого не предоставляются Cygwin.
Может ли кто-нибудь сказать мне, как они изменили это в Cygwin?
EDIT: для последних версий Cygwin (1.7.34 и выше) см. Этот новый вопрос .
Как и sblundy, вы всегда можете редактировать вручную.
Но если вы хотите сделать это «официальным» способом, используйте специальную mkpasswdкоманду cygwin . Ниже приведен отрывок из официальной документации mkpasswd:
Например, эта команда:
Пример 3.11. Использование альтернативного домашнего корня
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
поместит домашние каталоги локальных пользователей в каталог Windows «Профили».
Есть множество других действительно полезных команд, описанных на странице документации Cygwin Utilities (включая mkpasswd). Использование cygpathв приведенном выше примере - еще один из этих инструментов, специфичных для cygwin.
Если вы находитесь в домене, вы можете рассмотреть эту альтернативную команду: ( -dдля домена) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd Это не сработало для меня - оно в основном зависло. Поскольку я единственный использую эту машину, я мог бы использовать эту альтернативу, которая должна быть безопасной вне зависимости от того, находитесь ли вы в домене (это -cозначает «текущий пользователь») $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
Райан Павлик,
1
После этого файл .bashrc, похоже, не читается, даже если я скопирую его в свой новый $HOME. Есть идеи, как это исправить?
Джефф
1
Вывод должен быть добавлен (>>) в / etc / passwd (для корпоративных сценариев с несколькими пользователями). Это сработало! :)
Андре
1
используйте uname -r, чтобы узнать, какая у вас версия cygwin
Мартин Якубик
19
В итоге я закрыл все свои оболочки cygwin и отредактировал их вручную в текстовом редакторе. Все идет нормально.
Примечание: не избегайте пробелов в каталоге «Документы и настройки». Запись будет выглядеть так
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
Что мне нужно отредактировать вручную? Я не знаю, почему мой домашний каталог 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
Для текущего пользователя у меня работало следующее:
Закройте Cygwin.
Задайте переменную пользовательской среды HOME Windows.
Я подтвердил, что это работает, запустив ssh-keygen без каких-либо аргументов. После внесения этого изменения приложение теперь по умолчанию сохраняет ключ в / cygdrive / c / Users / user вместо / home / user.
Я не знаю, требуется ли установка HOME, но я все равно сделал это в соответствии с инструкциями по настройке TortoiseGit с Cygwin, используя официальную документацию Tortoise для неофициальной поддержки Cygwin здесь . Однако одной настройки HOME было недостаточно для ssh-keygen, чтобы распознать изменение домашнего каталога.
Также обратите внимание, что официальную документацию Cygwin по этой проблеме можно найти здесь .
Подтверждено в Windows 7 с использованием 64-разрядной версии Cygwin v1.7.35.
Чтобы избежать проблем, вызванных наличием пробелов в пути к вашему домашнему каталогу, используйте сокращенную форму каталога Windows «Профили» - т.е. /cygdrive/c/DOCUME~1/user .
Для тех, кто использует Cygwin 1.7.34 или выше, Cygwin поддерживает настройку получения домашнего каталога, оболочки входа и информации gecos в /etc/nsswitch.conf. Это подробно описано в разделе руководства пользователя Cygwin:
Если вы ранее создали файл /etc/passwdили, /etc/groupвы захотите удалить его и настроить Cygwin с использованием новой модели безопасности Windows для сопоставлений POSIX.
Настройка /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, пробел в имени файла должен быть указан как %_(подчеркивание).
%% Процентный символ.
Вместо пути можно указать одну из четырех предварительно определенных схем именованных путей.
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, которая указывает на ваш профиль пользователя:
Откройте систему на панели управления
На вкладке Advanced щелкните Environment Variables (внизу).
В области «Пользовательские переменные» нажмите «Создать…»
В поле Имя переменной введите HOME
Для значения переменной введите %USERPROFILE%
Нажмите OK во всех открытых диалоговых окнах, чтобы применить этот новый параметр.
Теперь мы собираемся обновить /etc/passwdфайл Cygwin %HOME%только что созданной переменной Windows . Входы в оболочку и удаленные входы через них sshбудут полагаться на то, /etc/passwdчтобы сообщить им местоположение пользователя.$HOME .
-dПереключатель указывает mkpasswd включить пользователей Домена, в то время как-l это только выходные МЕСТНЫХ пользователей машины. Это важно, если вы используете ПК на работе, на котором информация о пользователе получается из контроллера домена Windows.
Теперь вы можете сделать то же самое для групп, хотя в этом нет необходимости, если только вы не будете использовать компьютер, который является частью домена Windows. Cygwin считывает информацию о группах из баз данных учетных записей Windows, но вы можете добавить /etc/groupфайл, если ваш компьютер часто отключается от контроллера домена.
Теперь выйдите из Cygwin и снова запустите его. Вы должны обнаружить, что ваш путь HOME указывает на то же место, что и ваш профиль пользователя Windows, т.е./cygdrive/c/Users/username
Поскольку пути следуют предопределенной схеме с последней версией Cygwin вместо «перемещения» домашнего каталога, я бы рекомендовал использовать символические ссылки (включая родные для Windows) на определенные каталоги из HOMEкаталога.
gavenkoa
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.
Для текущего пользователя (необходимо запускать один раз для каждого пользователя):
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 в:
Для текущего пользователя:
HKEY_CURRENT_USER\Environment
Для новых пользователей:
HKU\.DEFAULT\Environment
Создайте HOME как новое расширяемое строковое значение (* REG_EXPAND_SZ *) и введите% USERPROFILE%
Я отредактировал свой файл / etc / passwd напрямую (убедившись, что ничто другое не будет иметь к нему доступ) и изменил все ссылки на / home на / Users (в Windows 7). Я обнаружил, что для того, чтобы все работало правильно, мне пришлось удалить все каталоги в каталоге / home (или переместить их в соответствующее другое место). В противном случае cygwin разовьется раздвоение личности, где, например, 'bash -l' будет начинаться с / home / Pablo, а $ HOME будет / Users / Pablo, а emacs, по-видимому, сделает обратное. Как только я удалил / home / Pablo, все заработало.
Ответы:
EDIT: для последних версий Cygwin (1.7.34 и выше) см. Этот новый вопрос .
Как и sblundy, вы всегда можете редактировать вручную.
Но если вы хотите сделать это «официальным» способом, используйте специальную
mkpasswd
команду cygwin . Ниже приведен отрывок из официальной документацииmkpasswd
:Есть множество других действительно полезных команд, описанных на странице документации Cygwin Utilities (включая
mkpasswd
). Использованиеcygpath
в приведенном выше примере - еще один из этих инструментов, специфичных для cygwin.Пока вы это делаете, вы, вероятно, также захотите прочитать документацию по « Эффективному использованию Cygwin с Windows» . Есть несколько действительно хороших советов.
источник
-d
для домена)$ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd
Это не сработало для меня - оно в основном зависло. Поскольку я единственный использую эту машину, я мог бы использовать эту альтернативу, которая должна быть безопасной вне зависимости от того, находитесь ли вы в домене (это-c
означает «текущий пользователь»)$ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
$HOME
. Есть идеи, как это исправить?В итоге я закрыл все свои оболочки cygwin и отредактировал их вручную в текстовом редакторе. Все идет нормально.
Примечание: не избегайте пробелов в каталоге «Документы и настройки». Запись будет выглядеть так
Строка маркируется на
:
персонаже.источник
Самый простой ответ, который я нашел, - это сделать / home мягкой ссылкой на ваш каталог Windows Home / UserProfile.
Я использовал cygpath, поскольку он получит правильное расположение для каталога HOME в текущей версии Windows. На мой ящик
cygpath -H
возвращается/cygdrive/c/Users
источник
cygwin -H
по умолчанию. Это наиболее разумное место, и, начиная с Windows 7, на его пути тоже нет места.Для текущего пользователя у меня работало следующее:
Я подтвердил, что это работает, запустив 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
источник
Cygwin 1.7.34+
Для тех, кто использует Cygwin 1.7.34 или выше, Cygwin поддерживает настройку получения домашнего каталога, оболочки входа и информации gecos в
/etc/nsswitch.conf
. Это подробно описано в разделе руководства пользователя Cygwin:Если вы ранее создали файл
/etc/passwd
или,/etc/group
вы захотите удалить его и настроить Cygwin с использованием новой модели безопасности Windows для сопоставлений POSIX.Настройка
/etc/nsswitch.conf
файлаdb_home:
определяет, как Cygwin выбирает домашний каталог пользователя. Значение по умолчанию дляdb_home:
ISТаким образом, по умолчанию 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.
Cygwin 1.7.33 или более ранняя
Для тех, кто использует Cygwin 1.7.33 или более раннюю версию , обновите Cygwin до последней версии и удалите ранее использованные
/etc/passwd
и/etc/group
файлы, а затем просмотрите описанные выше действия.В противном случае выполните эти более старые шаги ниже.
Во-первых, установите переменную среды Windows для HOME, которая указывает на ваш профиль пользователя:
HOME
%USERPROFILE%
Теперь мы собираемся обновить
/etc/passwd
файл Cygwin%HOME%
только что созданной переменной Windows . Входы в оболочку и удаленные входы через нихssh
будут полагаться на то,/etc/passwd
чтобы сообщить им местоположение пользователя.$HOME
.В командной строке Cygwin bash введите следующее:
-d
Переключатель указывает mkpasswd включить пользователей Домена, в то время как-l
это только выходные МЕСТНЫХ пользователей машины. Это важно, если вы используете ПК на работе, на котором информация о пользователе получается из контроллера домена Windows.Теперь вы можете сделать то же самое для групп, хотя в этом нет необходимости, если только вы не будете использовать компьютер, который является частью домена Windows. Cygwin считывает информацию о группах из баз данных учетных записей Windows, но вы можете добавить
/etc/group
файл, если ваш компьютер часто отключается от контроллера домена.В командной строке Cygwin bash введите следующее:
Теперь выйдите из Cygwin и снова запустите его. Вы должны обнаружить, что ваш путь HOME указывает на то же место, что и ваш профиль пользователя Windows, т.е.
/cygdrive/c/Users/username
источник
HOME
каталога.Мне нравится синхронизировать установку Cygwin с флэш-накопителем и другим компьютером, поэтому я ненавижу жесткое программирование домашнего каталога. Я использую следующий файл cygwin.bat:
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.источник
Использование переменной среды Windows: HOME
Это работает для меня для постоянного, непереносимого, несетевого решения; т.е. постоянная установка переменной HOME Environment в Windows.
Обратите внимание, что это не влияет на сеансы ssh или telnet, которые всегда ссылаются на / etc / passwd
ref: Настройка Cygwin - переменная окружения My HOME - это не то, что я хочу.
CMD
Для текущего пользователя (необходимо запускать один раз для каждого пользователя):
Для новых пользователей:
Примечание: вставки ^ перед знаком процента%
ИМПОРТ РЕГ-ФАЙЛА
Импортируйте этот reg-файл ( текущий пользователь):
Для новых пользователей:
РЕГЕДИТ
В Regedit в:
Для текущего пользователя:
Для новых пользователей:
Создайте HOME как новое расширяемое строковое значение (* REG_EXPAND_SZ *) и введите% USERPROFILE%
источник
Я не совсем уверен, что это самое безопасное решение, но это возможное решение, которое работает для меня;)
источник
Я отредактировал свой файл / 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.
источник