Массовый обмен 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 '{}' +
Другие вопросы по тегам