Ich versuche, das Home-Verzeichnis wie angegeben sicher zu aktualisieren /etc/passwd
, aber die Standard-Linux-Utils - usermod und vipw - dafür werden von Cygwin nicht bereitgestellt.
Kann mir jemand sagen, wie sie das in Cygwin geändert haben?
Ich versuche, das Home-Verzeichnis wie angegeben sicher zu aktualisieren /etc/passwd
, aber die Standard-Linux-Utils - usermod und vipw - dafür werden von Cygwin nicht bereitgestellt.
Kann mir jemand sagen, wie sie das in Cygwin geändert haben?
Antworten:
BEARBEITEN: Aktuelle Versionen von Cygwin (1.7.34 und höher) finden Sie in dieser neueren Frage .
Wie bei sblundys Antwort können Sie immer von Hand bearbeiten.
Wenn Sie dies jedoch auf "offizielle" Weise tun möchten, verwenden Sie den cygwin-spezifischen mkpasswd
Befehl. Unten finden Sie einen Ausschnitt aus den offiziellen Dokumenten zu mkpasswd
:
Zum Beispiel dieser Befehl:
Beispiel 3.11. Verwenden einer alternativen Home-Root
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
würde die Home-Verzeichnisse lokaler Benutzer in das Windows-Verzeichnis 'Profile' stellen.
Auf der Dokumentationsseite von Cygwin Utilities (einschließlich mkpasswd
) finden Sie eine Reihe weiterer wirklich nützlicher Befehle . Die Verwendung cygpath
im obigen Beispiel ist ein weiteres dieser Cygwin-spezifischen Tools.
Wenn Sie schon dabei sind, möchten Sie wahrscheinlich auch die Dokumentation Verwenden von Cygwin effektiv mit Windows lesen . Es gibt eine Menge wirklich guter Ratschläge.
-d
für Domain) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd
Dies hat bei mir nicht funktioniert - es hing im Grunde. Da ich der einzige bin, der diesen Computer verwendet, könnte ich diese Alternative verwenden, die sicher sein sollte, ob Sie sich in einer Domain befinden oder nicht (dies -c
ist für den "aktuellen Benutzer") $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
$HOME
. Irgendeine Idee, wie man das behebt?
Am Ende habe ich alle meine Cygwin-Shells verlassen und sie von Hand in einem Texteditor bearbeitet. So weit, ist es gut.
Hinweis: Verlassen Sie die Leerzeichen im Verzeichnis "Dokumente und Einstellungen" nicht. Der Eintrag wird so aussehen
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
Die Zeile ist auf dem :
Zeichen markiert .
Die einfachste Antwort, die ich gefunden habe, ist, / home als Softlink zu Ihrem Windows Home / UserProfile-Verzeichnis zu erstellen
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
Ich habe cygpath verwendet, da es den richtigen Speicherort für das HOME-Verzeichnis in der aktuellen Windows-Version erhält. Auf meiner Box cygpath -H
kehrt zurück/cygdrive/c/Users
cygwin -H
wird. Es ist der sinnvollste Speicherort, und seit Windows 7 befindet sich auch kein Speicherplatz auf dem Pfad.
Für den aktuellen Benutzer hat Folgendes für mich funktioniert:
Ich habe bestätigt, dass es funktioniert, indem ich ssh-keygen ohne Argumente ausgeführt habe. Nach dieser Änderung speichert die App standardmäßig den Schlüssel in / cygdrive / c / Users / user anstelle von / home / user.
Ich weiß nicht, ob das Einstellen von HOME erforderlich ist, aber ich habe es trotzdem gemäß den Anweisungen zum Einrichten von TortoiseGit mit Cygwin unter Verwendung der offiziellen Dokumentation von Tortoise für inoffiziellen Cygwin-Support hier getan . Das Festlegen von HOME allein reichte jedoch nicht aus, damit ssh-keygen die Änderung des Home-Verzeichnisses erkannte.
Beachten Sie auch, dass die offizielle Dokumentation von Cygwin zu diesem Thema hier zu finden ist .
Bestätigt in Windows 7 mit 64-Bit Cygwin v1.7.35.
Ich habe HOME in den Computereigenschaften immer als benutzerspezifische Umgebungsvariable festgelegt.
Verwenden Sie die Kurzform des Windows-Verzeichnisses "Profile", um Probleme zu vermeiden, die durch Leerzeichen im Pfad zu Ihrem Home-Verzeichnis verursacht werden /cygdrive/c/DOCUME~1/user
.
Sie können dies tun, indem Sie den folgenden Befehl eingeben:
mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
Ich mag es, meine Cygwin-Installation mit einem USB-Stick und einem anderen Computer synchron zu halten, deshalb hasse ich es, das Home-Verzeichnis hart zu codieren. Ich benutze die folgende cygwin.bat:
echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL
SETLOCAL und ENDLOCAL stellen sicher, dass SHELL und HOME vorhandene env-Variablen für andere Programme nicht überlasten. HOME=%~dp0..\..\doc\unix
Legt fest, dass HOME zwei Verzeichnisse im Unterverzeichnis doc / unix enthält. Dann füge ich in .... \ doc \ unix.bashrc ein PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
. Ich habe start /wait %CD%\bin\bash
bash nicht verwendet , weil ich Console2 verwende , sodass ich kein zusätzliches cmd-Fenster benötige.
Dies funktioniert für mich für eine permanente, nicht tragbare Lösung ohne Netzwerk. dh die HOME-Umgebungsvariable dauerhaft in Windows einstellen.
Beachten Sie, dass dies keine Auswirkungen auf SSH- oder Telnet- Sitzungen hat, die sich immer auf / etc / passwd beziehen
ref: Einrichten von Cygwin - Meine HOME-Umgebungsvariable ist nicht das, was ich will.
Für den aktuellen Benutzer (muss einmal pro Benutzer ausgeführt werden) ::
reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Für neue Benutzer:
reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Hinweis: Carets ^ vor Prozentzeichen%
Importieren Sie diese Registrierungsdatei ( aktueller Benutzer):
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
Für neue Benutzer:
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
In Regedit unter:
Für den aktuellen Benutzer:
HKEY_CURRENT_USER\Environment
Für neue Benutzer:
HKU\.DEFAULT\Environment
Erstellen Sie HOME als neuen erweiterbaren Zeichenfolgenwert (* REG_EXPAND_SZ *) und geben Sie % USERPROFILE% ein
Ursprüngliche Antwort von Christopher von anderswo
Für Benutzer von Cygwin 1.7.34 oder höher unterstützt Cygwin die Konfiguration des Abrufs von Basisverzeichnis-, Anmeldeshell- und Gecos-Informationen in /etc/nsswitch.conf
. Dies wird im Abschnitt Cygwin-Benutzerhandbuch beschrieben:
Wenn Sie zuvor eine /etc/passwd
oder /etc/group
-Datei erstellt haben, möchten Sie diese entfernen und Cygwin mithilfe des neuen Windows-Sicherheitsmodells für POSIX-Zuordnungen konfigurieren.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
Die Einstellung der /etc/nsswitch.conf
Datei db_home:
definiert, wie Cygwin das Home-Verzeichnis des Benutzers abruft. Die Standardeinstellung für db_home:
ist
db_home: /home/%U
Standardmäßig setzt Cygwin nur das Ausgangsverzeichnis auf /home/$USERNAME
. Sie können dies jedoch ändern, um auf einen beliebigen anderen benutzerdefinierten Pfad zu verweisen. Die unterstützten Platzhalterzeichen sind:
%u
Der Cygwin-Benutzername (das ist u in Kleinbuchstaben).%U
Der Windows-Benutzername (das ist U in Großbuchstaben).%D
Windows-Domäne im NetBIOS-Stil.%H
Windows-Ausgangsverzeichnis im POSIX-Stil. Beachten Sie, dass dies für die db_home:
Einstellung nur direkt nach dem vorhergehenden Schrägstrich sinnvoll ist, wie indb_home: /%H/cygwin
%_
Da Leerzeichen und TAB-Zeichen zum Trennen der Schemata verwendet werden, muss ein Leerzeichen im Dateinamen als %_
(das ist ein Unterstrich) angegeben werden.%%
Ein Prozentzeichen.Anstelle eines Pfads können Sie eines von vier vordefinierten benannten Pfadschemata angeben.
windows
Das Ausgangsverzeichnis des Benutzers wird auf dasselbe Verzeichnis festgelegt, das als Windows-Ausgangsverzeichnis verwendet wird, normalerweise in Anlehnung an %USERPROFILE%
oder C:\Users\$USERNAME
. Natürlich wird das Windows-Verzeichnis von Cygwin in den POSIX-Stil konvertiert.
cygwin
Nur AD: Das Home-Verzeichnis des Benutzers wird auf den POSIX-Pfad festgelegt, der im Attribut cygwinHome der Hilfsklasse cygwinUser angegeben ist. Siehe auch den Abschnitt „Das Cygwin-Schema“ .
unix
Nur AD: Das Ausgangsverzeichnis des Benutzers wird auf den POSIX-Pfad festgelegt, der im Attribut unixHomeDirectory der Hilfsklasse posixAccount angegeben ist. Siehe auch den Abschnitt „Das Unix-Schema“ .
desc
Das Home-Verzeichnis des Benutzers wird auf den POSIX-Pfad gesetzt, der in der XML-ähnlichen Einstellung home = "..." im Beschreibungsattribut des Benutzers in SAM oder AD angegeben ist. Eine ausführliche Beschreibung finden Sie im Abschnitt „Das Desc-Schema“.
Im Folgenden wird das Basisverzeichnis des Benutzers in Cygwin mit dem für das Windows-Basisverzeichnis verwendeten identisch.
db_home: windows
Wenn Sie Cygwin 1.7.33 oder früher verwenden, aktualisieren Sie auf die neueste Version von Cygwin und entfernen Sie zuvor verwendete Dateien /etc/passwd
und /etc/group
Dateien. Führen Sie dann die obigen Schritte aus.
Befolgen Sie andernfalls die folgenden älteren Schritte.
Legen Sie zunächst eine Windows-Umgebungsvariable für HOME fest, die auf Ihr Benutzerprofil verweist:
HOME
%USERPROFILE%
Jetzt aktualisieren wir die Cygwin- /etc/passwd
Datei mit der %HOME%
soeben erstellten Windows- Variablen. Shell-Anmeldungen und Remote-Anmeldungen über ssh
geben an /etc/passwd
, wo sich der $HOME
Pfad des Benutzers befindet .
Geben Sie an der Cygwin-Bash-Eingabeaufforderung Folgendes ein:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
Der -d
Switch weist mkpasswd an, DOMAIN-Benutzer einzuschließen, während -l
nur LOCAL-Maschinenbenutzer ausgegeben werden sollen. Dies ist wichtig, wenn Sie bei der Arbeit einen PC verwenden, auf dem die Benutzerinformationen von einem Windows-Domänencontroller abgerufen werden.
Jetzt können Sie dasselbe auch für Gruppen tun, obwohl dies nur erforderlich ist, wenn Sie einen Computer verwenden, der Teil einer Windows-Domäne ist. Cygwin liest Gruppeninformationen aus den Windows-Kontodatenbanken. Sie können jedoch eine /etc/group
Datei hinzufügen , wenn Ihr Computer häufig von seinem Domänencontroller getrennt ist.
Geben Sie an der Cygwin-Bash-Eingabeaufforderung Folgendes ein:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Beenden Sie nun Cygwin und starten Sie es erneut. Sie sollten feststellen, dass Ihr HOME-Pfad auf denselben Speicherort wie Ihr Windows-Benutzerprofil verweist - d. H./cygdrive/c/Users/username
cd /home
rm -rf chris
ln -s /cygdrive/z chris
Ich bin mir nicht sicher, ob es die sicherste Lösung ist, aber es ist eine mögliche Lösung, die für mich funktioniert;)
Ich habe meine Datei / etc / passwd direkt bearbeitet (um sicherzustellen, dass nichts anderes darauf zugreifen würde) und alle Verweise auf / home in / Users (unter Windows 7) geändert. Ich stellte fest, dass ich alle Verzeichnisse im Verzeichnis / home löschen musste (oder an den entsprechenden anderen Speicherort verschieben musste), damit alles ordnungsgemäß funktionierte. Andernfalls würde Cygwin eine gespaltene Persönlichkeit entwickeln, bei der beispielsweise 'bash -l' in / home / Pablo beginnt, $ HOME jedoch / Users / Pablo und Emacs das Gegenteil zu tun scheinen. Nachdem ich / home / Pablo gelöscht hatte, funktionierte alles einwandfrei.
Ich musste nur dabei sein, C:\Users\username
wenn ich mit Cygwin anfing. Also habe ich gerade zu .bashrc
und hinzugefügt.profile
cd ${HOMEPATH}
Wenn Sie lieber ~/.
anstelle von verwenden möchten $HOMEPATH
, können Sie auch Folgendes hinzufügen:
export HOME=${HOMEPATH}
Auf diese Weise störe ich die Cygwin-Installation nicht.