Как отсортировать UID "/etc/passwd"?

Последние несколько дней я ломал голову над этим маленьким проектом, и вот как он идет...

Мне нужно организовать все UID для нескольких серверов, чтобы у всех пользователей был один и тот же UID. /etc/passwd, Очевидно, я пытаюсь найти подходящий сценарий для этого, поэтому мне не нужно делать это вручную.

Если у меня есть 1 правильный сервер с правильными UID, может кто-нибудь порекомендовать управляемый скрипт для синхронизации других серверов /etc/passwd с правильным?

Я дошел до организации с помощью

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

Тогда я могу использовать diff или же sort сравнить обновленное passwd файл со старым passwd файл.

1 ответ

Решение

У grawity есть правильная идея в его комментарии... если бы это был скрипт, он должен быть довольно сложным, чтобы работать без перезагрузки... как при изменении всех идентификаторов на что-то сумасшедшее, а затем на нужное базовое число с usermod

это было бы намного проще в Python... и я думаю, что это входит в большинство дистрибутивов Linux в качестве стандарта сейчас. если вам нужен скрипт на python, который делает эту работу, так и скажите.


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

Включайте только имена пользователей, которые вы хотите изменить в /root/masterpasswd

Другие вопросы по тегам