Я пытаюсь безопасно обновить домашний каталог, как указано в /etc/passwd
, но стандартные утилиты Linux - usermod и vipw - для этого не предоставляются Cygwin.
Может ли кто-нибудь сказать мне, как они изменили это в Cygwin?
Я пытаюсь безопасно обновить домашний каталог, как указано в /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.
Пока вы это делаете, вы, вероятно, также захотите прочитать документацию по « Эффективному использованию Cygwin с Windows» . Есть несколько действительно хороших советов.
-d
для домена) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd
Это не сработало для меня - оно в основном зависло. Поскольку я единственный использую эту машину, я мог бы использовать эту альтернативу, которая должна быть безопасной вне зависимости от того, находитесь ли вы в домене (это -c
означает «текущий пользователь») $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
$HOME
. Есть идеи, как это исправить?
В итоге я закрыл все свои оболочки cygwin и отредактировал их вручную в текстовом редакторе. Все идет нормально.
Примечание: не избегайте пробелов в каталоге «Документы и настройки». Запись будет выглядеть так
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
Строка маркируется на :
персонаже.
Самый простой ответ, который я нашел, - это сделать / home мягкой ссылкой на ваш каталог Windows Home / UserProfile.
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
Я использовал 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 поддерживает настройку получения домашнего каталога, оболочки входа и информации 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:
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 до последней версии и удалите ранее использованные /etc/passwd
и/etc/group
файлы, а затем просмотрите описанные выше действия.
В противном случае выполните эти более старые шаги ниже.
Во-первых, установите переменную среды Windows для HOME, которая указывает на ваш профиль пользователя:
HOME
%USERPROFILE%
Теперь мы собираемся обновить /etc/passwd
файл Cygwin %HOME%
только что созданной переменной Windows . Входы в оболочку и удаленные входы через них 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 включить пользователей Домена, в то время как-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
HOME
каталога.
Мне нравится синхронизировать установку 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%
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.