web-dev-qa-db-ja.com

「/ etc / passwd」UIDを並べ替えるにはどうすればよいですか?

私はこの数日間、この小さなプロジェクトに頭を悩ませてきました。これがその方法です...

すべてのユーザーが/etc/passwdに同じUIDを持つように、複数のサーバーのすべてのUIDを整理する必要があります。明らかに、私はこれに適したスクリプトを見つけようとしているので、手動でこれを行う必要はありません。

正しいUIDを持つ正しいサーバーが1つある場合、他のサーバー/ etc/passwdを正しいサーバーと同期するための管理可能なスクリプトを誰かが推奨できますか?

使って整理するところまで来ました

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

次に、diffまたはsortを使用して、更新されたpasswdファイルを古いpasswdファイルと比較できます。

2
John Smith

grawityは彼のコメントで正しい考えを持っています...それがスクリプトでなければならない場合、再起動せずに動作するにはかなり複雑である必要があります...すべてのuidをクレイジーな高さに変更してから適切なベース番号に変更するように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に含めます

0
RobotHumans