Ich versuche, ein Bash-Skript in Cygwin auszuführen.
Ich bekomme Must run as root, i.e. sudo ./scriptname
Fehler.
chmod 777 scriptname
tut nichts, um zu helfen.
Ich habe nach Möglichkeiten gesucht, Sudo auf Cygwin zu imitieren und einen Root-Benutzer hinzuzufügen, da das Aufrufen von "su" den Fehler wiedergibt su: user root does not exist
, alles Nützliche und nichts gefunden hat.
Hat jemand irgendwelche Vorschläge?
what
Skript geben, das Sie ausführen möchten ? Es gibt kein Äquivalent zu 'sudo' in einer Cygwin-Shell - die Rechte stammen von dem Win-Benutzer, der die Cygwin-Shell gestartet hat. Daher ist der KyleWpppd-Link gut, um Fehler wie "sudo unknown command" zu vermeiden. In Ihrem Fall scheint es sich um ein bestimmtes Problem mit dem Skript zu handeln, das Sie ausführen möchten.Antworten:
Ich habe diese Frage auf SuperUser beantwortet, aber erst nachdem das OP die nicht hilfreiche Antwort ignoriert hatte, die zu diesem Zeitpunkt die einzige Antwort auf die Frage war.
Hier ist der richtige Weg, um die Berechtigungen in Cygwin zu erhöhen, kopiert von meiner eigenen Antwort auf SuperUser:
Ich habe die Antwort auf der Cygwin-Mailingliste gefunden . Um
command
in Cygwin mit erhöhten Berechtigungen ausgeführt zu werden, gehen Sie dem Befehlcygstart --action=runas
wie folgt voran :Dadurch wird ein Windows-Dialogfeld geöffnet, in dem Sie nach dem Administratorkennwort gefragt werden, und der Befehl wird ausgeführt, wenn das richtige Kennwort eingegeben wurde.
Dies ist einfach zu skripten, solange
~/bin
es sich auf Ihrem Weg befindet. Erstellen Sie eine Datei~/bin/sudo
mit folgendem Inhalt:Machen Sie nun die Datei ausführbar:
Jetzt können Sie Befehle mit echten erhöhten Berechtigungen ausführen :
Möglicherweise müssen Sie
~/bin
Ihren Pfad erweitern. Sie können den folgenden Befehl auf der Cygwin-CLI ausführen oder hinzufügen~/.bashrc
:Getestet unter 64-Bit Windows 8.
Anstelle der obigen Schritte können Sie auch einen Alias für diesen Befehl hinzufügen zu
~/.bashrc
:quelle
cat << 'EOF' > ~/bin/sudo\n #!/usr/bin/bash\n cygstart --action=runas "$@"\n EOF
(Ich kann nicht herausfinden, wie Zeilenumbrüche in diesen Kommentar eingefügt werden, daher habe ich dem Code '\ n' hinzugefügt.) Der Rest ab PATH = ... ist in Ordnung .ls
besteht darin, sie in einen lang laufenden Prozess wie Mintty, Bash oder Zsh einzuschließen. Aber alles erscheint in einem separaten Terminal. Was ich zu diesem Zeitpunkt einfach über die GUI mit ConEMU hätte öffnen können."$@"
erweitert sich zu etwas wie"$1" "$2" "$3" ...
und ohne,$@
erweitert sich zu$1 $2 $3...
.Sie müssen wahrscheinlich die Cygwin-Shell als Administrator ausführen. Sie können mit der rechten Maustaste auf die Verknüpfung klicken und auf Als Administrator ausführen klicken oder die Eigenschaften der Verknüpfung aufrufen und im Abschnitt Kompatibilität überprüfen. Vorsicht ... Root-Berechtigungen können gefährlich sein.
quelle
sudo
unter Linux.chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*
. Ohne sie könnte ich nicht auf die synchronisierten Ordner und Dateien zugreifen.Aufbauend auf der Antwort von dotancohen verwende ich einen Alias:
Funktioniert als Zauber:
Und wenn Sie SysInternals installiert haben, können Sie als Systembenutzer sogar ganz einfach eine Befehlsshell starten
quelle
Ich habe sudo-for-cygwin gefunden . Vielleicht würde dies funktionieren. Es handelt sich um eine Client / Server-Anwendung, die ein Python-Skript verwendet, um einen untergeordneten Prozess in Windows (pty) zu erzeugen und die tty des Benutzers und die Prozess-E / A zu verbinden.
Es erfordert Python in Windows und Python-Modulen Greenlet und Eventlet in Cygwin.
quelle
Oder installieren Sie das Syswin-Paket, das einen Port von su für Cygwin enthält: http://sourceforge.net/p/manufacture/wiki/syswin-su/
quelle
Es scheint, dass
cygstart/runas
dies nicht richtig funktioniert"$@"
und daher Befehle mit Argumenten, die Leerzeichen enthalten (und möglicherweise andere Shell-Metazeichen - ich habe es nicht überprüft), nicht richtig funktionieren.Ich habe beschlossen, nur ein kleines
sudo
Skript zu schreiben , das funktioniert, indem ich ein temporäres Skript schreibe, das die Parameter korrekt ausführt.quelle
Diese Antwort basiert auf einer anderen Antwort . Stellen Sie zunächst sicher, dass sich Ihr Konto in der Gruppe Administratoren befindet.
Erstellen Sie als Nächstes eine generische Datei "runas-admin.bat" mit folgendem Inhalt:
Führen Sie dann die Batchdatei wie folgt aus:
Zum Beispiel:
Stellen Sie einfach sicher, dass jeder einzelne Befehl in doppelte Anführungszeichen gesetzt wird. Sie erhalten die UAC-Eingabeaufforderung nur einmal, wenn Sie diese Methode verwenden. Diese Prozedur wurde verallgemeinert, sodass Sie jede Art von Befehl verwenden können.
quelle
Ein neuer Vorschlag zur Verbesserung von SUDO für CygWin von GitHub in diesem Thread mit dem Namen TOUACExt :
Noch in der Pre-Beta , scheint aber zu funktionieren.
quelle
Ich bin hier über Google gelandet und glaube tatsächlich, einen Weg gefunden zu haben, um in Cygwin eine voll funktionsfähige Root-Promt zu erhalten.
Hier sind meine Schritte.
Zuerst müssen Sie das Windows-Administratorkonto in "root" umbenennen. Öffnen Sie dazu das Starthandbuch und geben Sie "gpedit.msc" ein.
Bearbeiten Sie den Eintrag unter Richtlinie für lokalen Computer> Computerkonfiguration> Windows-Einstellungen> Sicherheitseinstellungen> Lokale Richtlinien> Sicherheitsoptionen> Konten: Administratorkonto umbenennen
Dann müssen Sie das Konto aktivieren, wenn es noch nicht aktiviert ist. Lokale Computerrichtlinie> Computerkonfiguration> Windows-Einstellungen> Sicherheitseinstellungen> Lokale Richtlinien> Sicherheitsoptionen> Konten: Status des Administratorkontos
Melden Sie sich jetzt ab und beim Root-Konto an.
Legen Sie nun eine Umgebungsvariable für cygwin fest. Um dies auf einfache Weise zu tun: Klicken Sie mit der rechten Maustaste auf Arbeitsplatz> Eigenschaften
Klicken Sie (in der linken Seitenleiste) auf "Erweiterte Systemeinstellungen".
Klicken Sie unten auf die Schaltfläche "Umgebungsvariablen"
Klicken Sie unter "Systemvariablen" auf die Schaltfläche "Neu ..."
Geben Sie für den Namen "cygwin" ohne Anführungszeichen ein. Geben Sie den Wert in Ihr Cygwin-Stammverzeichnis ein. (Meins war C: \ cygwin)
Drücken Sie OK und schließen Sie alles, um zum Desktop zurückzukehren.
Öffnen Sie ein Cygwin-Terminal (cygwin.bat)
Bearbeiten Sie die Datei / etc / passwd und ändern Sie die Zeile
Dazu (Ihre Nummern und der Maschinenname sind unterschiedlich, stellen Sie nur sicher, dass Sie die markierten Nummern auf 0 ändern!)
Nachdem alles erledigt ist, wird der Befehl "su" mit diesem nächsten Bit funktionieren. (Nicht perfekt, aber es wird genug funktionieren, um es zu verwenden. Ich denke nicht, dass Skripte richtig funktionieren werden, aber hey, du bist so weit gekommen, vielleicht kannst du den Weg finden. Und bitte teile)
Führen Sie diesen Befehl in cygwin aus, um den Deal abzuschließen.
Melden Sie sich vom Root-Konto ab und kehren Sie zu Ihrem normalen Windows-Benutzerkonto zurück.
Führen Sie danach die neue "su.bat" manuell aus, indem Sie im Explorer darauf doppelklicken. Geben Sie Ihr Passwort ein und schließen Sie das Fenster.
Versuchen Sie nun, den Befehl su von cygwin aus auszuführen, und prüfen Sie, ob alles in Ordnung war.
quelle
Da ich mit der verfügbaren Lösung nicht zufrieden bin, habe ich das Skript von nu774 übernommen , um die Sicherheit zu erhöhen und die Einrichtung und Verwendung zu vereinfachen. Das Projekt ist auf Github verfügbar
Um es zu verwenden, laden
cygwin-sudo.py
Sie es einfach herunter und führen Sie es über auspython3 cygwin-sudo.py **yourcommand**
.Sie können der Einfachheit halber einen Alias einrichten:
quelle
Verwenden Sie diese Option, um ein Administrationsfenster mit Bash oder Cmd aus einem beliebigen Kontextmenü des Verzeichnisses abzurufen. Klicken Sie einfach mit der rechten Maustaste auf einen Verzeichnisnamen und wählen Sie den Eintrag aus oder klicken Sie auf die hervorgehobene Schaltfläche.
Dies basiert auf dem chere-Tool und der leider nicht funktionierenden Antwort (für mich) von link_boy. Es funktioniert gut für mich mit Windows 8,
Ein Nebeneffekt ist die unterschiedliche Farbe im Admin-Cmd-Fenster. Um dies bei Bash zu verwenden, können Sie die .bashrc-Datei des Administrators ändern.
Ich kann die "Hintergrund" -Version (Rechtsklick in ein offenes Verzeichnis) nicht ausführen. Fühlen Sie sich frei, es hinzuzufügen.
quelle
Eine sehr einfache Möglichkeit, eine Cygwin-Shell und entsprechende Subshells mit Administratorrechten zu betreiben, besteht darin, die Eigenschaften des Links zu ändern, der die ursprüngliche Shell öffnet.
Folgendes gilt für Windows 7+ (möglicherweise auch für frühere Versionen, aber ich habe es nicht überprüft)
Normalerweise starte ich die Cygwin-Shell über einen Cygwin-Link in der Startschaltfläche (oder auf dem Desktop). Dann habe ich die Eigenschaften des Cygwin-Links in den Registerkarten geändert
/ Kompatibilität / Berechtigungsstufe /
und überprüfte das Kästchen,
"Führen Sie dieses Programm als Administrator aus"
Dadurch kann die Cygwin-Shell mit Administratorrechten und den entsprechenden Subshells geöffnet werden.
quelle
Ich habe diese Diskussion getroffen und nach Details zur
sudo
Implementierung in verschiedenen Betriebssystemen gesucht . Beim Lesen stellte ich fest, dass die Lösung von @ brian-white ( https://stackoverflow.com/a/42956057/3627676 ) nützlich ist, aber leicht verbessert werden kann. Ich habe es vermieden, die temporäre Datei zu erstellen, und implementiert, um alles mit dem einzigen Skript auszuführen.Außerdem habe ich den nächsten Schritt der Verbesserung der Ausgabe innerhalb eines einzelnen Fensters / einer einzelnen Konsole untersucht. Leider ohne Erfolg. Ich habe versucht, Named Pipes zu verwenden, um STDOUT / STDERR zu erfassen und im Hauptfenster zu drucken. Der untergeordnete Prozess hat jedoch nicht in Named Pipes geschrieben. Das Schreiben in eine reguläre Datei funktioniert jedoch gut.
Ich habe alle Versuche, die Grundursache zu finden, abgebrochen und die aktuelle Lösung unverändert gelassen. Hoffe, mein Beitrag kann auch nützlich sein.
Verbesserungen:
mintty
oderbash
, wenn der erste nicht gefunden wirdquelle
cygstart --wait --action=runas $mintty /bin/bash "$0" "$@"
nicht, wenn ein Argument Leerzeichen enthält? Es war immer für mich, wenn ich solche durch Cygstart / Runas ging.Basierend auf der Antwort von @ mat-khor nahm ich den Syswin
su.exe
, speicherte ihn alsmanufacture-syswin-su.exe
und schrieb dieses Wrapper-Skript. Es behandelt die Umleitung von stdout und stderr des Befehls, sodass es in einer Pipe usw. verwendet werden kann. Außerdem wird das Skript mit dem Status des angegebenen Befehls beendet.Einschränkungen:
env USERNAME=...
des Skriptaufrufs wird dieser überschrieben. Wenn andere Optionen benötigt würden, müsste das Skript zwischen syswin-su- und Befehlsargumenten unterscheiden, z. B. beim ersten Teilen--
..
quelle
Ich kann das selbst nicht vollständig testen, ich habe kein geeignetes Skript, um es auszuprobieren, und ich bin kein Linux-Experte, aber Sie können möglicherweise etwas nahe genug hacken.
Ich habe diese Schritte ausprobiert und sie scheinen zu funktionieren, aber ich weiß nicht, ob sie für Ihre Bedürfnisse ausreichen.
Um das Fehlen eines Root-Benutzers zu umgehen:
Dadurch werden Sie als Benutzer mit dem Namen "root" in cygwin ausgeführt, was in Verbindung mit "Als Administrator ausführen" in der Datei "bash.exe" möglicherweise ausreicht.
Sie benötigen jedoch noch einen Sudo.
Ich habe dies vorgetäuscht (und jemand anderes mit mehr Linux-Kenntnissen kann es wahrscheinlich besser vortäuschen), indem ich eine Datei namens 'sudo' in / bin erstellt und diese Befehlszeile verwendet habe, um den Befehl stattdessen an su zu senden:
Die Befehlszeile 'sudo vim' und andere scheinen für mich in Ordnung zu sein, also möchten Sie es vielleicht ausprobieren.
Seien Sie interessiert zu wissen, ob dies für Ihre Bedürfnisse funktioniert oder nicht.
quelle
Normalerweise habe ich einen Registrierungshelfer "Hier öffnen", um eine Cygwin-Shell mit Administratorrechten ganz einfach von überall auf meinem Computer aus zu öffnen.
Beachten Sie, dass Sie das Cygwin "chere" -Paket installiert haben müssen. Verwenden Sie zuerst "
chere -i -m
" von einer erhöhten Cygwin-Shell.Angenommen, Ihre Cygwin-Installation befindet sich in C: \ cygwin ...
Hier ist der Registrierungscode:
Hoffe das hilft. Lassen Sie mich wissen, ob es für Sie funktioniert. Vielen Dank.
PS: Sie können diesen Code abrufen, kopieren und einfügen und in einer Datei name.reg speichern, um ihn auszuführen ... oder Sie können die Werte manuell hinzufügen.
quelle
Versuchen:
Wo
<dir>
befindet sich das Verzeichnis, in dem Sie die Berechtigungen ändern möchten?quelle