13 сентября 2011 г.

linux: изменить UID/GID юзера в системе

Сабж надобится иногда для того, чтобы аккуратно перевести систему на другой дистрибутив. Или чтобы корректно работали общие ресурсы в сети. И т.д. Всё примитивно, просто памятка. Проверяю под федорой и арчем, но способ универсальный. Мне надо поменять uid (1000 вместо 500) юзера dimon и назначить ему другую основную группу — 100(users) вместо 500(dimon).

Информация о текущих uid и группах юзера

# id dimon
uid=500(dimon) gid=500(dimon) группы=500(dimon),5(tty),14(uucp),54(lock),501(vboxusers),503(truecrypt),18(dialout)

Смена uid юзера

# usermod -u 1000 dimon
Для этого надо, чтобы пользователь не находился в системе. Иногда команда выполняется долго - меняются(!) права файлов, принадлежащих юзеру. Т.е. им перепрописывается новый uid. Но это происходит только в домашнем каталоге.
Кстати, аналогично для gid, если понадобится
# groupmod -g 1000 dimon

Смена прав всем файлам, принадлежащим юзеру

Помимо домашней папки поменять надо бы все остальные права файлов, делаем через find + exec, просто один из способов “в лоб”.
# find / -user {olduid} -exec chown {newuid} {} \;
И для групп аналогично:
# find / -group {oldgid} -exec chgrp {newgid} {} \;
Выполняется тоже не так уж быстро. Смотрите, чтобы всякие сетевые папки были отмонтированы, а то смените вообще всем :)
Для домашнего каталога можно, конечно, сделать что-то типа
# chown -R dimon:dimon /home/dimon

Смена группы юзера

Это смена основной группы юзера (а не смена gid группы). Назначаем:
# usermod -g 100 dimon
Смотрим:
# id dimon
uid=1000(dimon) gid=100(users) группы=100(users),5(tty),14(uucp),54(lock),501(vboxusers),503(truecrypt),18(dialout)
Ещё обратите внимание, что права в домашней папке уже не меняются, т.е. все они остаются группы dimon, что довольно логично. При желании можно через find + exec найти все файлы группы dimon и заменить на users (в примере выше меняем oldgid=500 на newgid=100), но я делать не стал, не требовалось.

Комментариев нет:

Отправить комментарий