Изменение UID и GID пользователя может показаться тривиальной задачей для большинства системных администраторов. Но она не так уж тривиальна и требует гораздо большего количества изменений в бэкенде. В этом посте мы описали точные шаги по изменению UID и GID пользователя "user".
1 2 | id user uid=255(user) gid=255(user) groups=255(user) |
Убедитесь, что пользователь, для которого необходимо изменить UID и GID, в настоящее время не имеет активного процесса, запущенного в системе. Для проверки используйте команду "ps". Например:
1 2 | ps -ef | grep user ps -ef | grep 255 |
В команде "ps -ef" отображаются UID. Поэтому убедитесь, что в grep отображается UID, а также имя пользователя.
Сделайте резервные копии важных файлов, в которых хранится информация, связанная с UID и GID, т.е. /etc/passwd и /etc/group.
1 2 | cp -p /etc/passwd /etc/passwd.bkp cp -p /etc/group /etc/group.bkp |
Изменение UID и GID пользователя и группы
После создания необходимых резервных копий и вывода команд мы можем приступить к изменению UID и GID.
Сначала измените GID группы, group01:
1 | groupmod -g 600 user |
Затем измените UID и GID пользователя user01:
1 | usermod -u 900 -g 600 user |
Проверьте новые UID и GID пользователя:
1 2 | id user uid=900(user) gid=600(user) groups=600(user) |
Если в группе "user" несколько пользователей, то после изменения GID группы вам придется изменить и других пользователей вместе с user, как показано выше.
После изменения UID и GID необходимо изменить разрешения файлов, принадлежащих пользователю/группе. Но команда chown также сбрасывает SETUID и SETGID файлов, поэтому позже вам придется вручную изменить разрешения этих файлов. Чтобы найти такие файлы:
1 2 | find / -uid 900 -perm /6000 -ls find / -gid 900 -perm /6000 -ls |
Чтобы найти файлы, принадлежащие пользователю user и группе user, и изменить их разрешения:
1 2 | find / -uid 255 -exec chown -v -h 900 '{}' \; find / -gid 255 -exec chgrp -v 600 '{}' \; |
Опция -h также используется для изменения разрешений символических ссылок.
либо изменить для конкретных директорий, в случае если это служба и пути известны
1 2 3 | chown -R user:user /var/log/<service> chown -R user:user /etc/<service> chown -R user:user /etc/default/<service> |