Безопасно изменить домашний каталог
Я пытаюсь безопасно обновить домашний каталог, как указано в /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
Для текущего пользователя у меня работает следующее:
- Закрыть 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.
Я всегда устанавливаю 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
%_
Поскольку для разделения схем используются пробелы и символы табуляции, пробел в имени файла должен быть задан как%_
(это подчеркивание).%%
Процентный символ.
Вместо пути вы можете указать одну из четырех предварительно заданных схем именованных путей.
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
файл с виндой %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.