Wie sortiere ich die UIDs "/ etc / passwd"?

2041
John Smith

Ich habe mir in den letzten Tagen den Kopf gegen dieses kleine Projekt geschlagen und so geht es ...

Ich muss alle UIDs für mehrere Server organisieren, damit alle Benutzer dieselbe UID in ihrem Server haben /etc/passwd. Offensichtlich versuche ich, ein geeignetes Skript dafür zu finden, so dass ich dies nicht manuell tun muss.

Wenn ich einen richtigen Server mit den richtigen UIDs habe, könnte jemand ein verwaltbares Skript empfehlen, um andere Server / etc / passwd mit dem richtigen zu synchronisieren?

Ich habe es so weit gebracht, es mit zu organisieren

awk -F ':' '' /etc/passwd 

Dann kann ich diffoder verwenden sort, um die aktualisierte passwdDatei mit der alten passwdDatei zu vergleichen .

1
Bitte poste Proben mit einem Beispiel, was du vorher und nachher willst (du kannst sensible Teile verbergen) Benoit vor 13 Jahren 0
Beenden Sie für eine tatsächliche Lösung keine netzwerkweiten Konten in `/ etc / passwd`. Dafür gibt es NIS und LDAP. grawity vor 13 Jahren 4
Danke für die schnelle Antwort. Ich möchte folgendes haben: Server 1 (falsche UIDs) / etc / passwd jspasser: x: 509 mrayes: x: 507 ssmith: x: 501 ljackson: x503 Server 2 (richtige UIDs) jspasser: x: 1001 mrayes: x: 1001 schmied: x: 1002 ljackson: x: 1003 John Smith vor 13 Jahren 0
@ grawity ... guter Punkt, jemand anderes hat das in der Vergangenheit angesprochen, aber es ist irgendwie aus unseren Händen, um diese Entscheidung zu treffen :(. danke John Smith vor 13 Jahren 0

1 Antwort auf die Frage

0
RobotHumans

grawity hat in seinem Kommentar die richtige Idee ... wenn es ein Skript sein müsste, müsste es ziemlich kompliziert sein, ohne Neustart zu arbeiten ... da ändern sich alle uids auf etwas verrücktes hoch, dann auf die richtige Basisnummer mit usermod

Es wäre viel einfacher in Python ... und ich denke, das ist jetzt in den meisten Linux-Distributionen als Standard enthalten. Wenn Sie ein Python-Skript benötigen, das die Arbeit erledigt, sagen Sie es.

 #!/usr/bin/env python import subprocess, shlex   newlistolists = [] with open('/root/masterpasswd', 'r') as newetcpass: for line in newetcpass: alist = line.split(':') newlistolists.append(alist[:])  for entry in newlistolists: cmd = 'usermod -o -u ' + entry[2] + ' ' + entry[0] thecmd = shlex.split(cmd) subprocess.Popen(thecmd)  #insert additional logic for setting groups, shells, etc with relevant commands #you need to do some error handling too, but it's a fast ugly UID set script 

Geben Sie nur Benutzernamen an, die Sie in / root / masterpasswd ändern möchten

Ich wäre Ihnen sehr dankbar, wenn Sie ein Python-Skript zur Verfügung stellen könnten, damit dies funktioniert. Ich versuche das jetzt für mich zu tun, aber ich bin nicht sicher, ob es richtig gemacht wird. Danke im Voraus John Smith vor 13 Jahren 0
Funktioniert in meinen Tests ... Sie müssen sich immer noch um Gruppen etc kümmern RobotHumans vor 13 Jahren 0
Vielen Dank dafür. Das hat mir sehr geholfen! Betrachten Sie diesen Thread als gelöst John Smith vor 13 Jahren 0