Назад | Перейти на главную страницу

массовый обмен uidNumber / gidNumber?

В настоящее время у нас есть серверы LDAP в Dev env. и постановка / прод. ок. Оба не связаны, и учетные записи создаются вручную. Таким образом, uid одинаковы, но uidNumber и gidNumber в этих двух envs различаются.

Я пытаюсь перейти на 389 DS и настроить репликацию, чтобы пользователи синхронизировались с Dev на промежуточные / prod ldap серверы без необходимости администратора. Но для этого потребуется изменить uidnum / gidnum, но идентификатор пользователя останется прежним. Я написал скрипт, который дает мне список пользователей с конфликтующими uidnumber и говорит, что у меня около 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 имеет 2581 в dev. Если я изменю его с помощью приведенного ниже сценария, я испорчу файлы, принадлежащие amauer, когда я сделаю то же самое с другим пользователем. В то время у amour и aling будет одинаковый uidNumber.

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

Была ли у кого-нибудь подобная проблема при массовом изменении владельца / группы файлов? Какой-то механизм сортировки, который выдаст список,

Этот проект будет давать мне 2-3 часа дополнительного времени каждую неделю, а автоматизация - НАША профессия. :)

Любые идеи??

Спасибо

Попробуйте также выполнить команду chown / chgrp за один шаг:

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

Я нашел один способ сделать это, но похоже, что он решит его лишь частично. Количество конфликтующих пользователей: 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