Я намагаюся безпечно оновити домашній каталог, як зазначено в /etc/passwd
, але стандартні утиліти Linux - usermod та vipw - для цього Cygwin не надає.
Хтось може сказати мені, як вони змінили це в Cygwin?
Я намагаюся безпечно оновити домашній каталог, як зазначено в /etc/passwd
, але стандартні утиліти Linux - usermod та vipw - для цього Cygwin не надає.
Хтось може сказати мені, як вони змінили це в Cygwin?
Відповіді:
РЕДАГУВАТИ: Щодо останніх версій 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 . Є купа дійсно хороших порад.
-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 як специфічну для користувача змінну середовища в Computer Properties.
Щоб уникнути проблем, викликаних наявністю пробілів у шляху до домашнього каталогу, скористайтесь короткою формою каталогу «Профілі» 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%
Оригінальний відповідь на Крістофера з інших
Для тих, хто використовує 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 перетворюється Cygwin у стиль POSIX.
cygwin
Тільки AD: для домашнього каталогу користувача встановлено шлях POSIX, заданий в атрибуті cygwinHome із допоміжного класу cygwinUser. Див. Також розділ під назвою «Схема cygwin» .
unix
Тільки AD: для домашнього каталогу користувача встановлено шлях POSIX, заданий в атрибуті unixHomeDirectory з допоміжного класу posixAccount. Див. Також розділ під назвою “Схема unix” .
desc
Для домашнього каталогу користувача встановлено шлях POSIX, вказаний у XML-подібному параметрі home = "..." в атрибуті опису користувача в SAM або AD. Детальний опис див. У розділі „Схема опису”.
Нижче наведено домашній каталог користувача в 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
шляху користувача.
У командному рядку Cyhwin 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
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.