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

1905
John Smith

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

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

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

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

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

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

1
пожалуйста, отправьте образцы с примером того, что вы хотите до и после (вы можете скрыть разумные части) Benoit 12 лет назад 0
Для реального решения прекратите хранить общесетевые учетные записи в `/ etc / passwd`. Для этого есть NIS и LDAP. grawity 12 лет назад 4
Спасибо за быстрый ответ. Вот то, что я хотел бы иметь сервер 1 (неправильные UID) / etc / passwd jspasser: x: 509 mrayes: x: 507 ssmith: x: 501 ljackson: x503 Server 2 (правильные UIDs) jspasser: x: 1001 mrayes: х: 1001 ссмит: х: 1002 Джексон: х: 1003 John Smith 12 лет назад 0
@ grawity ... хорошая мысль, кто-то еще поднимал это в прошлом, но это не в наших руках, чтобы принять это решение :(. спасибо John Smith 12 лет назад 0

1 ответ на вопрос

0
RobotHumans

У 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

Я был бы очень признателен, если бы вы могли предоставить скрипт на python для этой работы. Я пытаюсь сделать это для себя сейчас, но я не уверен, что все сделано правильно. заранее спасибо John Smith 12 лет назад 0
Работает в моем тестировании ... вам все еще нужно беспокоиться о группах и т.д. RobotHumans 12 лет назад 0
Большое вам спасибо за это. Это мне очень помогло! считать эту тему решенной John Smith 12 лет назад 0

Похожие вопросы