Управление учетными записями пользователей во FreeBSD

Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX. Так как FreeBSD является многопользовательской ОС и принадлежит к семейству ОС относящихся к общему названию UNIX, поэтому грамотное умение управлять пользователями во FreeBSD позволит избежать различных неприятностей.

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

/etc/master.passwd – в данном файле хранятся учётные данные пользователей и их пароли в зашифрованном виде.
/etc/group – файл который отвечает за группы

Во FreeBSD используется технология теневых паролей – это когда системные данные пользователей разделены на два файла:

1. Файл /etc/master.passwd в котором распологаются пароли в зашифрованном виде, этот файл имеет права только на чтение и запись для пользователя root .

2. Файл /etc/passwd, созданный с помощью команды pwd_mkdb (8) (генерация базы с паролями) из файла /etc/master.passwd, он имеет права на чтение для группы и других пользователей, в нём пароли заменены на *. Также с помощью команды pwd_mkdb(8) из файла /etc/master.passwd создаются два файла — /etc/pwd.db и /etc/spwd.db (индексированные базы данных), они предназначены для ускорения поиска, в случае большого количества системных пользователей. Файл /etc/spwd.db является секретным как и файл /etc/master.passwd и имеет теже права доступа и владельца.

Рассмотрим синтаксис файла /etc/master.passwd:

________________________________________________________________________________
root:$1$SJSDMXQE$LRpetLGNt5xO8k980r2om.:0:0::0:0:Charlie &:/root:/bin/csh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
_________________________________________________________________________________

Каждая новая строка в файле описывает пользователя, она содержит в себе столбцы разделённые (:).

Столбцы по порядку:

  • 1.name – логин пользователя, который будет использоваться при входе в систему
  • 2.password – зашифрованный пароль в файле /etc/master.passwd и * в /etc/passwd
  • 3.uid – уникальный идентификатор пользователя.
  • 4.gid – уникальный идентификатор группы.
  • 5.class – класс настроек и установок, который берётся из файла /etc/login.conf
  • 6.change – время жизни пароля, т.е период через который необходимо сменить пароль. Количество секунд с 1 января 1970. Проверить на какую дату указывают секунды в поле можно с помощью команды: date –r seconds, где seconds – значение поля.
  • 7.expire – время жизни аккуанта, после прошествия этого периода времени он заблокируется, 1 января 1970. Проверить на какую дату указывают секунды в поле можно с помощью команды: date –r seconds, где seconds – значение поля.
  • 8.gecos – общая информация о пользователе
  • 9.home dir – домашний каталог пользователя
  • 10.shell – оболочка, которую будет использовать пользователь

При создании файла /etc/passwd из файла /etc/master.passwd поля class, change, expire удаляются, а пароль заменяется на *.
Поле логина (name) не может начинаться с символа (-), так же не советуется использовать прописные буквы в имени пользователя и разделять логин символом (.), что может вызвать проблемы при работе с почтой. В файле /etc/master.passwd поле password зашифровано, если поле отсутствует, т.е вместо пароля стоит символ *, то доступ к машине вы не получите. Для быстрого редактирования файла /etc/master.passwd и без последующего применения команды pwd_mkdb(8) применяется команда vipw(8), это тот же текстовый редактор vi(1), поэтому перед применение команды vipw(8) ознакомьтесь с man страницей по vi(1).

Пример:
_________________________________________________________________
# vipw
root:$1$SJSDMXQE$LRpetLGNt5xO8k980r2om.:0:0::0:0:Charlie &:/root:/bin/csh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
_________________________________________________________________

При использовании (*) в /etc/master.passwd вместо поля password запрещается авторизация в системе так как символ (*) не может быть зашифрованным паролем. Например, для временной блокировки пользователя, можно использовать вместо поля password в файле /etc/master.passwd такую комбинацию *LOCKED* или добавить такую комбинацию в начало пароля, если он существует, а при разблокировке просто её удалить, для этого Вам понадобится команда vipw(8). Для того, чтобы посмотреть как блокировать аккуант с помощью командной строки прочтите man по команде pw(8).
Поле gecos дающее общую информацию о пользователи, содержит в себе следующие поля, разделённые запятой:
name – полное имя пользователя
office – номер офиса
wphone – рабочий телефон
hphone – домашний телефон

Поле home_dir, определяет путь к домашнему каталогу пользователя, владельцем которого он будет являться.
Поле shell, определяет оболочку пользователя, список доступных оболочек для пользователя можно посмотреть в файле /etc/shells. Для пользователя root изменять текущую оболочку не рекомендуется, т.к в случае аварии файловая система /usr может быть не примонтирована, в следствии чего пользователь root не получит доступ к системе.
Если Вы хотите запретить доступ пользователя к системе, замените его оболочку на /sbin/nologin. Данная программа более корректно, чем другие (пр.: /dev/null) обработает попытку входа пользователя.

При добавлении нового пользователя необходимо выбрать уникальное имя (login name) которое не будет встречаться в файле /etc/passwd и /etc/mail/aliases. Так же имя не должно начинаться с символа (-) и содержать в себе символ (.), и прописные буквы, так как могут возникнуть непредвиденные ситуации при работе с почтой. Новый пользователь получает уникальный id – UID и становится членом группы, имя которой совпадает с именем пользователя, в которой он будет один. Такая стратегия именования группы позволяет улучшить безопасность и гибкость при управлении доступом. UID и имя пользователя(login name) являются уникальными в системе и будут использоваться при осуществлении контроля доступа к файловой системе. После добавления пользователя в систему, в его домашний каталог копируются файлы .profile (выполняется при заходе пользователя в систему), если используется оболочка /bin/sh или .cshrc(при старте оболочки) и .login(при заходе пользователя в систему), если используется оболочка /bin/csh. Все эти файлы копируются из каталога /usr/share/skel.

В файле /etc/group находятся все локальные группы системы. Данный файл можно редактировать любым текстовым редактором на Ваше усмотрение, т.е чтобы добавить группу достаточно отредактировать вышеуказанный файл.
Файл состоит из отдельных строк, столбцы в которых разделены с помощью специального символа (:). Строка состоит из следующих столбцов или полей:
group – название или имя группы
password – зашифрованный пароль для группы
gid – уникальный номер группы
member – члены данной группы

В данном файле, каждая строка, начинающаяся с символа (#) является комментарием.
Поле group является именем группы, которое определяет доступ пользователям к файлам, являющимися членами данной группы. С полем group ассоциируется поле gid, которое определяет уникальный идентификатор группы. Два этих поля неразрывно связаны, точно также как имя пользователя и его UID. Поле password является необязательным, оно редко используется и поэтому символ (*) никак лучше подходит вместо шифрованного пароля. Поле member содержит членов группы, виде имён пользователей разделённых между собой с помощью сивола (,) – запятая. В группе может находится не больше 200 пользователей. Максимальная длина строки в файле /etc/group 1024 символа.

Управление ресурсами пользователя и ограничения.

Управление ресурсами пользователя осуществляется с помощью классов, которые определяются в специальном файле /etc/login.conf, а также задаются пользователю при его добавлении. Если для пользователя не определён какой-либо класс, то ему присваивается класс – default. Каждый класс имеет набор характеристик в виде имя=значение. Для ускорения доступа к данным система непосредственно не читает файл /etc/login.conf, а вместо этого читает файл /etc/login.conf.db, который создаётся специальной командой cap_mkdb(1)

________________________________________________________
cam_mkdb /etc/login.conf
________________________________________________________

Поэтому после каждого изменения файла /etc/login.conf не забывайте исполнять команду cap_mkdb(1)
Изменить или задать класс пользователю можно в файле /etc/master.passwd, в котором для этого имеется специальное поле class. Это обсуждалось выше. Пользователь с UID = 0, т.е администратор системы (root) не имеет действующего класса, к нему применяется запись root в /etc/login.conf или класс default, если запись root отсутствует.
Пользователь может для себя создать индивидуальный файл с настройками ресурсов в домашнем каталоге под названием ~/login.conf, этот файл использует тот же синтаксис, что и файл /etc/login.conf, но он содержит только запись id с именем «me». В этом файле пользователь может только уменьшать предоставляемые ему ресурсы, но никак не увеличивать.
В качестве разделителя полей в файле /etc/login.conf используется символ (:). Первое поле в файле означает имя класса, который в последующем будет применяться к тому или иному пользователю.

Каждое поле в файле /etc/login.conf может принимать следующие значения:
•bool – если параметр является булевым, то оно может принимать следующие значения – true или false; Просто запись опции в файле /etc/login.conf без указания явного значения означает – true. Для определения false необходимо явно указать.
•file – опция принимает значение в виде пути к файлу;
•program – опция принимает значение в виде пути к исполняемуму файлу или программе;
•list – опция принимает значения в виде списка разделённого запятой или пробелом;
•path – опция принимает значения путей, разделённых запятой или пробелом. Тильда (~) раскрывается в домашний каталог пользователя;
•number – числовой значение, в десятичном, шестнадцатиричном или восьмеричном виде.
•string – в виде строки;
•size – размер. По умолчанию принимается в байтах. Может принимать следующие суффиксы для обозначения единиц размеров:
b – байты
k – килобайты
m – мегабайты
g – гигабайты
t – терабайты
Возможно объединение значений с указанием соответствующих суффикосв: 1m30k
•time – период времени, по умолчанию выраженный в секундах. В качестве суффикса используются следующие обозначения:
y – год
w – неделя
d – день
h – час
m – минуты
s – секунды
Возможно объединение значений с указанием соответствующих суффиксов: 2h30m
•unlimited – отсутствие ограничений

Ограничение ресурсов:

Название опцииТип значенияОписание
coredumpsizesizeОграничивает размер файла coredump
cputimetimeОграничивает время использования процессора
datasizesizeМаксимальный размер данных
filesizesizeМаксимальный размер файла. Запрещает создавать файлы больше указанного размера
maxprocnumberМаксимальное число процессов которые может создать пользователь
memorylockedsizeМаксимальный размер в core memory котрую может заблокировать процесс
memoryusesizeМаксимальный размер памяти которую может использовать процесс
openfilesnumberМаксимально количество файлов которые может открыть каждый процесс
sbsizesizeМаксимально разрешённый размер сокетбуфера
vmemoryusesizeМаксимально разрешенный размер виртуальной памяти для каждого процесса
stacksizesizeМаксимальный размер стека


Ресурсы могут ограничиваться как мягкими, так и жёсткими ограничениями, разница между ними состоит в том, что жёсткие ограничения пользователь не сможет увеличивать, а мягкие сможет, но не больше чем жёсткое значение. Для обозначения мягких и жёстких ограничений используются специальные суффиксы –max и –cur. Пр: filesize-max

Окружение пользователя:

Название опцииТип значенияДефолтОписание
charsetstringУстанавливает значение переменной окружения $MM_CHARSET. Пр: KOI8-R
hushloginboolfalseРазрешает (false) показывать файл /etc/motd при загрузке или запрещает (true). Тоже самое что присутствие файла ~/.hushlogin в домашнем каталоге.
ftp-chrootboolfalseДелать chroot(2) пользователя в его домашнем каталоге при заходе по FTP. Применительно только к стандартному демону ftpd(8).
ignorenologinboolfalseЛогин не блокируется nologin.
labelstringПолитика MAC (maclabel(7)) применяемая к пользователю.
langstringУстанавливает значение переменной окружения $LANG. Пр: ru_RU.KOI8-R
manpathpathОпределяет пути поиска man страниц
nocheckmailboolfalseПоказывать состояние почтового ящика при заходе пользователя в систему.
nologinfileЕсли данный файл существует то отображается его содержимое при заходе в систему и сессия закрывается. Можно указать данную опцию в классе для пользователя и заблокировать для него вход в систему если даже у него в файле /etc/master.passwd установлена оболочка.
pathpathОпределяет пути поиска выполняемых файлов или программ.
prioritynumberОпределяет первоначальный приоритет пользователя (nice(1)).
requirehomeboolfalseТребуется ли пользователю рабочий домашний каталог. Если его нет то пользователь не сможет войти в систему.
setenvlistУстанавливает переменные окружения в виде переменная=значение разделённые запятой
shellprogОболочка пользователя. Имеет приоритет над оболочкой указанной в файле /etc/master.passwd.
termstringОпределяет тип терминала.
timezonestringУстанавливает значение переменной окружения $TZ. Зоны находятся /usr/share/zoneinfo.
umasknumber022Определяет права на создаваемые файлы. Права рассчитываются вычитанием маски из 666 а на каталог из 777.
welcomefile./etc/motdФайл приветствия который показывается при заходе пользователя в систему.

Авторизация пользователя:

Название опцииТип значенияДефолтОписание
copyrightfileДополнительный файл содержащий информацию о кооперайтах
host.allowlistСписок удалённых хостов с которых пользователи данного класса могут заходить на машину.
host.denylistСписок удалённых хостов с которых пользователи данного класса не могут заходить на машину.
login_promptstringСтрока выводимая при запросе логина login(1)
login-backoffnumberОпределяет величину задержки умноженную на 5 секунд между неправильными логинами после того как исчерпаются попытки входа параметр ниже. Применимо к неудалённому терминалу.
login-retriesnumber10Количество разрешённых неправильных попыток входа прежде чем логин будет признан неудачным.
passwd_formatstringФормат в котором будет шифроваться новый пароль. Значения которые можно использовать – ‘md5’ ‘blf’ ‘des’. Советую по умолчанию использовать формат шифрования – ‘blf’ так как это наиболее криптостойкий алгоритм.
passwd_promptstringПриветствие для пароля.
times.allowlistСписок периодов времени в течение которых заходить в систему можно
times.denylistСписок периодов времени в течение которых заходить в систему запрещено
ttys.allowlistСписок терминалов или групп терминалов которые пользователь с данным классом может использовать. Группы терминалов указаны в файле /etc/ttys(5)
ttys.denylistСписок терминалов или групп терминалов которые пользователю с данным классом запрещено использовать. Группы терминалов указаны в файле /etc/ttys(5)
warnexpiretimeПериод времени за который необходимо предупреждать пользователя об истечении срока действия учётной записи.
warnpasswordtimeПериод времени за который необходимо предупреждать пользователя об истечении срока действия пароля.

В опциях host.allow и host.deny разделителем хостов является запятая.

В опциях times.allow и times.deny записи разделяются запятой. Значения периодов времени записываются в 24 –х часовом формате, отделённых друг от друга дефисом.
Для примера: MoThSa0200-1300 Данная запись расшифровывается следующим образом: доступ пользователю разрешён по понедельникам, четвергам, субботам в период с 2 –ч часов ночи до часу дня. Если обе опции в пользовательском классе отсутствуют, то доступ разрешается в любое время. Если период времени разрешённый в опции times.allow запрещается периодом времени в файле times.deny, то приоритет имеет опция times.deny.

В опциях ttys.allow и ttys.deny содержаться записи tty устройств, разделённые запятой (без префикса /dev/) и список ttygroups (смотрите getttyent(3) и ttys(5)) к которым пользователь данного класса имеет или не имеет доступ. Если в опции нет ни одной записи, то пользователь имеет неограниченный доступ.

Параметры пароля такие как минимальная длинна (minpasswordlen) и параметр отвечающий за предупрждение, если пользователь вводит пароль только в нижнем регистре (minpasswordcase) не поддерживаются, для этих ограничений применяется pam модуль pam_passwdqc(8).

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

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

pw(8) – создание, удаление, изменение, отображение пользователей и групп;
adduser(8) – интерактивное добавление нового пользователя;
rmuser(8) – удаление пользователя из системы;
id(1) – отображение имени пользователя, UID и групп в которых он состоит с указанием их GID;
finger(1) – отображает информацию о системном пользователе;
users(1) – показывает список текущих пользователей;
who(1) – показывает тех кто находится в системе;
whoami(1) – показывает эффективный id пользователя соответствующий имени;
last(1) – показывает когда пользователь пользовался терминалом;
lastlogin(8) – показывает информацию о последнем использовании терминала;
lastcomm(1) – показывает список последних выполняем команд пользователем;
ac(8) – показывает время, которое пользователь находился в системе;
sa(8) – показывает статистику по пользователям;
passwd(8) – смена пароля пользователю;
chpass(1) – смена пароля пользователя;
chfn(1) – изменение пользовательских данных;
groups(1) – показывает кто в каких группах состоит;
chgrp(1) – изменение группы;
chkgrp(8) – проверка синтаксиса файла групп;

Для полноценного использования команд lastcomm(1), sa(8) Вам необходимо включить учёт используемых ресурсов. Учёт используемых процессами ресурсов представляет собой метод защиты, при котором администратор может отслеживать использование системных ресурсов и их распределение между пользователями для нужд системного мониторинга и минимального отслеживания команд пользователей.
Для того что бы включить систему учёта используемых ресурсов Вам необходимо выполнить несколько действий.

_______________________________________________________________
1.mkdir /var/account
2.touch /var/account/acct
3.accton /var/account/acct
4.echo ‘accounting_enable=»YES»‘ >> /etc/rc.conf
_______________________________________________________________
После выполнения 3 действия Вы уже можите использовать команды lastcomm(1), sa(8). Команда accton(8) включает систему учёта используемых ресурсов.

Практика:
(Для более подробной информации о командах обязательно читайте манны)

Использование системы учёта ресурсов, команда lastcomm(1) и sa(8):

_______________________________________________________________
fdesktop1# lastcomm root
lastcomm — root ttyp0 0.023 secs Tue May 19 02:25
cron -F root __ 0.004 secs Tue May 19 02:25
sh — root __ 0.005 secs Tue May 19 02:25
atrun — root __ 0.004 secs Tue May 19 02:25
man — root ttyp0 0.032 secs Tue May 19 02:24
sh — root ttyp0 0.019 secs Tue May 19 02:24
more — root ttyp0 0.071 secs Tue May 19 02:24
zcat — root ttyp0 0.025 secs Tue May 19 02:24
man — root ttyp0 0.038 secs Tue May 19 02:24
sh — root ttyp0 0.020 secs Tue May 19 02:24
zcat — root ttyp0 0.030 secs Tue May 19 02:24
more — root ttyp0 0.039 secs Tue May 19 02:24
lastcomm — root ttyp0 0.014 secs Tue May 19 02:24
man — root ttyp0 0.013 secs Tue May 19 02:24
sh — root ttyp0 0.031 secs Tue May 19 02:24
_______________________________________________________________

_______________________________________________________________
fdesktop1# sa
73 9.617re 0.03cp 0avio 2804k
9 3.187re 0.01cp 0avio 1383k more
13 3.196re 0.00cp 0avio 4158k sh
9 3.197re 0.00cp 2avio 3484k man
9 0.026re 0.00cp 0avio 1547k zcat
7 0.003re 0.00cp 0avio 2386k sa
7 0.002re 0.00cp 0avio 4726k lastcomm
5 0.001re 0.00cp 0avio 4516k ***other
7 0.001re 0.00cp 0avio 4584k mv
_______________________________________________________________

Добавление нового пользователя в систему, будем использовать команду pw(8):

_______________________________________________________________
# pw useradd test -s /bin/sh -c «Test users» -m -b /home -e 03-06-2009 -p 02-6-2009
_______________________________________________________________

Давайте разберём наше действие:
-s – указывает какой терминал будет использоваться, поле shell
-с – комментарии к созданному пользователю, поле gecos
-e – время жизни аккуанта, поле expire. Формат поля аналогичен опции ‘-p’
-p – время жизни пароля, поле change. Формат задания даты или времени таков:
dd-mm-yy[yy], где dd – день, mm – месяц, yy[yy] – год. Или используется следующий
формат: +0mhdwoy, где m – минуты, h – часы, d – дни, w – недели, o – месяц, y — год
-m – заставляет создать домашний каталог пользователя и скопировать в него стандартные файлы
и каталога /usr/share/skel
-b – базовая директория в которой будет находится домашний каталог пользователя, поле home_dir
-L – задаёт класс для пользователя из файла login.conf, поле class

Результаты работы, из файла /etc/master.passwd:

_______________________________________________________________
test:*:1002:1002::40:30:Test users:/home/test:/bin/sh
_______________________________________________________________

Более интерактивная команда adduser(8), она имеет конфигурационный файл, в котором вы можите предопределить вводимые данные.

Как видим пользователь у нас не имеет пароля, поэтому не сможет войти в систему, для того что бы задать пароль используем команду passwd(8):
________________________________________________________________
# passwd test
Changing local password for test
New Password:
Retype New Password:
________________________________________________________________

Для более корректного удаления пользователя из системы используйте команду rmuser(8), данная команда не просто удаляет пользователя из файла /etc/master.passwd, но и все его данные в системе:

1.Удаляет пользовательский crontab(1), если он существует
2.Удаляет задания пользователя, созданные командой at(1)
3.Отправляет всем процессам работающим от имени этого пользователя сигнал SIGKILL
4.Удаляет пользователя из файла /etc/passwd
5.Удаляет домашнюю директорию пользователя, включая символические ссылки на домашний каталог
6.Удаляет входящие письма из каталога /var/mail
7.Удаляет все файлы владельцем которых является пользователь из каталогов /tmp, /var/tmp и /var/tmp/vi.recover
8.Удаляет пользователя из всех группы, в которых он состоит (файл /etc/groups)
9.Удаляет все очереди сообщений, общую разделяемую память, семафоры владельцем которых является пользователь. (Для справки: все это интерфейсы межпроцессорного взаимодействия)

Используйте утилиту rmuser(8) с параметром ‘–y’ что бы она не спрашивала подтверждения на удаление.

Пример удаления без опции ‘-y’ и с опцией ‘y’:

_________________________________________________________________
fdesktop1# rmuser test
Matching password entry:
test:*:1002:1002::0:0:Test users:/home/test:/bin/sh
Is this the entry you wish to remove? y
Remove user’s home directory (/home/test)? y
Removing user (test): mailspool home passwd.
fdesktop1# pw useradd test -s /bin/sh -m -b /home -c «Test users»
fdesktop1# rmuser -y test
Removing user (test): mailspool home passwd.
_________________________________________________________________

Посмотрим теперь информацию о существующих пользователях, для этого будем использовать каманды id(1), finger(1):
_________________________________________________________________
fdesktop1# id root
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
_________________________________________________________________
Как видим утилита показывает информацию, к каким группам принадлежит пользователь. У данной команды есть много полезных опций, поэтому почитайте манн.
_________________________________________________________________
fdesktop1# id -P root
root:$1$SJSDMXQE$LRpetLGNt5xO8k980r2om.:0:0::0:0:Charlie &:/root:/bin/csh

fdesktop1# finger root
Login: root Name: Charlie Root
Directory: /root Shell: /bin/csh
On since Sun May 17 23:10 (MSD) on ttyp0 from 192.168.0.2
New mail received Wed Feb 18 01:21 2009 (MSK)
Unread since Fri Feb 13 00:52 2009 (MSK)
No Plan.
_________________________________________________________________

Давайте теперь узнаем кто сейчас находится в системе, для этого будем использовать команды users(1) и who(1):
_________________________________________________________________
$ who
root ttyp0 May 17 23:10 (192.168.0.2)
atrium ttyp1 May 17 23:19 (192.168.0.2)

$ users
atrium root
_________________________________________________________________

Создадим новую группу:

_________________________________________________________________
fdesktop1# echo ‘test:*:200:atrium’ >> /etc/group
fdesktop1# id atrium
uid=1001(atrium) gid=20(staff) groups=20(staff),200(test)
_________________________________________________________________

Мы создали новую группу ‘test’ и сразу же добавили в неё пользователя ‘atrium’.
_________________________________________________________________
fdesktop1# pw groupadd list -M atrium,root
fdesktop1# pw groupshow list
list:*:1002:atrium,root
_________________________________________________________________

С помощью этой команды pw(8) мы создали группу ‘list’ и добавили в неё пользователя atrium и root. Так же посмотрели созданную группу.

Автор статьи: atrium

Взято тут : http://www.lissyara.su/