it-swarm.com.de

chmod kann die Gruppenberechtigung für Cygwin nicht ändern

Ich verwende Cygwin und versuche, die Gruppenzugriffsberechtigung mit chmod zu ändern, z.

$ls -l id_rsa
-rwxrwxr-- 1 None 1679 Jun 13 10:16 id_rsa 

$ chmod g= id_rsa 

$ ls -l id_rsa 
-rwxrwxr-- 1 None 1679 Jun 13 10:16 id_rsa 

Das funktioniert aber nicht. Ich kann die Berechtigungen für Benutzer und andere Benutzer ändern. Scheint, dass die Berechtigungsstufe für Gruppe irgendwie die gleiche ist wie die des Benutzers?

16
sma

Ich hatte ein ähnliches Problem wie Sie und benutzte das NTFS-Dateisystem. Keith Thompsons Antwort konnte das Problem nicht lösen.

Ich habe den Gruppeninhaber der Datei in die Gruppe Users geändert:

chown :Users filename

Danach konnte ich die Gruppenberechtigungen mithilfe von chmod an meinen Willen ändern. Da es sich bei mir um einen RSA-Schlüssel für OpenSSH handelte, habe ich Folgendes getan:

chmod 700 filename

Und es hat funktioniert. In Cygwin erhalten Sie standardmäßig zwei Gruppen, die Gruppe Root und die Gruppe Users. Ich wollte eine andere Gruppe hinzufügen, aber ich konnte es nicht mit den Tools tun, die ich unter Linux verwende. Aus diesem Grund habe ich gerade die Gruppe Users verwendet.

34
volotec

Cygwin mag es nicht, dass Dateien im Besitz von Gruppen sind, die er nicht kennt. Leider passiert das in Cygwin sehr oft, besonders wenn sich Ihr PC in einer Windows-Domäne befindet, in der sich die Dinge ständig ändern. Ich synchronisiere auch Meine Dateien zwischen zwei PCs über ein externes Laufwerk und die Uids/Gids unterscheiden sich zwischen den verschiedenen PCs, sodass dies zu Problemen führt.

Wenn Sie ls -l verwenden und eine numerische Gruppen-ID anstelle eines Gruppennamens sehen, bedeutet dies, dass Cygwin die gid nicht kennt - d. H. Sie ist nicht in /etc/group enthalten, und Cygwin kann sie auch nicht von Windows abfragen. Sie können dies durch Ausführen von getent group <gid> bestätigen, wobei <gid> die numerische Gruppen-ID ist.

Um dies zu beheben, können Sie entweder chgrp verwenden, um die Gruppe für alle betroffenen Dateien/Verzeichnisse zu ändern (siehe obige Antwort oben), oder einen Eintrag für die unbekannte gid in /etc/group mit einem beliebigen nicht verwendeten Gruppennamen (z. B. Users2) erstellen.

Danach müssen Sie möglicherweise alle Ihre Cygwin-Fenster schließen und sie dann erneut öffnen.

4

Ein Experiment zeigt, dass chmod richtig funktioniert, um Gruppenberechtigungen unter Cygwin zu ändern.

Das Experiment verwendete eine Datei auf einer NTFS-Partition. Cygwin implementiert eine POSIX-Schicht über Windows, nutzt jedoch immer noch die Features von Windows selbst und der jeweiligen Dateisystemimplementierung.

In modernen Windows-Versionen sind die meisten Festplatten für die Verwendung von NTFS formatiert, wodurch ausreichend chmod unterstützt wird. Externe USB-Laufwerke verwenden jedoch normalerweise FAT32, das jedoch nicht die gleichen Fähigkeiten zum Darstellen von Berechtigungen besitzt. Die Cygwin-Ebene fälscht die POSIX-Semantik so gut wie möglich, aber es kann nur so viel getan werden.

Versuchen

$ df -T .

Wenn Sie darauf hinweisen, dass Sie ein FAT32-Dateisystem verwenden, ist dies wahrscheinlich das Problem. Die Lösung wäre, die Datei stattdessen in einem NTFS-Dateisystem zu speichern. Eine Datei mit dem Namen id_dsa ist wahrscheinlich ein privater SSH-Schlüssel und muss ohnehin in $HOME/.ssh gespeichert werden.

Befindet sich Ihr Home-Verzeichnis auf einer FAT32-Partition? Soweit ich mich erinnere, können aktuelle Windows-Versionen ("Recent" für die letzten 10 oder mehr Jahre) FAT32-Dateisysteme in NTFS konvertieren.


Der Rest dieser Antwort war eine Antwort auf die ursprüngliche Version der Frage, die im Befehl chmod einen Tippfehler enthielt.


Cygwin verwendet die GNU Coreutils-Version von chmod. Diese,

chmod g=0 fileName

ist nicht die richtige Syntax. Ich bekomme:

$ chmod g=0 fileName
chmod: invalid mode: `g=0'
Try `chmod --help' for more information.

(Dies ist unter Linux, nicht Cygwin, sollte aber gleich sein.)

Um alle Gruppenberechtigungen zu deaktivieren, sollte dies funktionieren:

$ chmod g= fileName
$ ls -l fileName 
-rw----r-- 1 kst kst 0 Jun 13 10:31 fileName

So zeigen Sie die chmod-Dokumentation an:

$ info coreutils chmod

So zeigen Sie die Dokumentation zum symbolischen Dateimodus an:

$ info coreutils Symbolic

Das Format der symbolischen Modi lautet:

 [ugoa...][+-=]PERMS...[,...]

dabei ist PERMS entweder null oder mehr Buchstaben aus der Menge 'rwxXst' oder ein einzelner Buchstabe aus dem Set 'ugo'.

2
Keith Thompson

Wie in früheren Antworten verursachen nicht anerkannte Gruppen solche Probleme. Dies geschieht meistens in Windows-Domänen.

Der einfachste Weg, das Problem zu beheben, ist die Wiederherstellung Ihrer /etc/passwd- und /etc/group-Dateien (der Parameter -d ist für Domänenbenutzer erforderlich):

mkpasswd -l -d > /etc/passwd
mkgroup  -l -d > /etc/group

Schließen Sie Cygwin und starten Sie ihn erneut.

2
zuko

Ich hatte dieses Problem, wenn ich remote von der Domäne aus arbeitete und cygserver verwendete.

Beim Ausführen von ls -l wurde eine numerische Gruppen-ID anstelle eines Gruppennamens angezeigt.

Ich stoppte cygserver, net stop "CYGWIN cygserver und andere Cygwin-Prozesse, führte dann den ls -l erneut aus und die Gruppennamen wurden korrekt angezeigt.

Ich glaube, Cygserver enthielt unvollständige Informationen zu Domänengruppen.

Nach dem Neustart von cygserver funktionierte das System weiterhin einwandfrei.

0
sreed314

Dies ist ein sehr nerviges Thema für mich. In meinem Fall hat die Lösung von user135348 am besten funktioniert. Das größte Problem bei der chown :Users -R-Methode ist, dass jedes Mal, wenn eine neue Datei erstellt wird, diese der unbekannten gid 1049120 zugewiesen wird. Es ist sehr frustrierend, die Datei-gid ständig zu ändern.

Ich habe auch mkgroup ausprobiert, aber in meinem Fall hat es nicht funktioniert: Mein gid ist 1049120.

Basierend auf den Regeln, die in Zuordnen von Windows-SIDs zu POSIX-Werten für UID/GID:: 0x100000 Offset wird für ein Konto aus der primären Domäne des Computers verwendet werden Holen Sie sich 544, die integrierte RID der Administratorengruppe.

Dieses Konto ist kein Mitglied der lokalen Gruppe Administratoren. Wir verwenden SuRun, um Administratorrechte zu vergeben, ohne Anmeldeinformationen zu vergeben. In diesem Fall konnte mkgroup nicht alle möglichen gids generieren.

Das Bearbeiten der Gruppendatei und das Hinzufügen eines benutzerdefinierten Gruppennamens scheint das Problem immer leicht zu beheben.

0
Ben