Массовый обмен uidNumber/gidNumber?
В настоящее время у нас есть серверы LDAP в Dev env. и постановка / прод. окр. Оба не связаны, и учетные записи создаются вручную. Таким образом, идентификаторы uidNumber и gidNumber различны в этих двух envs.
Я пытаюсь обновить систему до 389 DS и настроить репликацию, чтобы пользователи синхронизировались с Dev на промежуточные /prod ldap серверы без необходимости администратора. Но для этого потребуется изменить uidnum/gidnum, но идентификатор пользователя останется прежним. Я написал скрипт, который дает мне список пользователей с конфликтующими номерами и говорит, что у меня около 250 таких пользователей. Образец:
amauer STG:2596 | DEV:2581 conflictID:aling
aling STG:2581 | DEV:2678 conflictID:blsow
bslow STG:2678 | DEV:2625 conflictID:krusso
Как вы можете видеть, amauer с использованием staid uidNumber=2596 имеет 2581 в dev. Если я перейду к следующему сценарию и поменяю его, я испорчу файлы, которые принадлежат amauer, когда я сделаю то же самое для пользователя aling. Как и в то время, у amour и aling будет один и тот же uidNumber.
cat "$chownlist" | xargs -0 sudo chown $user
cat "$chgrplist" | xargs -0 sudo chown :$group
sudo rm "$chownlist" "$chgrplist"
У кого-нибудь была похожая проблема при массовой смене владельца / группы файлов? Какой-то механизм сортировки, который придет со списком, который
Этот проект даст мне 2-3 часа дополнительного времени каждую неделю, а автоматизация - НАША профессия.:)
Есть идеи??
Спасибо
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
Попробуйте также сделать chown/chgrp за один шаг:
find / -uid $OLDUID -exec chown $NEWUID '{}' +
find / -gid $OLDGID -exec chgrp $NEWGID '{}' +