Безопасно изменить домашний каталог



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



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

522   11  

11 ответов:

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-specific.

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

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

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

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

линия маркируется на : символ.

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

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

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

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

  1. Закрыть Cygwin.
  2. установите переменную среды пользователя HOME Windows.
  3. Запуск Cygwin.
  4. запустите " mkpasswd-c-p "$(cygpath-H)" > /etc/passwd".
  5. Перезапустить Cygwin.

Я подтвердил, что он работал, запустив ssh-keygen без каких-либо аргументов. После внесения этого изменения приложение теперь по умолчанию сохраняет ключ в /cygdrive/c/Users / user вместо /домашний пользователь.

Я не знаю, требуется ли настройка HOME, но я все равно сделал это в соответствии с инструкциями по настройке TortoiseGit с Cygwin, используя официальную документацию Tortoise для неофициальной поддержки Cygwin здесь. Установка дома в одиночку, хотя этого было недостаточно для 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 с пером и другим компьютером, поэтому я ненавижу жесткое кодирование домашнего каталога. Я использую следующую среду.летучая мышь:

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 чтобы начать Баш, потому что я использую Console2, поэтому мне не нужно дополнительное окно cmd.

использование переменной среды Windows: HOME

это работает для меня для постоянного, непереносимую, несетевые решения; т. е. установка переменной окружения Home постоянно в Windows.

Примечание что это не влияет ssh или telnet сессий, которые всегда относятся к / etc / passwd

ref: настройка Cygwin-моя домашняя переменная окружения-это не то, что я хотеть.

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

создать дома как новый Расширяемое Строковое Значение (*REG_EXPAND_SZ*) и поставить в %USERPROFILE%

Оригинал ответ by Кристофер С в другом месте

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

The /etc/nsswitch.conf файла db_home: настройка определяет, как Cygwin выбирает домашний каталог пользователя. Значение по умолчанию для db_home: и

db_home: /home/%U

так, по умолчанию, программа просто устанавливает домашний каталог для /home/$USERNAME. Вы можете изменить это, хотя указать на любой другой пользовательский путь, который вы хотите. Поддерживаются следующие подстановочные знаки:

  • %u имя пользователя Cygwin (это нижний регистр u).
  • %U имя пользователя Windows (это верхний регистр U).
  • %D домен Windows в стиле NetBIOS.
  • %H домашний каталог Windows в стиле POSIX. Обратите внимание, что для db_home: настройка, это имеет смысл только сразу после предшествующей косой чертой, а в db_home: /%H/cygwin
  • %_ С тех пор пробел и символы табуляции используются для разделения схем, пробел в имени файла должен быть задан как %_ (это подчеркнуть).
  • %% символ в процентах.

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

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

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

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

  4. desc в домашнем каталоге пользователя установлен путь POSIX, указанный в home="..."XML-аналогичная настройка в атрибуте описания пользователя в SAM или AD. Подробное описание см. В разделе "схема desc".

следующее сделает домашний каталог пользователя в Cygwin таким же, как используется для Windows home справочник.

db_home: windows

в Cygwin 1.7.33 или ранее

для тех, кто использует Cygwin 1.7.33 или ранее, обновление последняя версия Cygwin и удалить ранее использованные /etc/passwd и /etc/group файлы, см. выше.

Else, выполните следующие действия ниже.

во-первых, установите переменную среды Windows для дома, которая указывает на ваш профиль пользователя:

  1. открыть система на Панель Управления
  2. на Advanced tab click Переменные Среды (внизу)
  3. в области пользовательских переменных нажмите кнопку " Создать..."
  4. для имени переменной введите HOME
  5. для значения переменной введите %USERPROFILE%
  6. Нажмите кнопку " ОК " во всех открытых диалоговых окнах, чтобы применить этот новый параметр

теперь мы собираемся обновить программу 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 

The -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 и запустите его снова. Вы должны обнаружить, что ваш домашний путь указывает на то же место, что и ваш профиль пользователя Windows-т. е. /cygdrive/c/Users/username

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

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

я отредактировал мой/etc / passwd файл напрямую (убедившись, что больше ничего не будет обращаться к нему) и изменил все ссылки на /home на /Users (в Windows 7). Я обнаружил, что для того, чтобы все работало правильно, мне пришлось удалить все каталоги в каталоге /home (или переместить их в соответствующее другое место). В противном случае, программа будет развиваться раздвоение личности, когда, например, 'Баш -я хотел бы начать в /Home/Пабло, но $дом /пользователи/Пабло и Emacs, как представляется, сделать реверс. Как только я удалил / home / Pablo, все работало нормально.

Comments

    Ничего не найдено.