我们目前在 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