Próbuję bezpiecznie zaktualizować katalog domowy, jak określono w /etc/passwd
, ale standardowe narzędzia Linuksa - usermod i vipw - do tego nie są dostarczane przez Cygwin.
Czy ktoś mógłby mi powiedzieć, jak zmienili to w Cygwin?
Próbuję bezpiecznie zaktualizować katalog domowy, jak określono w /etc/passwd
, ale standardowe narzędzia Linuksa - usermod i vipw - do tego nie są dostarczane przez Cygwin.
Czy ktoś mógłby mi powiedzieć, jak zmienili to w Cygwin?
Odpowiedzi:
EDYCJA: W przypadku najnowszych wersji Cygwin (1.7.34 i nowszych) zobacz to nowsze pytanie .
Podobnie jak w przypadku odpowiedzi Sblundy'ego, zawsze możesz edytować ręcznie.
Ale jeśli chcesz to zrobić w "oficjalny" sposób, użyj mkpasswd
polecenia specyficznego dla cygwin . Poniżej znajduje się fragment oficjalnej dokumentacji na temat mkpasswd
:
Na przykład to polecenie:
Przykład 3.11. Korzystanie z alternatywnego katalogu głównego
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
umieści katalogi domowe użytkowników lokalnych w katalogu „Profile” systemu Windows.
Istnieje wiele innych naprawdę przydatnych poleceń opisanych na stronie dokumentacji Cygwin Utilities (która obejmuje mkpasswd
). Użycie cygpath
w powyższym przykładzie jest kolejnym z tych narzędzi specyficznych dla cygwin.
Skoro już to robisz, prawdopodobnie zechcesz również przeczytać dokumentację Używanie Cygwin skutecznie z systemem Windows . Jest kilka naprawdę dobrych rad.
-d
dla domeny) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd
To nie zadziałało dla mnie - w zasadzie zawiesiło się. Ponieważ jestem jedynym, za pomocą tego urządzenia, mogę skorzystać z tej alternatywy, które powinny być bezpieczne, czy nie jesteś w domenie (the -c
to za „bieżącego użytkownika) $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
$HOME
. Jakiś pomysł jak to naprawić?
Skończyło się na tym, że opuściłem wszystkie moje powłoki Cygwin i edytowałem je ręcznie w edytorze tekstu. Jak na razie dobrze.
Uwaga: nie zmieniaj znaczenia spacji w katalogu „Documents and Settings”. Wpis będzie wyglądał
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
Linia jest tokenizowana na :
znaku.
Najprostszą odpowiedzią, jaką znalazłem, jest utworzenie / home jako miękkiego łącza do katalogu Home / UserProfile systemu Windows
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
Użyłem cygpath, ponieważ uzyska prawidłową lokalizację katalogu HOME w bieżącej wersji systemu Windows. Na moim pudełku cygpath -H
wraca/cygdrive/c/Users
cygwin -H
ustawiony. Jest to najrozsądniejsza lokalizacja, a ponieważ Windows 7 nie ma też miejsca na jego drodze.
Dla obecnego użytkownika działały dla mnie:
Potwierdziłem, że zadziałało, uruchamiając ssh-keygen bez żadnych argumentów. Po wprowadzeniu tej zmiany aplikacja domyślnie zapisuje klucz w / cygdrive / c / Users / user zamiast / home / user.
Nie wiem, czy ustawienie HOME jest wymagane, ale i tak zrobiłem to zgodnie z instrukcjami konfiguracji TortoiseGit z Cygwin, używając oficjalnej dokumentacji Tortoise dla nieoficjalnego wsparcia Cygwin tutaj . Ustawienie samego HOME nie wystarczyło, aby ssh-keygen rozpoznał zmianę katalogu domowego.
Zwróć również uwagę, że oficjalną dokumentację Cygwin dotyczącą tego problemu można znaleźć tutaj .
Potwierdzone w Windows 7 przy użyciu 64-bitowego Cygwin v1.7.35.
Zawsze ustawiam HOME jako zmienną środowiskową specyficzną dla użytkownika we Właściwościach komputera.
Aby uniknąć problemów spowodowanych spacjami w ścieżce do katalogu domowego, użyj skróconej formy katalogu „Profile” systemu Windows - tj /cygdrive/c/DOCUME~1/user
.
Możesz to zrobić wpisując polecenie:
mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
Oryginalny odpowiedź przez Christopher z innym
Dla tych, którzy używają Cygwin 1.7.34 lub nowszego Cygwin obsługuje konfigurację sposobu pobierania katalogu domowego, powłoki logowania i informacji o gecos w plikach/etc/nsswitch.conf
. Jest to szczegółowo opisane w sekcji Podręcznik użytkownika Cygwin:
Jeśli wcześniej utworzyłeś plik /etc/passwd
/etc/group
plik lub , będziesz chciał je usunąć i skonfigurować Cygwin przy użyciu nowego modelu Windows Security do mapowań POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
/etc/nsswitch.conf
Plik jestdb_home:
definiuje sposób, w jaki Cygwin pobiera katalog domowy użytkownika. Domyślne ustawienie db_home:
to
db_home: /home/%U
Więc domyślnie Cygwin po prostu ustawia katalog domowy na /home/$USERNAME
. Możesz to jednak zmienić, aby wskazywać dowolną inną ścieżkę niestandardową. Obsługiwane symbole wieloznaczne to:
%u
Nazwa użytkownika Cygwin (to małe litery u).%U
Nazwa użytkownika Windows (to wielkie litery U).%D
Domena Windows w stylu NetBIOS.%H
Katalog domowy Windows w stylu POSIX. Zwróć uwagę, że w przypadku db_home:
ustawienia ma to sens tylko zaraz po poprzedzającym go ukośniku, jak wdb_home: /%H/cygwin
%_
Ponieważ do oddzielania schematów używane są znaki spacji i TAB, w nazwie pliku należy podać spację jako %_
(to jest podkreślenie).%%
Znak procentu.Zamiast ścieżki można określić jeden z czterech wstępnie zdefiniowanych nazwanych schematów ścieżek.
windows
Katalog domowy użytkownika jest ustawiony na ten sam katalog, który jest używany jako katalog domowy systemu Windows, zwykle coś podobnego do %USERPROFILE%
lub C:\Users\$USERNAME
. Oczywiście katalog Windows jest konwertowany na styl POSIX przez Cygwin.
cygwin
Tylko AD: Katalog domowy użytkownika jest ustawiony na ścieżkę POSIX podaną w atrybucie cygwinHome z klasy pomocniczej cygwinUser. Zobacz także sekcję „Schemat Cygwin” .
unix
Tylko AD: Katalog domowy użytkownika jest ustawiony na ścieżkę POSIX podaną w atrybucie unixHomeDirectory z klasy pomocniczej posixAccount. Zobacz także sekcję „Schemat unixa” .
desc
Katalog domowy użytkownika jest ustawiony na ścieżkę POSIX podaną w ustawieniu home = "..." podobnym do XML w atrybucie opisu użytkownika w SAM lub AD. Szczegółowy opis znajduje się w sekcji „Schemat opisu”.
Poniższe sprawi, że katalog domowy użytkownika w Cygwin będzie taki sam, jak jest używany w katalogu domowym Windows.
db_home: windows
Dla tych, którzy używają Cygwin 1.7.33 lub wcześniejszej, zaktualizuj do najnowszej wersji Cygwin i usuń wcześniej używane pliki /etc/passwd
i /etc/group
, a następnie zobacz powyższe kroki.
W przeciwnym razie wykonaj te starsze kroki poniżej.
Po pierwsze, ustaw zmienną środowiskową Windows dla HOME, która wskazuje na Twój profil użytkownika:
HOME
%USERPROFILE%
Teraz zaktualizujemy /etc/passwd
plik Cygwin za pomocą %HOME%
właśnie utworzonej zmiennej Windows . Loginy powłoki i logowanie zdalne za pośrednictwem ssh
będą polegały na /etc/passwd
informowaniu ich o lokalizacji $HOME
ścieżki użytkownika .
W wierszu polecenia Cygwin bash wpisz:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
-d
Przełącznik nakazuje mkpasswd obejmować użytkowników domeny, natomiast-l
jest jedynie wyjściowych użytkowników maszyn lokalnych. Jest to ważne, jeśli używasz komputera w pracy, na którym informacje o użytkowniku są pobierane z kontrolera domeny systemu Windows.
Teraz możesz zrobić to samo dla grup, chociaż nie jest to konieczne, chyba że będziesz używać komputera, który jest częścią domeny Windows. Cygwin odczytuje informacje o grupie z baz danych kont Windows, ale możesz dodać /etc/group
plik, jeśli twój komputer jest często odłączony od kontrolera domeny.
Po znaku zachęty Cygwin bash wpisz:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Teraz wyjdź z Cygwin i uruchom go ponownie. Powinieneś zauważyć, że twoja ścieżka HOME wskazuje tę samą lokalizację, co twój profil użytkownika Windows - tj/cygdrive/c/Users/username
HOME
katalogu.
Lubię, gdy moja instalacja cygwin jest zsynchronizowana z pendrive i innym komputerem, więc nienawidzę twardego kodowania katalogu domowego. Używam następującego cygwin.bat:
echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL
SETLOCAL i ENDLOCAL zapewniają, że SHELL i HOME nie blokują istniejących zmiennych env dla innych programów. HOME=%~dp0..\..\doc\unix
ustawia HOME na dwa katalogi wyżej, w podkatalogu doc / unix. Następnie w .... \ doc \ unix.bashrc dołączam PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
. Nie start /wait %CD%\bin\bash
uruchamiałem basha, ponieważ używam Console2 , więc nie potrzebuję dodatkowego okna cmd.
To działa dla mnie w przypadku stałego, nieprzenośnego, niesieciowego rozwiązania; tj. ustawienie zmiennej środowiskowej HOME na stałe w systemie Windows.
Zauważ, że nie ma to wpływu na sesje ssh lub telnet , które zawsze odwołują się do / etc / passwd
ref: Konfiguracja Cygwin - Moja zmienna środowiskowa HOME nie jest tym, czego chcę.
Dla bieżącego użytkownika (należy uruchomić raz na użytkownika):
reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Dla nowych użytkowników:
reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Uwaga: Carets ^ przed znakami procentu%
Importuj ten plik reg ( bieżący użytkownik):
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
Dla nowych użytkowników:
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
W Regedit pod:
Dla aktualnego użytkownika:
HKEY_CURRENT_USER\Environment
Dla nowych użytkowników:
HKU\.DEFAULT\Environment
Utwórz HOME jako nową rozszerzalną wartość ciągu (* REG_EXPAND_SZ *) i wstaw % USERPROFILE%
cd /home
rm -rf chris
ln -s /cygdrive/z chris
Nie jestem pewien, czy jest to najbezpieczniejsze rozwiązanie, ale jest to możliwe rozwiązanie, które działa dla mnie;)
Edytowałem mój plik / etc / passwd bezpośrednio (upewniając się, że nic innego nie będzie do niego dostęp) i zmieniłem wszystkie odniesienia do / home na / Users (w Windows 7). Okazało się, że aby wszystko działało poprawnie, musiałem usunąć wszelkie katalogi w katalogu / home (lub przenieść je w odpowiednie inne miejsce). W przeciwnym razie cygwin rozwinąłby rozdwojoną osobowość, w której, na przykład, „bash -l” zaczynałoby się w / home / Pablo, ale $ HOME byłoby / Users / Pablo, a emacs wyglądałby na odwrotnie. Po usunięciu / home / Pablo wszystko działało dobrze.
Musiałem być tylko C:\Users\username
wtedy, gdy zacząłem cygwin. Więc dodałem tylko .bashrc
i.profile
cd ${HOMEPATH}
Jeśli wolisz używać ~/.
zamiast $HOMEPATH
, możesz również dodać:
export HOME=${HOMEPATH}
W ten sposób nie przeszkadzam w instalacji cygwin.