2009-10-15 7 views
6

Ich möchte eine Benutzergruppe mit Python auf CentOS-System erstellen. Wenn ich 'python benutzen' sage, möchte ich nicht so etwas wie os.system machen und den Befehl unix geben, um eine neue Gruppe zu erstellen. Ich würde gerne wissen, ob es ein Python-Modul gibt, das sich damit beschäftigt.Erstellen Sie eine Benutzergruppe in Linux mit Python

Suchen im Internet hat nicht viel über das, was ich will, außer Python Benutzergruppen .. enthüllen. So musste ich dies fragen.

Ich lernte über das Modul grp, indem Sie hier auf SO, aber konnte nichts über das Erstellen einer Gruppe finden.

BEARBEITEN: Ich weiß nicht, ob ich dafür eine neue Frage starten muss, aber ich würde auch gerne wissen, wie (bestehende) Benutzer zu der neu erstellten Gruppe hinzugefügt werden.

Jede Hilfe wird geschätzt. Danke.

+0

Ich denke, ich werde mit der Ausführung der Kommandozeilen-Tools gehen ... –

Antwort

10

Ich weiß nicht, von einem Python-Modul, um es zu tun, aber der/etc/group und/etc/Das gshadow-Format ist ziemlich Standard. Wenn Sie möchten, können Sie einfach die Dateien öffnen, ihren aktuellen Inhalt analysieren und dann die neue Gruppe hinzufügen, falls nötig.

Bevor Sie diese gehen zu tun, betrachten:

  • Was passiert, wenn Sie versuchen, eine Gruppe hinzuzufügen, die auf dem System existiert bereits
  • Was, wenn mehrere Instanzen des Programms geschieht versuchen, eine Gruppe hinzuzufügen bei gleichzeitig
  • Was Ihr Code geschieht, wenn eine inkompatible Änderung der Gruppenformat ein paar Veröffentlichungen auf der ganzen Linie
  • NIS, LDAP, Kerberos, besteht ...

Wenn Sie nicht bereit sind, mit diesen Problemen umzugehen, verwenden Sie einfach das Unterprozessmodul und führen Sie groupadd aus. Es wird viel weniger wahrscheinlich sein, Ihre Kunden Maschinen zu brechen.

Eine andere Sache, die Sie tun könnten, wäre weniger fragil als das Schreiben Ihrer eigenen wäre, den Code in groupadd.c (im Schatten-Paket) in Python zu wickeln und es so zu tun. Ich sehe aber nicht, dass du dich so viel kaufst, als wenn du es nur ausführst, und es würde deinem Build mehr Komplexität und Zerbrechlichkeit verleihen.

+1

Danke für eine ausgezeichnete Antwort. Der Anwendungsfall, für den ich Skripte schreibe, hat keines der Probleme, die du erwähnt hast, aber das Hinzufügen meiner Einträge zu diesen "heiligen" Linux-Dateien ... lässt mich schuldig fühlen:) ... Ich denke, ich muss einfach gehen mit der Subprozesslösung. Danke noch einmal. –

5

Ich denke, Sie sollten verwenden Sie die Kommandozeilenprogramme von Ihrem Programm, viel Sorgfalt ist in dafür gesorgt, dass sie nicht brechen die Gruppen-Datei, wenn etwas schief geht.

jedoch das Dateiformat ziemlich geradlinig ist, selbst etwas zu schreiben, wenn Sie diesen Weg gehen wählen

+0

Es muss einige C-Funktionen und Bibliotheken hinter den Kulissen .. (gut (offensichtlich gemacht), dass die Befehle verwenden, erwarte ich möglicherweise eine Art Python Wrapper um sie herum .. ?? –

1

Es gibt keine Bibliotheksaufrufe zum Erstellen einer Gruppe. Dies liegt daran, dass es wirklich keine Gruppierung gibt. Eine GID ist einfach eine Nummer, die einem Prozess oder einer Datei zugewiesen ist. Alle diese Zahlen existieren bereits - es gibt nichts, was Sie tun müssen, um mit der Verwendung einer GID zu beginnen. Mit den entsprechenden Privilegien können Sie chown (2) aufrufen, um die GID einer Datei auf eine beliebige Zahl zu setzen, oder setgid (2), um die GID des aktuellen Prozesses einzustellen (es gibt ein bisschen mehr als das, mit effektiven IDs, Zusatz-IDs usw.).

Die Angabe eines Namens für eine GID erfolgt über einen Eintrag in/etc/group auf Basis von Unix/Linux/POSIX-Systemen, aber das ist nur eine Konvention, die von den Unix/Linux/POSIX-Benutzerlandwerkzeugen eingehalten wird. Andere netzwerkbasierte Verzeichnisse existieren ebenfalls, wie von Jack Lloyd erwähnt.

Die Manpage-Gruppe (5) beschreibt das Format der Datei/etc/group, es wird jedoch nicht empfohlen, direkt darauf zu schreiben. Ihre Distribution wird über Richtlinien verfügen, wie unbenannte GIDs zugewiesen werden, z. B. bestimmte Bereiche für verschiedene Zwecke reservieren (feste Systemgruppen, dynamische Systemgruppen, Benutzergruppen usw.). Die Reichweite dieser Nummernräume ist bei verschiedenen Distributionen unterschiedlich. Diese Richtlinien werden normalerweise in den Befehlszeilentools codiert, die ein Systemadministrator verwendet, um unbenannte GIDs zuzuweisen.

Dies bedeutet, dass die Befehlszeilentools am besten zum lokalen Hinzufügen einer Gruppe verwendet werden.

+0

"Es gibt wirklich nichts, wie eine Gruppe zu gründen" ... das ist definitiv etwas Gutes zu wissen ... Vielen Dank für eine großartige Antwort ... Ich denke, ich werde mit den Kommandozeilen-Tools fortfahren. –

Verwandte Themen