批量交换 uidNumber/gidNumber?

批量交换 uidNumber/gidNumber?

我们目前在 Dev 环境和 staging/prod 环境中有 LDAP 服务器。两者没有耦合,帐户是手动创建的。因此,uid 相同,但 uidNumber 和 gidNumber 在这两个环境中不同。

我正在尝试升级到 389 DS 并设置复制,以便用户从 Dev 同步到 staging/prod ldap 服务器而无需管理员。但这样做将涉及更改 uidnum/gidnum,但用户 ID 将保持不变。我编写了一个脚本,它为我提供了具有冲突 uidnumbers 的用户列表,它说我有大约 250 个这样的用户。示例:

amauer STG:2596 | DEV:2581  conflictID:aling
aling STG:2581 | DEV:2678  conflictID:blsow
bslow STG:2678 | DEV:2625  conflictID:krusso

如您所见,amauer 的 staging uidNumber=2596 在 dev 中为 2581。如果我继续通过下面的脚本进行更改,当我对 aling 用户执行相同操作时,我会弄乱属于 amauer 的文件。此时,amour 和 aling 将具有相同的 uidNumber。

cat "$chownlist" | xargs -0 sudo chown $user
cat "$chgrplist" | xargs -0 sudo chown :$group
sudo rm "$chownlist" "$chgrplist"

有人在批量更改文件所有者/组时遇到过类似的问题吗?某种排序机制会列出一个列表,其中

这个项目将使我每周有 2-3 小时的额外时间,而且自动化是我们的职业。:)

有任何想法吗??

谢谢

答案1

尝试一下这个,一步完成 chown/chgrp:

find / -uid $OLDUID -exec chown $NEWUID '{}' +
find / -gid $OLDGID -exec chgrp $NEWGID '{}' +

答案2

我找到了一种方法来解决这个问题,但看起来只能部分解决问题。冲突用户数:250 具有 homeDirs 的主机数:50

脚本的种子。

amauer:2670:1010:2082:1010
aling:2082:1010:2871:1010
bslow:2871:1010:2447:1010

脚本

    for i in `cat hosts.txt`; do
        for j in `cat uid-gid_seed.txt`; do
            user_id=`echo $j | cut -d: -f 1`
            old_uid=`echo $j | cut -d: -f 2`
            old_gid=`echo $j | cut -d: -f 3`
            new_uid=`echo $j | cut -d: -f 4`
            new_gid=`echo $j | cut -d: -f 5`
            echo "--------------------"
            echo $i
            echo
            ssh $i `sudo /usr/bin/find -path "/home/$user_id" -user $old_uid -exec chown $new_uid '{}'`;
    done;
   done

相关内容