В настоящее время у нас есть серверы 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