useradd user с группой с таким же UID и GID.

Вопрос или проблема

Я хочу добавить пользователя с именем “nexus” с uid 1234567 (пример числа) и gid 1234567.

Я выполняю следующую команду:

sudo useradd -r -U -u 1234567 -g 1234567 -m -c "nexus role account" -d /sonatype-work -s /bin/false nexus

Но я получаю ошибку:

useradd: group '1234567' does not exist

И если я сделаю:

sudo useradd -r -U -u 1234567 -m -c "nexus role account" -d /sonatype-work -s /bin/false nexus

Тогда, когда я проверяю id -u nexus, он показывает правильный uid (1234567), но когда я проверяю id -g nexus, gid установлен на 999.

Если я выполню sudo adduser --uid 1234567 nexus, тогда идентификаторы пользователя и группы установлены одинаково.

Могу ли я сделать то же самое с useradd или мне нужно использовать adduser для достижения моей цели?

Кстати, я следовал этому учебнику:

http://www.tecmint.com/add-users-in-linux/

P.S.: Если мне нужно использовать adduser, можно ли сделать это без участия человека, то есть автоматизировать создание пользователя через скрипт?

РЕДАКТИРОВАТЬ:

Вот результат выполнения sudo adduser --uid 1234567 nexus

Adding user `nexus' ...
Adding new group `nexus' (1234567) ...
Adding new user `nexus' (1234567) with group `nexus' ...
The home directory `/home/nexus' already exists.  Not copying from `/etc/skel'.
adduser: Warning: The home directory `/home/nexus' does not belong to the user you are currently creating.
Enter new UNIX password: 
Retype new UNIX password: 
No password supplied
Enter new UNIX password: 
Retype new UNIX password: 
No password supplied
Enter new UNIX password: 
Retype new UNIX password: 
No password supplied
passwd: Authentication token manipulation error
passwd: password unchanged
Try again? [y/N] n
Changing the user information for nexus
Enter the new value, or press ENTER for the default
    Full Name []: Nexus
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
Is the information correct? [Y/n] y

Благодаря Тому Яну, я в конце концов решил свою проблему, создав группу с тем же именем, а затем добавив пользователя в эту группу. Так что я сделал следующее:

sudo groupadd -r -g 1234567 nexus \
  && sudo useradd -r -u 1234567 -g 1234567 -m -c "nexus role account" -d /sonatype-work -s /bin/false nexus

Честно говоря,
Я думаю, что это ошибка(функция). Документация указывает, что вы можете использовать опцию ‘-U’, чтобы одновременно создать пользователя и группу. Интуитивно было бы думать, что в таком случае она возьмет значение из флага ‘-g’ и создаст группу соответственно.

[root@centos4]# useradd -U -u 200 -g 200 -m -d /home/ansible -s /usr/bin/bash ansible
useradd: group '200' does not exist

Пример выше подобен вашей команде useradd. Однако, если я просто удаляю аргумент ‘-g 200’, он работает сразу. Хотя, к сожалению, похоже, что gid назначается стандартным методом.

[root@centos4]# useradd -U -u 200 -m -d /home/ansible -s /usr/bin/bash ansible
[root@centos4]# egrep ansible /etc/passwd
ansible:x:200:1000::/home/ansible:/usr/bin/bash
[root@centos4]# egrep ansible /etc/group
ansible:x:1000:

Ответ на ваш вопрос заключается в том, что если вы хотите добавить пользователя и группу одновременно, вы должны убрать опцию -g. Это не так элегантно, как мы оба надеялись, но это лучше, чем ничего.

Надеюсь, это поможет.
Берегите себя.

Для других, кто наткнулся на это, и в дополнение к ответу Питера Роудса о том, что это функция (а не ошибка), это происходит потому, что ОП запросил системную учетную запись (-r) и указал UID, который >= 1000. Если вы запрашиваете не системную учетную запись или если вы используете ожидаемый системный UID (< 1000), это не кажется проблемой в Ubuntu, включая 14.04 в Docker:

p0a.142612 ~ $ docker run --rm -it ubuntu:14.04
root@efc7e806c60a:/# useradd -r -U -u 987 -m systemuser
root@efc7e806c60a:/# id -g systemuser
987
root@efc7e806c60a:/# useradd -U -u 1234 -m user
root@efc7e806c60a:/# id -g user
1234
root@efc7e806c60a:/# ### Воспроизведение проблемы ОП
root@efc7e806c60a:/# useradd -r -U -u 1234567 -m -c "nexus role account" -d /sonatype-work -s /bin/false nexus
root@8cc2cffa5d0d:/# id -g nexus
999

Ответ или решение

Создание пользователя с идентификатором пользователя (UID) и идентификатором группы (GID), совпадающими между собой, в Linux может стать небольшой проблемой, если этим процессом управлять неправильно. В данной ситуации у нас есть цель создать пользователя с именем "nexus", где UID и GID равны 1234567. Давайте подробно рассмотрим методы и правила, которые помогут вам успешно решить эту задачу.

Теория

Команды useradd и adduser в Linux служат для добавления новых пользователей в систему, но их поведение и внутренние реализации могут отличаться. useradd — это более низкоуровневая команда, которая обычно не взаимодействует с пользователем через интерактивные подсказки. Она ожидает, что все параметры будут указаны явно. В то время как adduser является более высокоуровневой утилитой и зачастую более дружественной к пользователю, предоставляя интуитивно понятные и автоматизированные шаги для добавления пользователей и групп.

Особенности

  • UID и GID: Как правило, когда создается пользователь, создается также одноименная группа без явного задания GID, которое по умолчанию совпадает с UID. Однако, если указать параметр -g, useradd ожидает, что такая группа уже существует в системе.

  • Системные и обычные аккаунты: Параметр -r в команде useradd создаёт системного пользователя. Если UID указан как число большее или равное 1000, что характерно для обычных пользователей, то это может вести к конфликтам при попытке создать системный аккаунт.

Примеры

При вашем сценарии:

  1. Команда sudo useradd -r -U -u 1234567 -g 1234567 -m -c "nexus role account" -d /sonatype-work -s /bin/false nexus вызывала ошибку, так как группа с GID 1234567 не существовала.

  2. Вторая команда, где был убран параметр -g, привела к созданию пользователя, но с назначением стандартного GID, а не совпадающего с UID.

На практике команда adduser выглядела следующей, и она успешно создала пользователя с одинаковым UID и GID:

sudo adduser --uid 1234567 nexus

Применение

Для успешного создания пользователя с идентичным UID и GID можно пойти двумя путями:

  1. Создание группы заранее:

    • Сначала создать группу с нужным GID, а затем создать пользователя и назначить его в эту группу.
    sudo groupadd -r -g 1234567 nexus
    sudo useradd -r -u 1234567 -g 1234567 -m -c "nexus role account" -d /sonatype-work -s /bin/false nexus
  2. Использование adduser без интерактива:

    • adduser можно настроить так, чтобы он не запрашивал эти данные, например, используя скрипты или конфигурации по умолчанию для debconf в системах, основанных на Debian.

Параметр -U в useradd автоматически создаёт группу, но GID этой группы будет назначен системой, если не указано иное, как это показано в примере с удалением параметра -g.

Заключение

Конечно, в командной строке могут возникать непредвиденные ситуации, особенно когда используется комбинация параметров, которые не предполагают привычного поведения системы, как в случае с созданием системного аккаунта с высоким UID. Для управляемости и предотвращения подобных ошибок всегда рекомендуется проверять существование необходимых групп перед созданием, а также учитывать внутренние особенности и ограничения команд useradd и adduser. Эти нюансы являются важной частью работы системного администратора и помогают избежать нежелательных ошибок и недоразумений.

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

Оцените материал
Добавить комментарий

Капча загружается...