Linux set user uid

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”.

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:

2. Take the backup of important files where UID and GID related information is stored. i.e. /etc/passwd and /etc/group.

3. Verify the exisitng UID and GID of the user using the “id” command:

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:

3. Verify the new UID and GID of the user:

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:

3. To find the files owned by user01 and group01 and to change their permissions:

The -h option is used to change the permissions of symbolic links as well.

Источник

Изменение UID&GID пользователя и его файлов


Встала тут передо мной задача изменить UID и GID пользователя и правильно изменить владельца всех файлов.
Дело в том, что я работаю за двумя компьютерами попеременно, и файлы mysql лежат у меня на флешке. Получилось так, что id пользователя mysql на обоих компах отличается и мускл не может получить доступ к своим файлам. Присваивать права 0666 скучно, и по этому поводу я решил научиться грамотно изменять uid пользователя 🙂

Казалось бы, всё просто, но есть два нюанса которые необходимо учесть:

  1. UID и GID не всегда одинаковы для пользователя и его группы
  2. Не все файлы принадлежат одновременно юзеру mysql и группе mysql: файлы для chown нужно искать отдельно

Статья написана для тех, кто ещё не делал ничего подобного а также кто хочет научиться продвинутому использованию команды find и узнать что такое xargs.

Изменение идентификатора пользователя и группы

user =mysql new_uid = 600 old_uid =$ ( id -u $user )
group =mysql new_gid = 600 old_gid =$ ( id -g $user )
sudo usermod -u $new_uid $user
sudo groupmod -g $new_gid $group

Поиск осиротевших файлов

Если сейчас посмотреть на одну из папок с файлами mysql (например, ls -lah /var/lib/mysql ) то мы увидим, что файлы принадлежат подозрительному пользователю 112 и подозрительной группе 127. Такие файлы мы и будем искать с тем, чтобы удочерить их 🙂

Первое, что приходит в голову, это найти все файлы принадлежащие пользователю $old_uid или группе $old_group , и собрать все найденные файлы (при помощи xargs) в качества аргументов команде chown $user:$group . find выполняется от root чтобы гарантировать что он сможет забраться во все даже самые сурово защищённые папки и найдёт всё что от него требуется. xargs собирает строки из pipe и передаёт их команде, указанной в аргументе (chown). Замечу, что xargs может выполнить команду несколько раз во избежание слишком длинной строки аргументов.
Например, так:

sudo find / -user $old_uid -or -group $old_gid -print0 | xargs -0 sudo chown $user : $group

Сразу обращу внимание на флаги find -print0 и xargs -0 : это такая борьба с возможными пробелами в именах файлов. Такие файлы могут быть восприняты chown ‘ом как два разных. Первый флаг заставляет find выводить каждый найденный файл с нулём в конце (символ конца строки в Си), а второй флаг сообщает xargs что ему нужно отделять файлы друг от друга не по переводу строки, а по этому самому нулю, что гарантирует верную обработку даже самых хитрых имён файлов 🙂

Читайте также:  Canon pixma 2420 картриджи

Однако такой способ не принесёт желаемого результата: некоторые файлы, владельцем которых был ‘mysql:root’ станут принадлежать ‘mysql:mysql’. А мы ведь договорились сделать всё предельно правильно 🙂 Следовательно, поиск по user и по group надо вести отдельно.

Можно выполнить подряд две команды find:

sudo find / -user $old_uid -print0 | xargs -0 sudo chown $user
sudo find / -group $old_gid -print0 | xargs -0 sudo chown : $group

и это уже будет намного ближе к истине, но тогда find ‘у придётся дважды шуршать по всему жёсткому диску.

Есть способ заставить команду find выполнить для нас две операции параллельно, сократив количество чтений с диска ровно в два раза. Для этого используем группировку условий и команд find круглыми скобками (не забывая их экранировать: иначе за них возьмётся шелл) и пославив между ними оператор «запятая»: тогда обе скобки будут выполняться для каждого файла.
Мы составим два отдельных файла: в первом будет список файлов с -user=$old_uid , а во втором — с -group=$old_gid , и обрабатывать эти файлы мы будет раздельно. Условие поиска теперь разделено на две выполняющися для каждого файла скобки, и в случае выполниния условия команда -fprint0 записывает в соответствующий временный файл путь к найденному осиротевшему файлу.

chownlist =$ ( tempfile ) chgrplist =$ ( tempfile )
sudo find / \
\ ( -user $old_uid -fprint0 » $chownlist » \ ) , \ ( -group $old_gid -fprint0 » $chgrplist » \ )

После недолгого поиска все файлы будут найдены.

Последний момент поиска: на форумах очень часто задаётся вопрос как исключить папки из списка find так, чтобы он туда вообще не залезал. Это делается при помощи сочетания условия -path «folder» и команды -prune , которая запрещает find залезать в папки, попавшие в условие. Мы исключим из поиска папки ‘/proc’ и ‘/sys’.
Для этого в условия добавим ещё одну группировку скобками, отделив их от уже существующих скобок оператором -or . Этот оператор выполнит первое условие, а второе — только если не сработало первое. Так, find проверит не попалась ли ему исключённая из листинга директория (в которой он не будет искать), и если нет — будет составлять списки файлов.
Делается это так:

chownlist =$ ( tempfile ) chgrplist =$ ( tempfile )
sudo find / \
\ ( \ ( -path «/proc» -or -path «/sys» \ ) -prune \ ) -or \ # исключение папок
\ ( \ ( -user $old_uid -fprint0 » $chownlist » \ ) , \ ( -group $old_gid -fprint0 » $chgrplist » \ ) \ )

Также в исключения можно внести путь к диску с бекапом (он ведь у вас есть, верно? ;), подмонтированные сетевые шары и прочее.

Финиш

cat » $chownlist » | xargs -0 sudo chown $user
cat » $chgrplist » | xargs -0 sudo chown : $group
sudo rm » $chownlist » » $chgrplist » # Не забываем подчистить за собой

Проверка

sudo find / -nouser -or -nogroup -print

Если всё было сделано правильно (и в системе не водилось осиротевших файлов) — команда не должна ничего вывести.

Полный код скрипта

Надеюсь, статья окажется полезной. Рекомендую ближе ознакомиться с синтаксисом этой команды: она ведь намного мощнее чем вы думаете 🙂
Напоследок приведу полный код скрипта для смены UID&GID пользователя и его файлов:

#=== Настройки
user =mysql new_uid = 600 old_uid =$ ( id -u $user ) # имя, новый и старый UID
group =mysql new_gid = 600 old_gid =$ ( id -g $user ) # имя, новый и старый GID
#=== Смена UID & GID
sudo usermod -u $new_uid $user
sudo groupmod -g $new_gid $group
#=== Поиск файлов
chownlist =$ ( tempfile ) chgrplist =$ ( tempfile ) sudo find / \
\ ( \ ( -path «/proc» -or -path «/sys» \ ) -prune \ ) -or \
\ ( \ ( -user $old_uid -fprint0 » $chownlist » \ ) , \ ( -group $old_gid -fprint0 » $chgrplist » \ ) \ )
#=== chown и чистка
cat » $chownlist » | xargs -0 sudo chown $user
cat » $chgrplist » | xargs -0 sudo chown : $group
sudo rm » $chownlist » » $chgrplist «

Источник

A Complete Guide to Usage of ‘usermod’ command – 15 Practical Examples with Screenshots

In Unix/Linux distributions, the command ‘usermod‘ is used to modify or change any attributes of a already created user account via command line. The command ‘usermod‘ is similar to that ‘useradd‘ or ‘adduser‘ but the login granted to an existing user.

15 usermod Command Examples

The command ‘useradd‘ or ‘adduser‘ is used for creating user accounts in Linux systems. To know more about on how to create system users, read our complete guide at:

After creating user accounts, in some scenarios where we need to change the attributes of an existing user such as, change user’s home directory, login name, login shell, password expiry date, etc, where in such case ‘usermod’ command is used.

When we execute ‘usermod‘ command in terminal, the following files are used and affected.

  1. /etc/passwd – User account information.
  2. /etc/shadow – Secure account information.
  3. /etc/group – Group account information.
  4. /etc/gshadow – Secure group account information.
  5. /etc/login.defs – Shadow password suite configuration..
Читайте также:  Как правильно заправить картридж для принтера hp deskjet 2130

Basic syntax of command is:

Requirements

  1. We must have existing user accounts to execute usermod command.
  2. Only superuser (root) is allowed to execute usermod command.
  3. The usermod command can be executed on any Linux distribution.
  4. Must have basic knowledge of usermod command with options

Options of Usermod

The ‘usermod‘ command is simple to use with lots of options to make changes to an existing user. Let us see how to use usermod command by modifying some existing users in Linux box with the help of following options.

  1. -c = We can add comment field for the useraccount.
  2. -d = To modify the directory for any existing user account.
  3. -e = Using this option we can make the account expiry in specific period.
  4. -g = Change the primary group for a User.
  5. -G = To add a supplementary groups.
  6. -a = To add anyone of the group to a secondary group.
  7. -l = To change the login name from tecmint to tecmint_admin.
  8. -L = To lock the user account. This will lock the password so we can’t use the account.
  9. -m = moving the contents of the home directory from existing home dir to new dir.
  10. -p = To Use un-encrypted password for the new password. (NOT Secured).
  11. -s = Create a Specified shell for new accounts.
  12. -u = Used to Assigned UID for the user account between 0 to 999.
  13. -U = To unlock the user accounts. This will remove the password lock and allow us to use the user account.

In this article we will see ‘15 usermod commands‘ with their practical examples and usage in Linux, which will help you to learn and enhance your command-line skills using these options.

1. Adding Information to User Account

The ‘-c‘ option is used to set a brief comment (information) about the user account. For example, let’s add information on ‘tecmint‘ user, using the following command.

After adding information on user, the same comment can be viewed in /etc/passwd file.

Add Information to User

2. Change User Home Directory

In the above step we can see that our home directory is under /home/tecmint/, If we need to change it to some other directory we can change it using -d option with usermod command.

For example, I want to change our home directory to /var/www/, but before changing, let’s check the current home directory of a user, using the following command.

Now, change home directory from /home/tecmint to /var/www/ and confirm the home director after changing.

Change User Home Directory

3. Set User Account Expiry Date

The option ‘-e‘ is used to set expiry date on a user account with the date format YYYY-MM-DD. Before, setting up an expiry date on a user, let’s first check the current account expiry status using the ‘chage‘ (change user password expiry information) command.

The expiry status of a ‘tecmint‘ user is Dec 1 2014, let’s change it to Nov 1 2014 using ‘usermod -e‘ option and confirm the expiry date with ‘chage‘ command.

Set User Account Expiry Date

4. Change User Primary Group

To set or change a user primary group, we use option ‘-g‘ with usermod command. Before, changing user primary group, first make sure to check the current group for the user tecmint_test.

Now, set the babin group as a primary group to user tecmint_test and confirm the changes.

Change User Primary Group

5. Adding Group to an Existing User

If you want to add a new group called ‘tecmint_test0‘ to ‘tecmint‘ user, you can use option ‘-G‘ with usermod command as shown below.

Add Group to User

Note: Be careful, while adding a new groups to an existing user with ‘-G’ option alone, will remove all existing groups that user belongs. So, always add the ‘-a‘ (append) with ‘-G‘ option to add or append new groups.

6. Adding Supplementary and Primary Group to User

If you need to add a user to any one of the supplementary group, you can use the options ‘-a‘ and ‘-G‘. For example, here we going to add a user account tecmint_test0 with the wheel user.

So, user tecmint_test0 remains in its primary group and also in secondary group (wheel). This will make my normal user account to execute any root privileged commands in Linux box.

Add Multiple Groups to User

7. Change User Login Name

To change any existing user login name, we can use ‘-l‘ (new login) option. In the example below, we changing login name tecmint to tecmint_admin. So the username tecmint has been renamed with the new name tecmint_admin.

Now check for the tecmint user, It will not be present because we have changed it to tecmint_admin.

Check for the tecmint_admin account it will be there with same UID and with existing group what we have added before.

Читайте также:  Xerox phaser 3020 драйвер linux как установить

Change User Login Name

8. Lock User Account

To Lock any system user account, we can use ‘-L‘ (lock) option, After the account is locked we can’t login by using the password and you will see a ! added before the encrypted password in /etc/shadow file, means password disabled.

Check for the locked account.

Lock User Account

9. Unlock User Account

The ‘-U‘ option is used to unlock any locked user, this will remove the ! before the encrypted password.

Verify the user after unlock.

Unlock User Account

10. Move User Home Directory to New location

Let’s say you’ve a user account as ‘pinky‘ with home directory ‘/home/pinky‘, you want to move to new location say ‘/var/pinky‘. You can use the options ‘-d‘ and ‘-m‘ to move the existing user files from current home directory to a new home directory.

Check for the account and it’s current home directory.

Then list the files which is owned by user pinky.

Now we have to move the home directory from /home/pinky to /var/pinky.

Next, verify the directory change.

Check for the files under ‘/home/pinky‘. Here we have moved the files using -m option so there will be no files. The pinky user files will be now under /var/pinky.

Move User Home Directory

11. Create Un-encrypted Password for User

To create an un-encrypted password, we use option ‘-p‘ (password). For demonstration purpose, I’m setting a new password say ‘redhat’ on a user pinky.

After setting password, now check the shadow file to see whether its in encrypted format or un-encrypted.

Create Unencrypted User Password

Note: Did you see in the above image, the password is clearly visible to everyone. So, this option is not recommended to use, because the password will be visible to all users.

12. Change User Shell

The user login shell can be changed or defined during user creation with useradd command or changed with ‘usermod‘ command using option ‘-s‘ (shell). For example, the user ‘babin‘ has the /bin/bash shell by default, now I want to change it to /bin/sh.

After changing user shell, verify the user shell using the following command.

Change User Login Shell

13. Change User ID (UID)

In the example below, you can see that my user account ‘babin‘ holds the UID of 502, now I want to change it to 888 as my UID. We can assign UID between to 999.

Now, let’s change the UID for user babin using ‘-u‘ (uid) option and verify the changes.

Change User UID

14. Modifying User Account with Multiple Options

Here we have a user jack and now I want to modify his home directory, shell, expiry date, label, UID and group at once using one single command with all options as we discussed above.

The user Jack has the default home directory /home/jack, Now I want to change it to /var/www/html and assign his shell as bash, set expiry date as December 10th 2014, add new label as This is jack, change UID to 555 and he will be member of apple group.

Let we see how to modify the jack account using multiple option now.

Then check for the UID & home directory changes.

Account expire check.

Check for the group which all jack have been member.

Using Multiple Options with usermod

15. Change UID and GID of a User

We can change UID and GID of a current user. For changing to a New GID we need an existing group. Here already there is an account named as orange with GID of 777.

Now my jack user account want to be assigned with UID of 666 and GID of Orange (777).

Check for the current UID and GID before modifying.

Modify the UID and GID.

Check for the changes.

Change User UID and GID

Conclusion

Here we have seen how to use usermod command with its options in very detailed fashion, Before knowing about usermod command, one should must know ‘useradd’ command and its options to use the usermod. If I’ve missed any point in the article do let me know via comments and don’t forget to add your valuable comments.

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

We are thankful for your never ending support.

Источник

Поделиться с друзьями
КомпСовет
Adblock
detector