- How to (Correctly) Change the UID and GID of a user/group in Linux
- Pre-requisites
- Modifying the UID and GID of the user and group
- Caveats
- Some more articles you might also be interested in …
- Команда usermod в Linux
- Синтаксис и опции usermod
- Примеры использования usermod
- 1. Изменить основную группу
- 2. Добавить в группу
- 3. Удалить из группы
- 4. Изменить домашнюю папку
- 5. Изменить оболочку
- 6. Изменить UID
- 7. Изменить логин
- 8. Изменить пароль
- 9. Заблокировать пользователя
- Выводы
How to (Correctly) Change the UID and GID of a user/group in Linux
Changing the UID and GID of a user might seem a trivial task to most of the system admins. But it’s not so trivial and it involves a lot more changes in the backend. In this post, we have outlined the exact steps to change the UID and GID of a user “user01”.
Username: user01 Group: group01 Existing UID: 800 Existing GID: 700 New UID: 900 New GID: 600
Pre-requisites
1. Make sure the user for which UID and GID is to be changed is currently not having any active process running in the system. To check the same use “ps” command. For example:
# ps -ef | grep user01 # ps -ef | grep 800
Note: In the “ps -ef” command UID are displayed. So make sure you grep for UID as well as the username for the user.
2. Take the backup of important files where UID and GID related information is stored. i.e. /etc/passwd and /etc/group.
# cp -p /etc/passwd /etc/passwd.bkp # cp -p /etc/group /etc/group.bkp
3. Verify the exisitng UID and GID of the user using the “id” command:
# id user01 uid=800(user01) gid=700(group01) groups=700(group01)
Modifying the UID and GID of the user and group
Once you have taken necessary backups and command outputs we can go ahead and change the UID and GID.
1. First change the GID of the group, group01:
2. Next, change the UID as well and GID of the user, user01:
# usermod -u 900 -g 600 user01
3. Verify the new UID and GID of the user:
# id user01 uid=900(user01) gid=600(group01) groups=600(group01)
Caveats
1. If there are multiple users in the group “group01”, after changing the GID of the group you will have to modify the other users as well along with the user01 as shown above.
2. Once you have changed the UID and GID, you will have to change the permissions of the files owned by the user/group as well. But the chown command also resets the SETUID and SETGID of the files, so you will need to manually change the permissions of these files later on. To find such files:
# find / -uid 900 -perm /6000 -ls # find / -gid 900 -perm /6000 -ls
3. To find the files owned by user01 and group01 and to change their permissions:
# find / -uid 800 -exec chown -v -h 900 '<>' \; # find / -gid 700 -exec chgrp -v 600 '<>' \;
The -h option is used to change the permissions of symbolic links as well.
Some more articles you might also be interested in …
Команда usermod в Linux
Управление пользователями системы и их основными и дополнительными группами – одна из важных задач при администрировании Linux. С ней отлично справляется встроенная команда usermod.
В этой статье будет рассмотрена команда usermod Linux. Сначала мы разберем её синтаксис и опции, а затем перейдем к конкретным примерам её использования, которые могут оказаться для вас полезными.
Синтаксис и опции usermod
Утилита usermod нужна для управления пользователями Linux, их основными и дополнительными группами. При ее выполнении в терминале нужно указать опции и конкретного пользователя, к которому применяются изменения. Синтаксис здесь следующий:
$ usermod опции имя_пользователя
Рассмотрим опции, которые будут использоваться в этой статье:
- —a, —append – добавить пользователя в одну или несколько дополнительных групп. Опция будет работать только вместе с опцией -G.
- —b, —badnames – разрешить использование имен, которые не соответствуют стандартам.
- —d, —home – указать новое местоположение домашнего каталога пользователя. При использовании опции -m содержимое текущего домашнего каталога будет перемещено на новое место.
- —e, —expiredate – указать дату, при наступлении которой учетная запись будет отключена. Дата вводится в формате ГГГГ-ММ-ДД. Если использовать эту опцию без указания даты, то отключение пользователя будет отменено.
- —f, —inactive – установить количество дней для блокировки пользователя, которое должно пройти после устаревания пароля. При значении -1 опция блокировки отключается, а при значении 0 блокировка случится сразу же после устаревания.
- —g, —gid – выбрать новую основную группу для пользователя и для файлов в его домашнем каталоге. Нужно задать имя или номер новой группы.
- —G, —groups – указать список дополнительных групп, в которые должен входить пользователь. Между собой группы разделяются запятой. Если пользователь входит в дополнительную группу, которая не была указана в списке, то он будет из нее удалён. Но при использовании опции -a можно добавлять новые дополнительные группы, не удаляя старые.
- —l, —login – изменить имя пользователя на новое. Данная опция не затрагивает никакие другие данные. А значит, название домашнего каталога и почты придется изменять вручную, чтобы они совпадали с новым именем пользователя.
- —L, —lock – заблокировать пароль пользователя. Эта опция помещает символ ! (восклицательный знак) перед паролем в зашифрованном виде, отключая его. Данную опцию нельзя использовать с -p и -U.
- —m, —move-home – изменить местоположение домашнего каталога пользователя. Опция будет работать только вместе с -d. Утилита попытается обновить права собственности на файлы и скопировать режимы, ACL и расширенные атрибуты.
- —o, —non-unique – разрешить заменить идентификационный номер пользователя на не уникальное значение. Работает в паре с опцией -u.
- —p, —password – изменить пароль в зашифрованном виде.
- —R, —root – выполнить chroot в указанный каталог и использовать его вместо корневого каталога / с хранящимися в нем конфигурационными файлами.
- —s, —shell – указать новую командную оболочку shell для пользователя. При использовании опции -s с пустым значением будет выбрана оболочка по умолчанию.
- —u, —uid – изменить параметр UID (числовой идентификатор пользователя). Данные изменения автоматически применятся к почтовому ящику и содержимому домашнего каталога. Для остальных файлов UID придется изменять вручную.
- —U, —unlock – разблокировать пароль пользователя. Данная опция убирает символ ! (восклицательный знак) перед паролем в зашифрованном виде, разрешая использовать его для входа. Не сработает с -p и -L.
Все доступные опции с исходным описанием для данной утилиты вы можете просмотреть в терминале, выполнив следующую команду:
На этом вводная часть статьи завершена. Теперь самое время рассмотреть конкретные примеры использования данной утилиты для администрирования группами в Linux.
Примеры использования usermod
Разберем типовые задачи, которые могут пригодиться вам для управления учетными записями на компьютере или ноутбуке.
1. Изменить основную группу
Посмотреть список всех групп, доступных в системе, можно в файле /etc/group, например, с помощью редактора vi в терминале:
Для смены основной группы нужна опция -g. Синтаксис здесь следующий:
$ usermod -g имя_основной_группы имя_пользователя
Задача – изменить основную группу для пользователя test_user на test_group (GID – 1001). Так будет выглядеть команда в нашем случае:
sudo usermod -g test_group test_user
Затем можно проверить что изменения применились с помощью команды id. В результатах вывода команды id нам интересен пункт GID. А еще вместо названия группы можно использовать ее идентификатор GID (1001 в нашем случае):
sudo usermod -g 1001 test_user
2. Добавить в группу
Допустим пользователь gregory2 обладает ограниченными правами, ведь используется в редких случаях для удаленного управления системой. Его нужно включить в группу plugdev, чтобы иметь полный доступ ко внешним устройствам, например, подключенным по USB жестким дискам. Сначала проверим его текущие группы командой:
С этой задачей поможет параметр —G. Но его обязательно нужно использовать вместе с -a, чтобы добавить новую группу, не удаляя старые:
sudo usermod -a -G plugdev gregory2
Более подробная инструкция по добавлению пользователя в группу с помощью команды usermod описана в отдельной статье. Теперь вы знаете как добавить пользователя в группу usermod.
3. Удалить из группы
Дальше давайте рассмотрим как удалить пользователя из группы usermod. Эта утилита не слишком хорошо справляется с удалением пользователя из групп, ведь нужной опции в ней просто нет. Но с помощью -G можно указать, в каких дополнительных группах пользователь останется, чтобы удалить все остальные.
В качестве примера возьмем уже упомянутую учетную запись gregory2. Задача – оставить ее только в группе disk, убрав cdrom и plugdev. В таком случае нужно для usermod задать опцию -G и ту группу, которая останется:
sudo usermod -G disk gregory2
А если вы хотите удалить все дополнительные группы для конкретного пользователя, передайте опции -G пустое значение:
В подробностях удаление пользователя из группы мы рассказывали в отдельной статье. Помимо утилиты usermod, в ней разобрана работа с gpasswd и deluser.
4. Изменить домашнюю папку
Чтобы увидеть текущий адрес домашней папки конкретно пользователя, посмотрите содержимое файла /etc/passwd, например, с помощью утилиты grep:
Конкретный каталог выводится с первым символом / (косая черта).
Здесь стоит отдельно рассмотреть два сценария: выбор другого местоположения для домашнего каталога и перемещение текущего домашнего каталога со всем его содержимым на новое место.
Если вы хотите просто изменить домашнюю папку, то воспользуйтесь опцией -d, указав новый адрес. Утилита автоматически создаст папку, если ее нет. В качестве примера возьмем путь /home/new-dir:
sudo usermod -d /home/new-dir gregory2
Проверим изменения с помощью уже упомянутой утилиты grep:
А если вы хотите переместить домашнюю папку, сохранив все содержимое, то дополните опцию -d опцией -m, опять же, указав новый путь. В качестве примера возьмем путь /home/gregory-new:
sudo usermod -m -d /home/gregory-new gregory2
Проверить местоположение новой папки можно с помощью grep, а убедиться в копировании содержимого – через файловый менеджер Linux.
5. Изменить оболочку
Просмотреть весь список доступных в системе оболочек получится в файле /etc/shells. Откройте его в редакторе vi:
Просмотреть оболочку конкретного пользователя можно в уже упомянутом файле /etc/passwd:
Нужная информация идет после домашнего каталога.
Для того чтобы поменять оболочку shell используйте опцию -s. В качестве примера возьмем оболочку /usr/bin/dash:
sudo usermod -s /usr/bin/dash gregory2
6. Изменить UID
UID – числовой идентификатор пользователя. Для его просмотра воспользуйтесь утилитой id:
Для изменения этого значения нужна опция -u. При этом новый номер должен быть неотрицательным (число 0 допустимо) и уникальным. В качестве примера возьмем 9138:
sudo usermod -u 9138 gregory2
Вы можете задать неуникальный номер UID, добавив к исходной команде опцию —o. В качестве примера возьмем идентификатор 0, который по умолчанию закреплен за группой root:
sudo usermod -o -u 0 gregory2
Не забывайте, что данные изменения автоматически применяются только к домашнему каталогу с его содержимым и к почтовому ящику.
7. Изменить логин
Для изменения логина (имени) пользователя предназначена опция -l. Но при этом она не затрагивает название домашнего каталога. Если вас это устраивает, то можете воспользоваться ей. Синтаксис:
$ sudo usermod -l новое_имя старое_имя
Вот как это выглядит с пользователем gregory2, который нужно переименовать в gregory3:
sudo usermod -l gregory3 gregory2
Ну а еще вы можете использовать эту команду вместе с перенесением домашней папки, например, в /home/gregory3:
sudo usermod -l gregory3 -m -d /home/gregory3 gregory2
8. Изменить пароль
Опция —password предназначена для изменения пароля в зашифрованном виде. А значит, так просто ей воспользоваться не получится. Необходимо добавить к ней команду openssl passwd для шифрования пароля. Для того чтобы изменить пароль на xz3 выполните:
sudo usermod —password $(openssl passwd -6 ‘xz3’) gregory
В результате пароль изменится сразу же после ее выполнения.
9. Заблокировать пользователя
Для блокировки пользователя пригодится опция -L, которая блокирует вход по паролю:
При использовании этой опции перед паролем пользователя в файле /etc/shadow добавляется восклицательный знак и пользователь не сможет больше войти в систему по паролю. Однако, другие способы входа ещё доступны. Для полной блокировки учетной записи к команде нужно добавить опцию —expiredate со значением 1:
sudo usermod —expiredate 1 -L gregory2
Для отмены блокировки в таком случае сработает команда с опциями -U и -e с пустым значением:
sudo usermod —expiredate «» -U gregory2
А еще с помощью —expiredate можно указать точную дату для блокировки в формате ГГГГ-ММ-ДД. Вот как будет выглядеть команда для 28 января 2023 года:
sudo usermod —expiredate 2023-01-28 gregory2
Посмотреть срок действия учетной записи получится через утилиту chage с опцией -l:
Выводы
Команда usermod linux позволяет достаточно удобно управлять группами пользователей, а также менять информацию о нём. Ну а если вы хотите более подробно разобраться с самими группами и их устройством в различных дистрибутивах Linux, ознакомьтесь с этим материалом. В нем детально рассмотрена эта тема, место хранения файла с группами и другая полезная информация.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.