В статье разберём как создаются группы и пользователи в 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;
  • deluser.

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

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
Группы и пользователи в 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.

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

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

  • /etc/passwd;
  • /etc/group;
  • /etc/shadow.

В 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
Описание
В статье разберём как создаются группы и пользователи в linux, а также как ими управлять и переключаться с одного пользователя на другого

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

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