Перейти к содержимому

Как изменить группу пользователя в linux

  • автор:

Как управлять группами в Linux

Группы являются важной частью реализации дискреционного контроля доступа (DAC) в Linux и в целом в любой операционной системе на базе Unix. Создание, изменение и удаление групп — относительно простые операции, которые можно выполнить с помощью некоторых утилит, установленных по умолчанию.

В этом уроке мы узнаем, как создавать, изменять и удалять группы в Linux с помощью утилит groupadd, groupmod и groupdel.

В этом уроке вы узнаете:

  • Как создать группу в Linux с помощью groupadd
  • Как проверить, какие пользователи являются членами группы
  • Как изменить группу с помощью groupmod
  • Как удалить группу с помощью groupdel

Первичные и дополнительные группы

Прежде чем мы увидим, как создавать, изменять и удалять группы в Linux, нам следует уточнить разницу между основными и дополнительными/дополнительными группами и почему она существует. В настоящее время практически все дистрибутивы Linux придерживаются политики UPG (User Private Group): каждый раз, когда пользователь добавляется в систему, он становится членом группы, названной в его честь, которая создается автоматически: это основная группа пользователя. Все файлы, созданные пользователем, принадлежат ему и его основной группе.

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

Как мы уже говорили, основная группа пользователя создается автоматически при добавлении пользователя в систему. Дополнительные группы можно легко создавать, изменять и удалять с помощью утилит «groupadd», «groupmod» и «groupdel». Давайте посмотрим, как это сделать.

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

Чтобы создать группу в Linux, мы используем утилиту groupadd . Синтаксис команды очень прост: в самом простом случае мы просто передаем в качестве аргумента имя группы, которую хотим создать. Предположим, например, что мы хотим создать новую группу под названием «linuxconfig». Мы бы запустили:

$ sudo groupadd linuxconfig

Запись о вновь созданной группе добавляется в файл /etc/group :

linuxconfig:x:1001: 

Каждая запись в /etc/group имеет 4 поля: первое содержит имя группы, второе – пароль группы (в большинстве случаев для групп пароли не используются, поэтому это поле пусто); третье поле содержит GID (в данном случае идентификатор группы — 1001), а четвертое содержит список членов группы, разделенный запятыми (если группа является основная группа пользователя, указанный пользователь не указан в этом поле).

Назначение идентификатора группы вручную (GID)

GID автоматически присваивается группе при ее создании. Политика по умолчанию — назначить группе наименьший доступный GID. Диапазон GID, которые можно назначить несистемным группам, определен в файле /etc/login.defs с помощью GID_MIN и GID_MAX . > переменные. Значение первого обычно составляет 1000, а второго обычно устанавливается равным 60000:

$ grep -E "^GID_(MIN|MAX)" /etc/login.defs GID_MIN 1000 GID_MAX 60000 

Если мы хотим предоставить конкретный GID при создании группы, мы можем вызвать «groupadd» с опцией -g ( —gid ), передав нужный нам числовой идентификатор. использовать в качестве аргумента. В приведенном ниже примере мы создаем новую группу под названием «tux» и вручную назначаем ей 1002 в качестве GID:

$ sudo groupadd -g 1002 tux

Создание системной группы

В системах на базе Unix, а, следовательно, и в Linux, мы различаем системные и несистемные группы, так же, как и для пользователей. Системные группы по своей сути не отличаются от обычных групп: разница в том, что им назначаются GID из другого диапазона, и они в основном используются для системных служб. Чтобы создать системную группу, мы используем «groupadd» с опцией -r (сокращение от —system ):

$ sudo groupadd -r tux

Диапазон GID, автоматически назначаемых системным группам, определяется с помощью переменных SYS_GID_MIN и SYS_GID_MAX :

$ grep -E "^SYS_GID_(MIN|MAX)" /etc/login.defs SYS_GID_MIN 201 SYS_GID_MAX 999 

Заполнение группы при создании

Когда мы создаем группу, мы можем указать, какие пользователи должны входить в нее. Все, что нам нужно сделать, это использовать опцию -U ( —users ) и передать в качестве аргумента список имен пользователей, разделенных запятыми; для успешного выполнения команды должны существовать указанные пользователи. В качестве примера, чтобы создать группу «tux» и добавить в нее пользователей «foo» и «bar», мы запустим:

$ sudo groupadd -U foo,bar tux

Изменение группы

Чтобы изменить определение группы, мы используем утилиту groupmod , и мы используем ее аналогично groupadd. Давайте посмотрим несколько примеров.

Изменение GID группы

Чтобы изменить GID группы, мы вызываем утилиту groupmod с опцией -g , передавая новый GID, который мы хотим использовать. в качестве его аргумента. Например, чтобы изменить GID группы «tux» на 1006, мы должны запустить:

$ sudo groupmod -g 1006 tux

Когда мы меняем GID группы, которая используется в качестве основной группы для пользователя, это определение пользователя обновляется соответствующим образом. Предположим, например, что мы создали пользователя с именем «tim», основная группа которого — «tim»; как пользователю «tim», так и группе «tim» присвоен идентификатор 1002:

$ grep tim /etc/group tim:x:1002: $ grep tim /etc/passwd tim:x:1002:1002::/home/tim:/bin/bash 

Если мы изменим GID группы «tim», скажем, на 1003, определение пользователя автоматически обновится:

# We change the GID of the "tim" group to 1003 $ sudo groupmod -g 1003 tim # Verify the user entry has been updated $ grep tim /etc/passwd tim:x:1002:1003::/home/tim:/bin/bash 

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

Изменение названия группы

Чтобы изменить имя группы, процедура аналогична: мы просто используем опцию -n , которая принимает новое имя группы в качестве аргумента. Предположим, мы хотим переименовать группу «tux» в «bar», мы запустим:

$ sudo groupmod -n bar tux

Изменение участников группы

Чтобы переопределить членов группы, мы используем опцию -U так же, как мы это делали при использовании утилиты groupadd. Обратите внимание, что при использовании этой опции существующие участники будут удалены из группы, если они явно не указаны в списке.

Удаление группы

Если мы хотим удалить группу, нам нужно использовать утилиту groupdel . Чтобы удалить группу, мы просто передаем ее имя в качестве аргумента:

$ sudo groupdel tux

Если группа, которую мы пытаемся удалить, является основной группой пользователя, команда завершится неудачно. В следующем примере мы пытаемся удалить группу «tim», которая является основной группой пользователя «tim»:

$ sudo groupdel tim groupdel: cannot remove the primary group of user 'tim' 

Я не вижу разумного случая, в котором было бы полезно удалить основную группу пользователя: когда пользователь удаляется, его основная группа удаляется вместе с ним, если только у него нет других участников (а этого действительно не должно быть). Однако если по какой-то причине мы все же хотим удалить основную группу, команду можно принудительно выполнить с помощью опции -f ( —force ):

$ sudo groupdel -f tim

После выполнения такой операции пользователь по-прежнему будет связан с GID удаленной первичной группы. Чтобы удалить эту ассоциацию, нам нужно назначить пользователю новую первичную группу. Мы можем сделать это, запустив:

$ sudo usermod -g tim

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

Выводы

В этом уроке мы узнали разницу между основной и дополнительной группами в Linux. Мы увидели, как добавить группу и как составить список ее членов, как изменить ее и как удалить с помощью утилит groupadd, groupmod и groupdel соответственно. Группой также можно управлять «вручную», путем изменения файла /etc/group с помощью утилиты «vigr»: мы обсуждали это в предыдущем руководстве.

Все права защищены. © Linux-Console.net • 2019-2024

Группы пользователей в Linux: создаем группы, добавляем и удаляем из них пользователей

Перевод статьи «Linux User Groups Explained: How to add a new group, a new group member, and change groups».

Стая фламинго

Linux позволяет многочисленным пользователям работать в системе одновременно. Установка прав доступа защищает пользователей друг от друга. Для объединения пользователей с одинаковыми правами доступа создаются группы. Члены этих групп могут, например, иметь доступ к каким-то файлам или устройствам, в то время как для остальных пользователей доступ будет закрыт.

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

Группы бывают двух основных видов: первичные и вторичные. Первичная группа это основная группа пользователя, установленная для него по умолчанию, с ней связан его аккаунт. Директории и файлы, создаваемые пользователем, имеют Group ID именно этой, первичной группы. Любая другая группа (а их может быть много), в которую входит пользователь, является вторичной.

Создание групп

Давайте создадим две группы: «writers» («писатели») и «editors» («редакторы»). Для этого используется команда groupadd. (Возможно, потребуется также поставить sudo в начале команды, чтобы получить право создавать группы).

groupadd writers groupadd editors

Создание пользователей

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

useradd [опции] имя_пользователя

Ниже представлена команда для создания пользователя по имени «quincy». Флаг -m нужен для создания домашней директории пользователя (для ее названия используется имя пользователя). Флаг -p позволяет задать пароль для пользователя, в данном случае — «p4ssw0rd».

useradd -m quincy -p p4ssw0rd

Позже пользователь сможет изменить свой пароль при помощи команды passwd. Для этого ему понадобится ввести текущий пароль и новый.

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

Для добавления пользователя в группу используется команда usermod. Давайте добавим пользователя «quincy» в группу «writers». Опция -a означает «append» («добавить», «прикрепить»), а опция -G служит для указания названия вторичной группы.

usermod -a -G writers quincy

Когда вы создаете пользователя при помощи команды adduser, для него автоматически создается первичная группа, носящая его имя. Поэтому в настоящее время пользователь «quincy» состоит в первичной группе «quincy» и вторичной «writers».

Также можно добавить пользователя сразу в несколько групп, перечислив их через запятую без пробелов (-G group1,group2,group3).

А эта команда изменит первичную группу пользователя quincy на группу «editors»:

usermod -g editors quincy

Группа пингвинов

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

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

При помощи команды id смотрим, в каких группах состоит пользователь (опция -n нужна для вывода названий групп, а не их ID).

id -nG quincy

Предположим, мы увидели, что пользователь quincy состоит в группах «editors» и «writers». Если мы хотим удалить его из группы «writers», мы можем воспользоваться следующей командой:

usermod -G editors quincy

Эта команда очень похожа на ту, которой мы установили для пользователя quincy вторичную группу «editors». Но поскольку мы сейчас не использовали флаг -a, предыдущий список групп просто перезаписался, и теперь в нем нет группы «writers».

Заключение

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

Sysadminium

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

Оглавление скрыть

Номера пользователей в системе

Для того чтобы понять под каким пользователем вы сейчас работаете выполните команду id:

alex@deb:~$ id uid=1000(alex) gid=1000(alex) группы=1000(alex),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev) alex@ubu:~$ id uid=1000(alex) gid=1000(alex) groups=1000(alex),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lxd)

В выводе мы видим что пользователь alex:

  • имеет user id (uid) = 1000;
  • входит в группу alex, которая имеет group id (gid) = 1000;
  • также он входит в другие группы, причем список групп для ubuntu и для debian отличается;
  • и у каждой группы есть номер (gid).

Для системы номер пользователя или группы важнее чем его имя!

  • uid — user id, номер пользователя;
  • gid — group id, номер группы.

Если команде id передать в качестве параметра имя пользователя, то мы увидим информацию по этому пользователю. Если не указывать имя пользователя то увидим информацию по текущему пользователю.

Например, uid для суперпользователя root всегда = 0:

alex@ubu:~$ id root uid=0(root) gid=0(root) groups=0(root)

Когда система проверяет, разрешено ли какое-либо действие для данного пользователя, то система смотрит именно на uid и на gid пользователя а не на его имя.

Смена текущего пользователя

Текущий пользователь этот тот пользователь под которым вы работаете.

Создавать пользователей в системе может только суперпользователь root. Он может делать с системой все что пожелает. Подобный пользователь (root) есть в любом дистрибутиве GNU/Linux.

Для того чтобы переключиться на работу под другим пользователем нужно воспользоваться командой su. В качестве аргумента команде su нужно передать имя пользователя на которого мы хотим переключиться. Помимо имени пользователя можно использовать ключ «-» — без него некоторые переменные среды останутся от предыдущего пользователя. Поэтому правильное переключение на пользователя root будет следующим:

alex@deb:~$ su - root Пароль: root@deb:~#

Но в Ubuntu, по умолчанию, нельзя переключиться на пользователя root. Мы даже при установке системы не задавали пароль для этого пользователя. В Ubuntu по умолчанию настроена утилита sudo, которая позволяет выполнять команды от имени суперпользователя. И эта утилита позволит нам переключиться на пользователя root не вводя его пароль:

alex@ubu:~$ sudo su - root [sudo] password for alex: root@ubu:~#

Вместо пароля от пользователя root, нужно ввести пароль от alex.

Но sudo работает не для всех пользователей, а только для тех кто входит в группу sudo, а alex в неё входит.

Кстати, утилиту sudo можно установить и в Debian, и пользоваться точно также как это делается в Ubuntu.

Чтобы выйти используется команда exit:

root@deb:~# exit выход alex@deb:~$ root@ubu:~# exit logout alex@ubu:~$

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

Если не передать команде su имя пользователя то мы переключимся на пользователя root, поэтому часто используется такая команда для переключения на суперпользователя:

alex@deb:~$ su - Пароль: root@deb:~# alex@ubu:~$ sudo su - root@ubu:~#

Создание и удаление пользователей

Для того, чтобы создать нового пользователя в системе можно воспользоваться двумя утилитами:

  • useradd — не интерактивная утилита;
  • adduser — интерактивная утилита;

Любой из этих команд нужно передать имя пользователя, но useradd не создаст пользователю домашний каталог и не придумает пароль если не использовать дополнительные опции команды. Зато создаст одноименную группу пользователя и включит этого пользователя в неё. Создавать пользователей в системе может только root:

root@deb:~# useradd testuser root@deb:~# su - testuser su: warning: cannot change directory to /home/testuser: Нет такого файла или каталога $ id uid=1001(testuser) gid=1001(testuser) группы=1001(testuser) $ pwd /root $ exit root@deb:~#

У этой утилиты есть некоторые опции:

  • -m — создать домашний каталог пользователю;
  • -p— здесь нужно ввести хешированный пароль, что не всегда удобно, поэтому не стоит использовать эту опцию;
  • -s— указать командную оболочку используемую по умолчанию для пользователя (сейчас мы работает в оболочке bash, путь к ней — /bin/bash);

Давайте теперь удалим пользователя testuser и создадим его по новой с изученными опциями. Удаляется пользователь командой deluser.

root@deb:~# userdel testuser root@deb:~# useradd -m -s /bin/bash testuser root@deb:~# su - testuser testuser@deb:~$ pwd /home/testuser testuser@deb:~$ id uid=1001(testuser) gid=1001(testuser) группы=1001(testuser) testuser@deb:~$ exit выход root@deb:~#

При удалении пользователя командой userdel, с помощью дополнительных опций можно:

  • -f — завершить все процессы пользователя и удалить насильно, даже если пользователь сейчас работает в системе;
  • -r — удалить домашний каталог пользователя;

Теперь давайте удалим пользователя testuser и попробуем создать его интерактивной утилитой adduser:

root@deb:~# userdel -f -r testuser userdel: почтовый ящик testuser (/var/mail/testuser) не найден root@deb:~# adduser testuser Добавляется пользователь «testuser» . Добавляется новая группа «testuser» (1001) . Добавляется новый пользователь «testuser» (1001) в группу «testuser» . Создаётся домашний каталог «/home/testuser» . Копирование файлов из «/etc/skel» . Новый пароль: Повторите ввод нового пароля: passwd: пароль успешно обновлён Изменение информации о пользователе testuser Введите новое значение или нажмите ENTER для выбора значения по умолчанию Полное имя []: Номер комнаты []: Рабочий телефон []: Домашний телефон []: Другое []: Данная информация корректна? [Y/n] y root@deb:~# su - testuser testuser@deb:~$ pwd /home/testuser testuser@deb:~$ id uid=1001(testuser) gid=1001(testuser) группы=1001(testuser) testuser@deb:~$ exit выход root@deb:~#

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

Эта утилита тоже имеет опции, благодаря которым можно:

  • —no-create-home — не создавать домашний каталог пользователю;
  • —shell — задать оболочку для пользователя, по умолчанию задается оболочка bash;

Зачем же созданы две утилиты для создания пользователей? Я бы рекомендовал использовать adduser при ручном создании пользователя и useradd при создании пользователя из скрипта, так как useradd в процессе работы не задает вопросы, а создает пользователя используя опции.

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

Они различаются только опциями.

userdel:

  • -r — удалить домашний каталог пользователя;
  • -f — завершить все процессы пользователя и удалить насильно, даже если пользователь сейчас работает в системе;

deluser:

  • —remove-home — удалить домашний каталог пользователя;
  • —force — завершить все процессы пользователя и удалить насильно, даже если пользователь сейчас работает в системе;

Мне опции первой команды запомнить легче, да и запись получается короче, поэтому я использую userdel.

Изменение паролей

Пароль меняется утилитой passwd. Суперпользователь может сменить пароль любому пользователю указав имя пользователя, а любой другой пользователь может изменить пароль себе не указывая имя пользователя утилите passwd:

root@deb:~# passwd alex Новый пароль: Повторите ввод нового пароля: passwd: пароль успешно обновлён root@deb:~# exit выход alex@deb:~$ passwd Смена пароля для alex. Текущий пароль: Новый пароль: Повторите ввод нового пароля: passwd: пароль успешно обновлён alex@deb:~$ su - Пароль: root@deb:~#

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

Создание групп

Теперь рассмотрим процесс создания групп пользователей. Для этого используются также две утилиты:

  • groupadd — не выводит ничего при создании группы;
  • addgroup — выводит создаваемый gid при создании группы.
root@deb:~# groupadd testgroup root@deb:~# addgroup testgroup2 Добавляется группа «testgroup2» (GID 1003) . Готово. root@deb:~#

Дополнительными опциями можно задать gid для создаваемой группы:

root@deb:~# groupadd --gid 5555 testgroup3 root@deb:~# addgroup --gid 5556 testgroup4 Добавляется группа «testgroup4» (GID 5556) . Готово. root@deb:~#

Тут я бы рекомендовал использовать addgroup при ручном создании группы, так как есть вывод и вы можете прочитать что пользователь создался и создался с таким-то gid. А groupadd при использовании в скрипте, так как нет лишнего вывода на терминал.

Тоже самое подходит и для удаления группы командами groupdel и delgroup:

root@deb:~# groupdel testgroup3 root@deb:~# delgroup testgroup4 Удаляется группа «testgroup4» . Готово. root@deb:~# exit выход alex@deb:~$

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

Продолжим изучение темы «Группы и пользователи в Linux». Теперь рассмотрим процесс добавление в группу пользователей. Но для начала разберемся с первичными и дополнительными группами. Как я показывал раньше, при создании пользователя обычно создается одноименная группа это первичная группа пользователя. Первичная группа используется, например, при создании файла.

Например, если пользователь Linux «Вася» имеет первичную группу «Вася» и какие-то дополнительные группы, и он создал файл, то к файлу будут иметь доступ все пользователи которые входят в группу «Вася». Но одна из дополнительных групп у «Васи» — это группа «Разработчики», и у группы «Разработчики» не будет доступа к файлу, так как файл взял права от первичной группы «Вася», а не от дополнительной «Разработчики» . Это просто пример поведения Linux, с системой прав разберемся позже.

Группы и пользователи в Linux

В одном из примеров выше я показывал вывод команды id для пользователя alex:

alex@deb:~$ id uid=1000(alex) gid=1000(alex) группы=1000(alex),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev)

Тут первичная группа alex, а дополнительные все остальные.

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

  • -a — добавляет к текущим группам пользователя дополнительные. Без этой опции группы заменяются на новые, а с этой опцией к старым группам добавляются новые;
  • -G — указывает, что работать будем с дополнительными группами а не с первичной.
alex@deb:~$ su - Пароль: root@deb:~# usermod -aG testgroup alex root@deb:~# id alex uid=1000(alex) gid=1000(alex) группы=1000(alex),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),1002(testgroup) root@deb:~#

Как видим alex добавился в группу testgroup.

Утилитой usermod нельзя удалять дополнительные группы, можно только не используя опцию -a, написать список групп в которые должен будет входить данный пользователь, не указав ту группу, из которой вы хотите удалить пользователя. Например мы хотим удалить alex из testgroup:

root@ubu:~# usermod -G adm,cdrom,sudo,dip,plugdev,lxd alex root@ubu:~# id alex uid=1000(alex) gid=1000(alex) groups=1000(alex),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lxd) root@deb:~# usermod -G cdrom,floppy,audio,dip,video,plugdev,netdev alex root@deb:~# id alex uid=1000(alex) gid=1000(alex) группы=1000(alex),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev)

Если мы хотим поменять пользователю первичную группу, то нужно использовать опцию -g:

root@deb:~# usermod -g testgroup alex root@deb:~# id alex uid=1000(alex) gid=1002(testgroup) группы=1002(testgroup),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev)

И вернем все как было:

root@deb:~# usermod -g alex alex

Еще один способ добавить пользователя в дополнительную группу (и наверное более запоминающийся) это использовать утилиту adduser, при этом утилите вначале передается имя пользователя, затем группы:

root@deb:~# adduser alex testgroup Добавляется пользователь «alex» в группу «testgroup» . Добавление пользователя alex в группу testgroup Готово.

Удалить пользователя из группы можно командой deluser:

root@deb:~# deluser alex testgroup Удаляется пользователь «alex» из группы «testgroup» . Готово.

И так, для добавления или удаления пользователя в дополнительную группу я бы рекомендовал использовать команды adduser и deluser. А для изменения первичной группы команду usermod -g.

Конфигурационные файлы

Теперь обсудим файлы которые хранят информацию о пользователях:

В passwd хранится информация о пользователях в системе, вот информация о пользователе alex:

root@deb:~# grep alex /etc/passwd alex:x:1000:1000:Alexandr. /home/alex:/bin/bash
пользователь | uid | | gid | | | группа | | | | дом.каталог | | | | | оболочка | | | | | | alex:x:1000:1000:alex. /home/alex:/bin/bash

То что после имени идет буква «x» означает что пароль зашифрован в файле shadow.

В /etc/group хранится информация о группах в системе, вот информация о группе alex и о дополнительных группах пользователя alex:

root@deb:~# grep alex /etc/group cdrom:x:24:alex floppy:x:25:alex audio:x:29:alex dip:x:30:alex video:x:44:alex plugdev:x:46:alex netdev:x:109:alex alex:x:1000:

Здесь вначале идет имя группы, потом символ «x» обозначает что пароль зашифрован, затем gid, затем пользователи Linux для которых эта группа является дополнительной. Таким образом группа alex имеет gid=1000, а пользователь alex входит в дополнительные группы cdrom, floppy и так далее.

В /etc/shadow хранятся соленые хэши паролей пользователей, вот например строка для alex:

root@deb:~# grep alex /etc/shadow alex:$y$j9T$STsC82fbWIlhONPF0rXcm1$a.c./bIw7BUBiewrYoKnEBGBAH3Z5UGsWCFQsW3HOR8:19006:0:99999:7.

Строка файла содержит поля разделённые двоеточиями, в полях находится следующая информация:

  • имя пользователя;
  • хеш пароля;
  • дата последней смены пароля в днях начиная с 1 января 1970 года, чем больше число, тем новее пароль;
  • минимальный срок действия пароля, если 0 то неограничен;
  • максимальный срок действия пароля;
  • период предупреждения о необходимости сменить пароль;
  • период неактивности пароля — у меня пустое поле, период неактивности отсутствует;
  • дата истечения срока действия учётной записи — у меня пустое поле, учётная запись никогда не устаревает;
  • зарезервированное поле для использования в будущем.

Итог

В статье мы разобрались с темой «Группы и пользователи в Linux», а именно:

  • Научились смотреть информацию о пользователе командой id. А также поняли что такое uid и gid.
  • Научились переключаться на другого пользователя командой su. А также выходить из системы командой exit.
  • Узнали как создавать пользователей командами useradd и adduser.
  • Узнали как удалять пользователей командами userdel и deluser.
  • Научились менять пароль пользователю командой passwd.
  • Создавали группы командами groupadd и addgroup и удаляли группы командами groupdel и delgroup.
  • Научились различать первичную и дополнительную группы.
  • Научились добавлять пользователей в группы командами usermod и adduser, удалять пользователей из группы командой deluser, а также менять пользователю первичную группу командой usermod.
  • Узнали про файлы /etc/passwd, /etc/group, /etc/shadow.

Пользователи и группы в Linux

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

/etc/passwd

Информация о всех пользователях содержится в файле

/etc/passwd

двоеточие выступает в качестве разделителя строки на столбцы.

  1. Имя пользователя;
  2. Раньше хранились хеши паролей пользователей, сейчас пароли перенесены в файл /etc/shadow, а в столбце стоят просто знаки x;
  3. Id пользователя (uid);
  4. Id основной группы пользователя (gid), для групп есть файл /etc/group;
  5. Комментарий о пользователе;
  6. Путь к домашнему каталогу пользователя;
  7. Оболочка пользователя. Указывается или путь к файлу оболочки, например /bin/bash или nologin.

/etc/group

Информация о всех группах содержится в файле

/etc/group

синтаксис похож на /etc/passwd, в качестве разделителя так же используется двоеточие, но столбцов в этом файле меньше.

  1. Имя группы. При создании пользователя создается группа с таким же названием как имя пользователя — это его личная группа;
  2. Стоят знаки x. Пароли групп находятся в файле /etc/gshadow, который доступен только для root. Как и пользователю, для группы тоже можно поставить пароль командой gpasswd, потом кто-то из другой группы может временно получить права этой группы с помощью newgrp;
  3. Id группы (gid);
  4. Список пользователей группы.

/etc/shadow

Информация о пароле и все что к нему относится содержится в файле

/etc/shadow

синтаксис похож на /etc/passwd, в качестве разделителя так же используется двоеточие, но столбцов в этом файле меньше.

  1. Имя пользователя;
  2. Пароль в хешированном виде, вместо пароля может быть звездочка или восклицательный знак или два восклицательных знака, в зависимости от дистрибутива. Обычно это значит, что аккаунт заблокирован, в основном встречается у сервисных или новых аккаунтов, у которых нет паролей;
  3. Дата, когда последний раз менялся пароль. Эту же информацию можно прочитать командой chage -l user;
  4. Дата, когда пароль будет заблокирован.

/etc/sudoers

/etc/sudoers

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

Этот файл редактируется с помощью команды

visudo

Для защиты от синтаксических ошибок visudo копирует файл /etc/sudoers и изменения проводит в копии, при выходе файл проверяется на ошибки и если все нормально, то оригинал заменяется копией.

В /etc/sudoers содержатся строки вида

ALL=(ALL) ALL %ALL=(ALL) ALL %wheel=(ALL) NOPASSWD: ALL

знаком % обозначается группа пользователей. Nopasswd означает, что не нужно запрашивать пароль при использовании sudo.

    конструкция ALL=(ALL) ALL определяет кому и какие команды можно запускать
  • Первое ALL — на каком компьютере. ALL разрешает запускать команды на компьютере с любым hostname. Если вместо ALL указано конкретное имя, то оно будет сравниваться с текущим именем компьютера и правило будет применяться только если они совпадают. Если не совпадают, то строка будет проигнорирована. Если есть несколько компьютеров, можно написать один файл sudoers и скопировать его на все компьютеры и будут считываться только те строки, где хост равен указанному значению или ALL;
  • Второе ALL, в скобках — от имени какого пользователя. ALL позволяет запускать команду от имени любого пользователя или же можно написать конкретного пользователя от имени которого разрешается запускать команды;
  • Третье ALL — разрешенные для запуска команды. ALL разрешает запускать все команды или же можно прописать команды которые нужно разрешить или запретить, перед запрещенными ставится восклицательный знак.

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

Пользователи

  • useradd создание пользователя
  • useradd -b /home/users создание пользователя с указанием каталога (должен быть создан заранее), в котором будет создан домашний каталог пользователя
  • useradd -d /home/user1234 создание пользователя с указанием каталога, который будет использоваться в качестве домашнего каталога пользователя
  • useradd -g создание пользователя с назначением ему основной группы
  • useradd -G создание пользователя с назначением ему дополнительных групп
  • useradd -u создание пользователя с назначением ему конкретного идентификатора
  • passwd назначение пароля пользователю
  • userdel удаление пользователя
  • userdel -r удаление пользователя вместе с домашним каталогом и группой
  • usermod -g изменение основной группы пользователя
  • usermod -aG добавление дополнительной группы пользователю
  • usermod -G замена дополнительной группы пользователю
  • usermod -dm /var/user123 изменение расположения домашнего каталога пользователя с переносом данных из исходного
  • usermod -L блокирование пользователя
  • usermod -U разблокирование пользователя

Группы

  • groupadd создание группы
  • groupadd –g явное определение Group ID при создании группы
  • gpasswd изменяет/устанавливает пароль группы, что позволяет пользователям временно войти в группу при помощи команды newgrp , если им известен пароль
  • gpasswd -a добавление пользователя в группу
  • gpasswd –d удаление пользователя из группы
  • gpasswd -A -M , назначение группе администратора и пользователей. Администратор группы может добавлять и удалять пользователей группы без прав суперпользователя
  • gpasswd установка/изменение пароля группы, что позволяет пользователям временно войти в группу при помощи команды newgrp , если им известен пароль
  • groupdel удаление группы. Группу нельзя удалить, если она основная хотя бы для одного существующего пользователя
  • groupmod -n создание группы
  • groupmod –g изменение ID группы

Параметры пользователя

  • chage -l проверка параметров пользователя
  • chage -M 30 пароль должен меняться каждые 30 дней
  • chage -d 0 потребовать принудительное обновление пароля при входе
  • chage -E 2020-02-10 установка срока действия учетной записи на определенную дату
  • chage настройка времени действия пароля

Получение информации о пользователях

  • id вывод информации о текущем пользователе
  • id вывод информации об указанном пользователе
  • w отображение пользователей, находящихся в системе
  • who вывод пользователей онлайн, времени и даты входа
  • whoami вывод имени текущего пользователя
  • last вывод списка входа и выхода пользователей по времени
  • lastb вывод списка неудачных попыток входа
  • sudo -u выполнение одной команды от имени указанного пользователя
  • sudo su — вход под указанным пользователем без ввода его пароля

Параметры по-умолчанию для создания пользователя

У useradd есть свои настройки, настройки по умолчанию можно посмотреть командой

useradd -D

Настройки находятся в файлах

/etc/default/useradd /etc/login.defs

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

    Внутри /etc/default/useradd следующие параметры:
  • GROUP — если не создавать личную группу пользователя, то группа по умолчанию будет — users с gid 100
  • HOME — внутри какого каталога будет создан домашний каталог пользователя, по умолчанию /home
  • INACTIVE — через сколько дней после устаревания пароля заблокируется аккаунт: -1 никогда, 0 сразу, вместо нуля можно указать числом количество дней
  • EXPIRE — дата блокировки аккаунта ГГГГ-ММ-ДД
  • SHELL — интерпретатор по умолчанию, обычно /bin/bash
  • SKEL — путь к шаблонному каталогу, который используется при создании пользователя. В этом каталоге хранятся файлы, которые будут скопированы в домашний каталог пользователя при создании, по умолчанию /etc/scel
  • CREATE_MAIL_SPOOL — файл, в который будет попадать входящая почта для пользователя
    Внутри /etc/login.defs следующие параметры:
  • MAIL_DIR — каталог, в котором создается файл для входящей почты
  • PASS_MAX_DAYS — максимальное количество дней действия пароля
  • PASS_MIN_DAYS — минимальное количество дней действия пароля
  • PASS_MIN_LEN — минимальная длина пароля
  • PASS_WARN_AGE — за сколько дней до устаревания пароля пользователю будет выдано предупреждение о смене пароля
  • UID_MIN и UID_MAX — минимальный и максимальный uid, который может быть выдан пользователю, если его не указывать вручную
  • SYS_UID_MIN и SYS_UID_MAX — минимальный и максимальный uid, который может быть выдан сервисному пользователю
  • CREATE_HOME — создавать ли домашний каталог при создании пользователя
  • USERGROUPS_ENAB — параметр, отвечающий за создание группы пользователя. Без этого параметра группа будет, та что указана в GROUP файла /etc/default/useradd
  • ENCRYPT_METHOD — алгоритм хеширования пароля в файле /etc/shadow
  • Настройка сети в Linux
  • Настройка и подключение к Linux по SSH с использованием паролей и ключей
  • SELinux в Linux
  • Настройка Linux в качестве Master Browser
  • Монтирование и размонтирование сетевого каталога в Linux
  • Создание пользователя с правами sudo в Linux
  • LVM в Linux
  • LVM увеличение размера раздела за счет размера другого раздела в Linux
  • Не отображаются русские буквы в консоли Linux
  • Работа с редактором VIM в Linux
  • Разрешения и владельцы файлов и каталогов в Linux
  • Пользователи и группы в Linux
  • Управление пакетами и репозиториями APT, DPKG в Ubuntu
  • Управление пакетами и репозиториями YUM, RPM в CentOS
  • Firewalld в Linux
  • Управление службами через SYSTEMCTL в Linux
  • Устройства и виртуальные файловые системы в Linux
  • История команд в Linux
  • Ссылки в Linux
  • Логи в Linux
  • Потоки и конвейеры в Linux
  • Обработка консольного текстового вывода в Linux

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *