Ändern Sie sicher das Ausgangsverzeichnis

82

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?

sblundy
quelle
4
Die doppelte Frage unter stackoverflow.com/q/1494658/923560 bietet Antworten auf aktuelle Cygwin-Versionen, die mit 1.7.34 beginnen.
Abdull

Antworten:

96

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 mkpasswdBefehl. 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 cygpathim 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.

netjeff
quelle
10
Wenn Sie sich in einer Domain befinden, können Sie diesen alternativen Befehl in Betracht ziehen: ( -dfü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 -cist für den "aktuellen Benutzer") $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
Ryan Pavlik
1
Danach scheint die .bashrc nicht gelesen zu werden, selbst wenn ich sie auf meine neue kopiere $HOME. Irgendeine Idee, wie man das behebt?
Jeff
1
Die Ausgabe sollte an (etc) an / etc / passwd angehängt werden (für Unternehmensszenarien mit mehreren Benutzern). Das hat funktioniert! :)
Andre
1
Verwenden Sie uname -r, um zu sehen, auf welcher Cygwin-Version Sie sich befinden
Martin Jakubik
19

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 .

sblundy
quelle
Dies funktioniert auch für UNC-Pfade, danke wurde zuvor mit der HOME-Variablen überschrieben
HaveAGuess
Was muss ich von Hand bearbeiten? Ich weiß nicht, warum mein Cygwin-Ausgangsverzeichnis /cygdrive/c/Users/JoseAngel/AppData/Roaming/SPB_16.6 ist. Ich möchte, dass es C: / Users / MyName /
16

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 -Hkehrt zurück/cygdrive/c/Users

M Smith
quelle
Nachdem ich dies einige Zeit getan habe, gibt es einen Nachteil: Ich muss es jedes Mal ausführen, wenn ich cygwin mit der Datei setup.exe aktualisiere. Keine große Sache, aber etwas, an das man sich erinnern sollte.
M Smith
Dies ist die beste Antwort. Ich frage mich, warum Cygwin nicht standardmäßig verwendet cygwin -Hwird. Es ist der sinnvollste Speicherort, und seit Windows 7 befindet sich auch kein Speicherplatz auf dem Pfad.
Bindestrich
In einem anderen Fall wird dies nicht funktionieren. Es entschied sich plötzlich, die symbolische Verbindung zu ignorieren!
Bindestrich
Sie müssen es erneut anwenden, wenn Sie das Setup erneut ausführen. Das ist das einzige Mal, dass es für mich gescheitert ist. Ich habe es noch nicht unter Windows 10 versucht
M Smith
Funktioniert wie erwartet unter Windows 10. Ich muss mich jedes Mal neu bewerben, wenn ich cygwin aktualisiere.
M Smith
8

Für den aktuellen Benutzer hat Folgendes für mich funktioniert:

  1. Schließen Sie Cygwin.
  2. Legen Sie die Windows-Benutzerumgebungsvariable HOME fest.
  3. Starten Sie Cygwin.
  4. Führen Sie "mkpasswd -c -p" $ (cygpath -H) "> / etc / passwd" aus.
  5. Starten Sie Cygwin neu.

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.

Samuel
quelle
Für Cygwin 1.7.35+ wird die Verwendung von mkpasswd zugunsten von /etc/nsswitch.conf
Christopher
4

Ich habe HOME in den Computereigenschaften immer als benutzerspezifische Umgebungsvariable festgelegt.

JesperE
quelle
Ich versuche dies zu vermeiden, da es auf ein Unternehmensnetzwerklaufwerk eingestellt ist. Sieht so aus, als würde es funktionieren.
sblundy
6
Beachten Sie, dass dies für ssh nicht funktioniert, das HOME explizit ignoriert und immer / etc / passwd verwendet. Siehe den letzten Satz von cygwin.com/faq/faq-nochunks.html#faq.setup.home .
Studgeek
3

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
Steven Penny
quelle
2

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\unixLegt 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\bashbash nicht verwendet , weil ich Console2 verwende , sodass ich kein zusätzliches cmd-Fenster benötige.

P. Myer Nore
quelle
2

Verwenden der Windows-Umgebungsvariablen: HOME

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.

CMD

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%

IMPORT REG-DATEI

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

REGEDIT

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

wyrdR
quelle
Unabhängig davon, auf welchen Informationen diese Antwort basiert, ist sie nicht mehr aktuell. Der ref: link ist ebenfalls defekt. Ich würde das zu Hause nicht versuchen.
Christopher
2

Ursprüngliche Antwort von Christopher von anderswo

Cygwin 1.7.34+

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/passwdoder /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.confDatei 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.
  • %HWindows-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.

  1. windowsDas 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.

  2. cygwinNur 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“ .

  3. unixNur 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“ .

  4. descDas 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

Cygwin 1.7.33 oder früher

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/passwdund /etc/groupDateien. 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:

  1. Öffnen Sie das System in der Systemsteuerung
  2. Klicken Sie auf der Registerkarte Erweitert auf Umgebungsvariablen (unten).
  3. Klicken Sie im Bereich Benutzervariablen auf "Neu ...".
  4. Geben Sie als Variablennamen ein HOME
  5. Geben Sie als Variablenwert ein %USERPROFILE%
  6. Klicken Sie in allen geöffneten Dialogfeldern auf OK, um diese neue Einstellung anzuwenden

Jetzt aktualisieren wir die Cygwin- /etc/passwdDatei mit der %HOME%soeben erstellten Windows- Variablen. Shell-Anmeldungen und Remote-Anmeldungen über sshgeben an /etc/passwd, wo sich der $HOMEPfad 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 -dSwitch weist mkpasswd an, DOMAIN-Benutzer einzuschließen, während -lnur 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/groupDatei 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

Christopher
quelle
1
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;)

kitingChris
quelle
0

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.

Pablo Halpern
quelle
0

Ich musste nur dabei sein, C:\Users\usernamewenn ich mit Cygwin anfing. Also habe ich gerade zu .bashrcund 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.

user123456789
quelle