Я пытаюсь безопасно обновлять домашний каталог, как указано в /etc/passwd
,
но стандартные Linux utils - usermod и vipw - для этого не предоставляются
by Cygwin.
Может ли кто-нибудь сказать мне, как они изменили это в Cygwin?
Я пытаюсь безопасно обновлять домашний каталог, как указано в /etc/passwd
,
но стандартные Linux utils - usermod и vipw - для этого не предоставляются
by Cygwin.
Может ли кто-нибудь сказать мне, как они изменили это в Cygwin?
В итоге я вышел из всех своих оболочек cygwin и редактировал его вручную в текстовом редакторе. Пока что так хорошо.
Примечание. Не удаляйте пробелы в каталоге "Документы и настройки". Запись будет выглядеть как
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
Линия символизируется символом :
.
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. Там куча действительно хороших советов.
Самый простой ответ, который я нашел, - сделать /home мягкой ссылкой на ваш каталог Windows Home/UserProfile
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
Я использовал cygpath, так как он получит правильное расположение для каталога HOME в текущей версии Windows. На моем ящике cygpath -H
возвращается /cygdrive/c/Users
Для текущего пользователя для меня работало следующее:
Я подтвердил, что он работает, запустив 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 на ручном накопителе и другом компьютере, поэтому я ненавижу жесткое кодирование домашнего каталога. Я использую следующий 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.
Это работает для меня для постоянного, не переносного, несетевого решения; т.е. постоянно изменять переменную HOME Environment в Windows.
Примечание, что это не влияет на сеансы ssh или telnet, которые всегда относятся к /etc/passwd
ref: Настройка переменной среды Cygwin- My HOME не является тем, что я хочу.
Для текущего пользователя (необходимо запустить один раз для каждого пользователя)::
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%
Оригинал ответ Christopher от в другом месте
Для тех, кто использует 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 и удалите ранее использованные /etc/passwd
и /etc/group
, а затем просмотрите приведенные выше шаги.
Далее выполните следующие шаги ниже.
Во-первых, установите переменную среды Windows для HOME, которая указывает на ваш профиль пользователя:
HOME
%USERPROFILE%
Теперь мы собираемся обновить файл 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
cd /home
rm -rf chris
ln -s /cygdrive/z chris
Я не уверен, что это безопасное решение, но это возможное решение, которое работает для меня;)
Я напрямую отредактировал файл /etc/passwd (убедившись, что ничто другое не обратится к нему), и изменил все ссылки на /home to be/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.