Небольшая справка о том, как работать с пользователями и группами в Linux.
ФАЙЛЫИнформация о пользователях и группах хранится в /etc/. Рассмотрим эти файлы:
less /etc/group # хранится информация о группах. less /etc/passwd # вся информация о пользователях кроме пароля или так:
getent group getent passwd
Хэши паролей и номеров юзеров
sudo less /etc/shadow sudo less /etc/gshadow
Формат текстовой, по строке на запись, разделитель - двоеточие: имя пользователя:пароль:UID:GID:комментарий:домашняя директория:командная оболочка <name>:*:<UID>:<GID>:<comment>:<directory>:<shell>
ПОЛЬЗОВАТЕЛИЯ не буду вдаваться в подробности в этом конспекте, ключи можно посмотреть в man, или в подробных статьях в ссылках в конце.
NOTE: У каждого пользователя есть числовой идентификатор пользователя, называемый UID. Если не указан при создании нового пользователя с помощью команды useradd, UID будет автоматически выбран из файла /etc/login.defs в зависимости от значений UID_MIN и UID_MIN. Посмотреть эти параметры:
cat /etc/login.defs | grep UID_M или так:
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
Создать пользователя в группе sambauser: sudo useradd -M -N -r -s /bin/false -g sambauser username
Удалить пользователя username
sudo userdel username NOTE: В поле комментарий можно написать все что угодно, определенного формата в современных системах нет, но исторически данное поле называется GECOS и подразумевает перечисление через запятую следующих опций: Полное имя пользователя, адрес офиса или домашний адрес, рабочий телефон, домашний телефон
Добавить комментарий к пользователю username
sudo usermod -c "Text of commentary..." username Задать пароль пользователю
sudo passwd username Вывести список всех пользователей (только имена)
cut -d: -f1 /etc/passwd или так
awk -F: '{ print $1}' /etc/passwd Вывести список только тех пользователей, у кого хомяк в /home
cat /etc/passwd | grep '/home' | cut -d: -f1 или так:
getent passwd | grep '/home'
Вывести список обычных пользователей (без затычки nologin, имеющих вход в shell ) cat /etc/passwd | grep -E -v 'nologin' | cut -d: -f1 Попытаться залогиниться под другим пользователем, например как bin:
sudo su bin Залогиниться под пользователем без оболочки можно так:
sudo -u username /bin/bash Подсчитать общее количество пользователей:
getent passwd | wc -l
ГРУППЫNOTE: Хотя учетная запись пользователя может входить в нескольких
групп, одна из групп всегда является «основной группой», а остальные
являются «вторичными группами». Процесс входа пользователя, файлы и
папки, созданные пользователем, будут назначены первичной группе.
Это может вызывать некоторое непонимание, и на примере я опишу это в конце в примере.
Добавить группу
Удалить группу
Переименовать группу sudo groupmod -n new-group-name old-group-name Вывести список всех групп
Для компактности можно обернуть в переменную: echo $(cut -d: -f1 /etc/group) Подсчитать общее количество групп:
getent group | wc -l
ПОЛЬЗОВАТЕЛИ В ГРУППАХГруппы существуют для управления правами пользователей через отдельный объект.
Добавление пользователя в группу sudo usermod -a -G groupname username Добавление пользователя в несколько вторичных групп
sudo usermod -a -G groupname1,groupname2 username Удаление пользователя из группы
sudo gpasswd -d username groupname Изменение первичной группы пользователя (если выше не помогло)
sudo usermod -g groupname username Показать к каким группам, uid/gid принадлежит юзер
id username Вывести к каким группам принадлежит каждый пользователь из списка:
for x in user1 user2 user3 user4 ;do printf $x:; groups $x;done Вывести к каким группам принадлежит каждый имеющий домашний каталог, пользователь:
for x in $(cat /etc/passwd | grep '/home' | cut -d: -f1);do printf $x:; groups $x;done
ПримерА теперь обещанный пример.
Создадим двух пользователей и назначим их в три группы каждого:
sudo useradd -M -N -r -s /bin/false -g group01 -G group02,group03 testuser01 sudo useradd -M -N -r -s /bin/false -g group01 -G group02,group03 testuser02
Увидим, что в списке пользователей фигурирует только одна с Group ID=1002
cat /etc/passwd | grep testuser Вывод:
testuser01:x:953:1002::/home/testuser01:/bin/false testuser02:x:952:1002::/home/testuser02:/bin/false
Узнать имя группы по её GID:
less /etc/group |grep 1002
Как же так, а где наши остальные членства в группах, разве пользователь не был в них включён? Спокойствие! Все группы назначены, Просматривая /etc/passwd мы видим только основную группу пользователя, указанную кодом GID. Дополнительные группы хранятся не тут.
Наоборот, это пользователи хранятся в описании группы в файле /etc/group. И только в том случае, если эта группа им не основная.
Посмотреть по именованному списку дополнительных групп, в каких из них состоит пользователь username:
grep -E '^groupname1|^groupname2|^groupname3' /etc/group | grep username Такие дела.
Использованные ссылки:- https://help.ubuntu.ru/wiki/пользователи_и_группы
- https://zalinux.ru/?p=1407
- https://zalinux.ru/?p=5578
- https://interface31.ru/tech_it/2019/12/linux-nachinayushhim-chast-6-upravlenie-pol-zovatelyami-i-gruppami.html
|