Как поменять uid пользователя linux

Команда Usermod в Linux

usermod — это утилита командной строки, которая позволяет изменять данные для входа пользователя.

В этой статье рассказывается, как использовать команду usermod для добавления пользователя в группу, изменения оболочки пользователя, имени входа, домашнего каталога и т. Д.

Команда usermod

Синтаксис команды usermod имеет следующий вид:

Только root или пользователи с доступом sudo могут вызывать usermod и изменять учетную запись пользователя. В случае успеха команда не выводит никаких результатов.

Добавить пользователя в группу

Наиболее типичный вариант использования usermod — добавление пользователя в группу.

Чтобы добавить существующего пользователя во вторичную группу, используйте параметры -a -G после имени группы и имени пользователя:

Если вы хотите добавить пользователя к нескольким группам одновременно, указать группы после того , как -G опция разделяться , (запятыми) без промежуточных пробелов.

Например, чтобы добавить пользователя linuxize в группу games , вы должны выполнить следующую команду:

Всегда используйте параметр -a (добавить) при добавлении пользователя в новую группу. Если вы опустите опцию -a , пользователь будет удален из групп, не перечисленных после опции -G .

Если пользователя или группы не существует, команда предупредит вас.

Изменить основную группу пользователя

Чтобы изменить основную группу пользователя, вызовите команду usermod с параметром -g следующим за именем группы и именем пользователя:

В следующем примере мы меняем основную группу пользователя linuxize на developers :

Каждый пользователь может принадлежать ровно к одной основной группе и нулю или более вторичных групп.

Изменение информации о пользователе

Чтобы изменить информацию GECOS (полное имя пользователя), запустите команду с параметром -c за которым следует новый комментарий и имя пользователя:

Вот пример, показывающий, как добавить дополнительную информацию пользователю linuxize:

Эта информация хранится в /etc/passwd .

Изменение домашнего каталога пользователя

В большинстве систем Linux домашние каталоги пользователей названы по имени пользователя и создаются в каталоге /home .

Если по какой-то причине вы хотите изменить домашний каталог пользователя, вызовите команду usermod с параметром -d usermod абсолютный путь к новому домашнему каталогу и имя пользователя:

По умолчанию команда не перемещает содержимое домашнего каталога пользователя в новый. Чтобы переместить содержимое, используйте параметр -m . Если новый каталог еще не существует, он создается:

Вот пример, показывающий, как изменить домашний каталог пользовательских www-data на /var/www :

Изменение пользовательской оболочки по умолчанию

Оболочка по умолчанию — это оболочка, которая запускается после входа в систему. По умолчанию в большинстве систем Linux в качестве оболочки по умолчанию используется Bash Shell.

Чтобы изменить оболочку пользователя по умолчанию, запустите команду с параметром -s указав абсолютный путь оболочки и имя пользователя:

В приведенном ниже примере мы меняем оболочку пользователя на Zsh:

Вы можете узнать, какие оболочки доступны в вашей системе, просмотрев содержимое файла /etc/shells .

Изменение UID пользователя

UID (идентификатор пользователя) — это номер, присвоенный каждому пользователю. Он используется операционной системой для обозначения пользователя.

Чтобы изменить UID пользователя, вызовите команду с параметром -u следующим за новым UID и именем пользователя:

В приведенном ниже примере показано, как изменить номер «UID» на «1050»:

UID файлов, принадлежащих пользователю и находящихся в домашнем каталоге пользователя, и файл почтового ящика пользователя будет изменен автоматически. Право собственности на все остальные файлы необходимо изменить вручную.

Читайте также:  What is windows 10 home single language

Изменение имени пользователя

Хотя не очень часто, иногда вам может потребоваться изменить имя существующего пользователя. Параметр -l используется для изменения имени пользователя:

В приведенном ниже примере мы переименовываем пользователя linuxize в lisa в «1050»:

При изменении имени пользователя вы также можете изменить домашний каталог пользователя, чтобы отразить новое имя пользователя.

Установка даты истечения срока действия пользователя

Дата истечения срока — это дата, когда учетная запись пользователя будет отключена. Чтобы установить дату истечения срока действия пользователя, используйте параметр -e :

Срок годности должен быть установлен в формате YYYY-MM-DD .

Например, чтобы отключить пользователя linuxize 21 2022-02-21 , вы должны выполнить следующую команду:

Чтобы отключить истечение срока действия учетной записи, установите пустую дату истечения срока действия:

Используйте команду chage -l для просмотра даты истечения срока действия пользователя:

Дата истечения срока хранения хранится в /etc/shadow .

Блокировка и разблокировка учетной записи пользователя

Параметр -L позволяет заблокировать учетную запись пользователя:

Команды вставят восклицательный знак ( ! ) Перед зашифрованным паролем. Если поле пароля в /etc/shadow содержит восклицательный знак, пользователь не сможет войти в систему, используя аутентификацию по паролю. Другие методы входа в систему, такие как аутентификация на основе ключей или переключение на пользователя , по-прежнему разрешены. Если вы хотите заблокировать учетную запись и отключить все методы входа в систему, вам также необходимо установить дату истечения срока действия равной 1.

В следующих примерах показано, как заблокировать пользователя linuxize :

Чтобы разблокировать пользователя, запустите usermod с параметром -U :

Выводы

Мы показали вам, как использовать команду usermod для установки информации об учетной записи пользователя.

Не стесняйтесь оставлять комментарии, если у вас есть вопросы.

Источник

Все, что вам нужно знать о UID в Linux

Главное меню » Операционная система Linux » Все, что вам нужно знать о UID в Linux

Что такое UID в Linux?

UID обозначает идентификатор пользователя. UID – это номер, назначенный каждому пользователю Linux. Это представление пользователя в ядре Linux.

UID используется для идентификации пользователя в системе и для определения того, к каким системным ресурсам пользователь может получить доступ. Вот почему идентификатор пользователя должен быть уникальным.

Вы можете найти UID в файле /etc/passwd. Это тот же файл, который можно использовать для составления списка всех пользователей в системе Linux.

Используйте команду Linux для просмотра текстового файла, и вы увидите различную информацию о пользователях, присутствующих в вашей системе.

Третье поле здесь представляет идентификатор пользователя или UID.

Обратите внимание, что в большинстве дистрибутивов Linux UID 1-500 обычно зарезервирован для системных пользователей. В Ubuntu и Fedora UID для новых пользователей начинаются с 1000.

Например, если вы используете команду useradd или adduser для создания нового пользователя, он получит следующий доступный номер после 1000 в качестве своего UID.

Как найти UID пользователя в Linux?

Вы всегда можете положиться на файл /etc/passwd, чтобы получить UID пользователя. Это не единственный способ получить информацию UID в Linux.

Команда id в Linux отобразит UID, GID и группы, к которым принадлежит ваш текущий пользователь:

Вы также можете указать имена пользователей с помощью команды id, чтобы получить UID любого пользователя Linux:

Как изменить UID пользователя в Linux?

Предположим, у вас было несколько пользователей в вашей системе Linux. Вы должны были удалить пользователя, потому что он/она покинул организацию. Теперь вы хотите, чтобы его UID был занят другим пользователем, уже находящимся в системе.

Вы можете изменить UID, изменив пользователя с помощью команды usermod следующим образом:

Читайте также:  Jvm для mac os

Вы должны иметь привилегию суперпользователя для выполнения вышеуказанной команды.

Вы помните концепцию прав доступа и владения файлами в Linux? Право собственности на файл определяется UID пользователя-владельца.

Когда вы обновляете UID пользователя, что происходит с файлами, принадлежащими этому пользователю? В то время как все файлы в домашнем каталоге user_2 изменят свой связанный UID, вам придется вручную обновить связанный UID других файлов вне домашний каталог.

Что вы можете сделать, это вручную обновить владельца файлов, связанных со старым UID пользователя_2.

Вот и все. Мы надеемся, что теперь у вас есть лучшее представление об UID в Linux. Не стесняйтесь задавать свои вопросы, если таковые имеются.

Как профессиональный пользователь Linux, если вы думаете, что мы пропустили какое-то важное понятие об UID, пожалуйста, дайте мне знать в разделе комментариев.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Изменение 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 что ему нужно отделять файлы друг от друга не по переводу строки, а по этому самому нулю, что гарантирует верную обработку даже самых хитрых имён файлов 🙂

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

Читайте также:  Start browser in linux

Можно выполнить подряд две команды 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 «

Источник

Оцените статью