2

I have been banging my head on this little project the past few days and here is how it goes...

I need to organize all the UIDs for multiple servers so all users have the same UID in their /etc/passwd. Obviously I am trying to find a proper script for this so I do not have to do this manually.

If I have 1 correct server with the correct UIDs could someone recommend a manageable script to sync other servers /etc/passwd with the correct one?

I got as far as orgizing it with using

awk -F ':' '{print$1,$3}' /etc/passwd  

Then I can use diff or sort to compare the updated passwd file with the old passwd file.

slhck
  • 223,558
  • 70
  • 607
  • 592
John Smith
  • 23
  • 1
  • 3
  • please post samples with an exemple of what you want before and after (you can conceal sensible parts) – Benoit Sep 20 '11 at 14:54
  • 4
    For an actual solution, stop keeping network-wide accounts in `/etc/passwd`. There are NIS and LDAP for that. – u1686_grawity Sep 20 '11 at 14:57
  • Thanks for the quick response. I here is what I would like to have Server 1 (incorrect UIDs) /etc/passwd jspasser:x:509 mrayes:x:507 ssmith:x:501 ljackson:x503 Server 2 (correct UIDs) jspasser:x:1001 mrayes:x:1001 ssmith:x:1002 ljackson:x:1003 – John Smith Sep 20 '11 at 15:10
  • @ grawity... good point, someone else brought that up in the past but its kinda out of our hands to make that decision:( . thanks – John Smith Sep 20 '11 at 15:15

1 Answers1

0

grawity has the right idea in his comment...if it had to be a script, it would need to be pretty complicated to work without a reboot...as in change all uids to something crazy high then to the right base number with usermod

it would be way easier in python...and i think that's included in most linux distros as standard now. if you need a python script that does the work, say so.


#!/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

Only include usernames you want to change in /root/masterpasswd

RobotHumans
  • 5,904
  • 1
  • 19
  • 25
  • I would be most appreciated if you could supply a python script to make this work. I am trying to do this for myself now but I am not sure if its being done correctly. thanks in advance – John Smith Sep 20 '11 at 17:54
  • Works in my testing...you still need to worry about groups etc – RobotHumans Sep 20 '11 at 19:04
  • thank you soo much for this. This helped me quite a bit! consider this thread resolved – John Smith Sep 20 '11 at 19:50