Управление пользователями во FreeBSD

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

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

/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:<span style="color: green;">$1</span><span style="color: green;">$SJSDMXQE</span><span style="color: green;">$LRpetLGNt5xO8k980r2om</span>.:<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Charlie &amp;:/root:/bin/csh
toor:*:<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Bourne-again Superuser:/root:
daemon:*:<b><span style="color: darkblue;">1</span></b>:<b><span style="color: darkblue;">1</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:<b><span style="color: darkblue;">2</span></b>:<b><span style="color: darkblue;">5</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:System &amp;:/:/usr/sbin/nologin
bin:*:<b><span style="color: darkblue;">3</span></b>:<b><span style="color: darkblue;">7</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Binaries Commands <span style="color: blue;">and</span> Source:/:/usr/sbin/nologin
tty:*:<b><span style="color: darkblue;">4</span></b>:<b><span style="color: darkblue;">65533</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:<b><span style="color: darkblue;">5</span></b>:<b><span style="color: darkblue;">65533</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:KMem Sandbox:/:/usr/sbin/nologin
games:*:<b><span style="color: darkblue;">7</span></b>:<b><span style="color: darkblue;">13</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>: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).

Пример:

 


<span style="color: red;"># vipw</span>
root:<span style="color: green;">$1</span><span style="color: green;">$SJSDMXQE</span><span style="color: green;">$LRpetLGNt5xO8k980r2om</span>.:<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Charlie &amp;:/root:/bin/csh
toor:*:<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Bourne-again Superuser:/root:
daemon:*:<b><span style="color: darkblue;">1</span></b>:<b><span style="color: darkblue;">1</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:<b><span style="color: darkblue;">2</span></b>:<b><span style="color: darkblue;">5</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:System &amp;:/:/usr/sbin/nologin
bin:*:<b><span style="color: darkblue;">3</span></b>:<b><span style="color: darkblue;">7</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Binaries Commands <span style="color: blue;">and</span> Source:/:/usr/sbin/nologin
tty:*:<b><span style="color: darkblue;">4</span></b>:<b><span style="color: darkblue;">65533</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:<b><span style="color: darkblue;">5</span></b>:<b><span style="color: darkblue;">65533</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:KMem Sandbox:/:/usr/sbin/nologin
games:*:<b><span style="color: darkblue;">7</span></b>:<b><span style="color: darkblue;">13</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Games pseudo-user:/usr/games:/usr/sbin/nologin

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

Поле 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

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

Каждое поле в файле /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Максимальный размер стека

<b></b>
Ресурсы могут ограничиваться как мягкими, так и жёсткими ограничениями, разница между ними состоит  в том, что жёсткие ограничения пользователь не сможет увеличивать, а мягкие сможет, но не больше чем жёсткое значение. Для обозначения мягких и жёстких ограничений используются специальные суффиксы <b>–max</b> и <b>–cur</b>. <span style="color: red;">Пр: filesize-max</span>

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

 

Название опции   Тип значения   Дефолт   Описание
charset   stringУстанавливает значение переменной окружения $MM_CHARSET. Пр: KOI8-R
hushlogin   bool   false   Разрешает (false) показывать файл /etc/motd при загрузке или запрещает (true). Тоже самое что присутствие файла ~/.hushlogin в домашнем каталоге.
ftp-chroot   bool   false   Делать chroot(2) пользователя в его домашнем каталоге при заходе по FTP. Применительно только к стандартному демону ftpd(8).
ignorenologin   bool   false   Логин не блокируется nologin.
label   stringПолитика MAC (maclabel(7)) применяемая к пользователю.
lang   stringУстанавливает значение переменной окружения $LANG. Пр: ru_RU.KOI8-R
manpath   pathОпределяет пути поиска man страниц
nocheckmail   bool   false   Показывать состояние почтового ящика при заходе пользователя в систему.
nologin   fileЕсли данный файл существует то отображается его содержимое при заходе в систему и сессия закрывается. Можно указать данную опцию в классе для пользователя и заблокировать для него вход в систему если даже у него в файле /etc/master.passwd установлена оболочка.
path   pathОпределяет пути поиска выполняемых файлов или программ.
priority   numberОпределяет первоначальный приоритет пользователя (nice(1)).
requirehome   bool   false   Требуется ли пользователю рабочий домашний каталог. Если его нет то пользователь не сможет войти в систему.
setenv   listУстанавливает переменные окружения в виде переменная=значение разделённые запятой
shell   progОболочка пользователя. Имеет приоритет над оболочкой указанной в файле /etc/master.passwd.
term   stringОпределяет тип терминала.
timezone   stringУстанавливает значение переменной окружения $TZ. Зоны находятся /usr/share/zoneinfo.
umask   number   022   Определяет права на создаваемые файлы. Права рассчитываются вычитанием маски из 666 а на каталог из 777.
welcome   file   ./etc/motd   Файл приветствия который показывается при заходе пользователя в систему.

<b></b>
<b></b><b></b>
<u><i>Авторизация пользователя:</i></u>

 

Название опции   Тип значения   Дефолт   Описание
copyright   fileДополнительный файл содержащий информацию о кооперайтах
host.allow   listСписок удалённых хостов с которых пользователи данного класса могут заходить на машину.
host.deny   listСписок удалённых хостов с которых пользователи данного класса не могут заходить на машину.
login_prompt   stringСтрока выводимая при запросе логина login(1)
login-backoff   numberОпределяет величину задержки умноженную на 5 секунд между неправильными логинами после того как исчерпаются попытки входа параметр ниже. Применимо к неудалённому терминалу.
login-retries   number   10   Количество разрешённых неправильных попыток входа прежде чем логин будет признан неудачным.
passwd_format   stringФормат в котором будет шифроваться новый пароль. Значения которые можно использовать – ‘md5’ ‘blf’ ‘des’. Советую по умолчанию использовать формат шифрования – ‘blf’ так как это наиболее криптостойкий алгоритм.
passwd_prompt   stringПриветствие для пароля.
times.allow   listСписок периодов времени в течение которых заходить в систему можно
times.deny   listСписок периодов времени в течение которых заходить в систему запрещено
ttys.allow   listСписок терминалов или групп терминалов которые пользователь с данным классом может использовать. Группы терминалов указаны в файле /etc/ttys(5)
ttys.deny   listСписок терминалов или групп терминалов которые пользователю с данным классом запрещено использовать. Группы терминалов указаны в файле /etc/ttys(5)
warnexpire   timeПериод времени за который необходимо предупреждать пользователя об истечении срока действия учётной записи.
warnpassword   timeПериод времени за который необходимо предупреждать пользователя об истечении срока действия пароля.

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

В опциях 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) Вам необходимо включить учёт используемых ресурсов. Учёт используемых процессами ресурсов представляет собой метод защиты, при котором администратор может отслеживать использование системных ресурсов и их распределение между пользователями для нужд системного мониторинга и минимального отслеживания команд пользователей.
Для того что бы включить систему учёта используемых ресурсов Вам необходимо выполнить несколько действий.


<b><span style="color: darkblue;">1</span></b>.<span style="color: magenta;">mkdir</span> /var/account
<b><span style="color: darkblue;">2</span></b>.<span style="color: magenta;">touch</span> /var/account/acct
<b><span style="color: darkblue;">3</span></b>.accton /var/account/acct
<b><span style="color: darkblue;">4</span></b>.<span style="color: magenta;">echo</span> 'accounting_enable="YES"' &gt;&gt; /etc/rc.conf

<b></b>
После выполнения 3 действия Вы уже можите использовать команды <span style="color: orange;">lastcomm(1)</span>, <span style="color: orange;">sa(8)</span>. Команда <span style="color: orange;">accton(8)</span> включает систему учёта используемых ресурсов.

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

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


fdesktop1<span style="color: red;"># lastcomm root</span>
lastcomm         -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">023</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">25</span></b>
cron             -F      root             __        <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">004</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">25</span></b>
<span style="color: magenta;">sh</span>               -       root             __        <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">005</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">25</span></b>
atrun            -       root             __        <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">004</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">25</span></b>
<span style="color: magenta;">man</span>              -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">032</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
<span style="color: magenta;">sh</span>               -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">019</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
<span style="color: magenta;">more</span>             -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">071</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
<span style="color: magenta;">zcat</span>             -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">025</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
<span style="color: magenta;">man</span>              -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">038</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
<span style="color: magenta;">sh</span>               -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">020</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
<span style="color: magenta;">zcat</span>             -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">030</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
<span style="color: magenta;">more</span>             -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">039</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
lastcomm         -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">014</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
<span style="color: magenta;">man</span>              -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">013</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>
<span style="color: magenta;">sh</span>               -       root             ttyp0     <b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">031</span></b> secs Tue May <b><span style="color: darkblue;">19</span></b> <b><span style="color: darkblue;">02</span></b>:<b><span style="color: darkblue;">24</span></b>

 


fdesktop1<span style="color: red;"># sa</span>
      <b><span style="color: darkblue;">73</span></b>       <b><span style="color: darkblue;">9</span></b>.617re        <b><span style="color: darkblue;">0</span></b>.03cp        0avio     2804k
       <b><span style="color: darkblue;">9</span></b>       <b><span style="color: darkblue;">3</span></b>.187re        <b><span style="color: darkblue;">0</span></b>.01cp        0avio     1383k   <span style="color: magenta;">more</span>
      <b><span style="color: darkblue;">13</span></b>       <b><span style="color: darkblue;">3</span></b>.196re        <b><span style="color: darkblue;">0</span></b>.00cp        0avio     4158k   <span style="color: magenta;">sh</span>
       <b><span style="color: darkblue;">9</span></b>       <b><span style="color: darkblue;">3</span></b>.197re        <b><span style="color: darkblue;">0</span></b>.00cp        2avio     3484k   <span style="color: magenta;">man</span>
       <b><span style="color: darkblue;">9</span></b>       <b><span style="color: darkblue;">0</span></b>.026re        <b><span style="color: darkblue;">0</span></b>.00cp        0avio     1547k   <span style="color: magenta;">zcat</span>
       <b><span style="color: darkblue;">7</span></b>       <b><span style="color: darkblue;">0</span></b>.003re        <b><span style="color: darkblue;">0</span></b>.00cp        0avio     2386k   sa
       <b><span style="color: darkblue;">7</span></b>       <b><span style="color: darkblue;">0</span></b>.002re        <b><span style="color: darkblue;">0</span></b>.00cp        0avio     4726k   lastcomm
       <b><span style="color: darkblue;">5</span></b>       <b><span style="color: darkblue;">0</span></b>.001re        <b><span style="color: darkblue;">0</span></b>.00cp        0avio     4516k   ***other
       <b><span style="color: darkblue;">7</span></b>       <b><span style="color: darkblue;">0</span></b>.001re        <b><span style="color: darkblue;">0</span></b>.00cp        0avio     4584k   <span style="color: magenta;">mv</span>

<b></b>
<b></b>

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

 


<span style="color: red;"># pw useradd test -s /bin/sh -c "Test users" -m -b /home -e 03-06-2009 -p  02-6-2009</span>

Давайте разберём наше действие:
-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:

 


<span style="color: magenta;">test</span>:*:<b><span style="color: darkblue;">1002</span></b>:<b><span style="color: darkblue;">1002</span></b>::<b><span style="color: darkblue;">40</span></b>:<b><span style="color: darkblue;">30</span></b>:<span style="color: magenta;">Test</span> users:/home/test:/bin/sh

<b></b>
Более интерактивная команда <span style="color: orange;">adduser(8)</span>, она имеет конфигурационный файл, в котором вы можите предопределить вводимые данные.

Как видим пользователь у нас не имеет пароля, поэтому не сможет войти в систему, для того что бы задать пароль используем команду passwd(8):

 


<span style="color: red;"># passwd test</span>
Changing <span style="color: blue;">local</span> password <span style="color: orange;">for</span> <span style="color: magenta;">test</span>
New Password:
Retype New Password:

<b></b><b></b>
<i><u><span style="color: brown;">Для более корректного удаления пользователя из системы используйте команду rmuser(8), данная команда не просто удаляет пользователя из файла /etc/master.passwd, но и все его данные в системе:</span></u></i>

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<span style="color: red;"># rmuser test</span>
Matching password entry:
<span style="color: magenta;">test</span>:*:<b><span style="color: darkblue;">1002</span></b>:<b><span style="color: darkblue;">1002</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:<span style="color: magenta;">Test</span> users:/home/test:/bin/sh
Is this the entry you wish <span style="color: blue;">to</span> remove? y
<span style="color: teal;">Remove</span> user's home <span style="color: teal;">directory</span> (/home/test)? y
Removing <span style="color: teal;">user</span> (<span style="color: magenta;">test</span>): mailspool home passwd.
fdesktop1<span style="color: red;"># pw useradd test -s /bin/sh -m -b /home -c "Test users"</span>
fdesktop1<span style="color: red;"># rmuser -y test</span>
Removing <span style="color: teal;">user</span> (<span style="color: magenta;">test</span>): mailspool home passwd.

<b></b><b></b>
<i><u><span style="color: brown;">Посмотрим теперь информацию о существующих пользователях, для этого будем использовать каманды id(1), finger(1):</span></u></i>

 


fdesktop1<span style="color: red;"># id root</span>
uid=<b><span style="color: darkblue;">0</span></b>(root) gid=<b><span style="color: darkblue;">0</span></b>(wheel) groups=<b><span style="color: darkblue;">0</span></b>(wheel),<b><span style="color: darkblue;">5</span></b>(operator)

<b></b>
Как видим утилита показывает информацию, к каким группам принадлежит пользователь. У данной команды есть много полезных опций, поэтому почитайте манн.

 


fdesktop1<span style="color: red;"># id -P root</span>
root:<span style="color: green;">$1</span><span style="color: green;">$SJSDMXQE</span><span style="color: green;">$LRpetLGNt5xO8k980r2om</span>.:<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>::<b><span style="color: darkblue;">0</span></b>:<b><span style="color: darkblue;">0</span></b>:Charlie &amp;:/root:/bin/csh



fdesktop1<span style="color: red;"># finger root</span>
<span style="color: magenta;">Login</span>: root                             <span style="color: blue;">Name</span>: Charlie Root
<span style="color: teal;">Directory</span>: /root                        Shell: /bin/csh
On since Sun May <b><span style="color: darkblue;">17</span></b> <b><span style="color: darkblue;">23</span></b>:<b><span style="color: darkblue;">10</span></b> (MSD) on ttyp0 <span style="color: blue;">from</span> <b><span style="color: darkblue;">192</span></b>.<b><span style="color: darkblue;">168</span></b>.<b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">2</span></b>
New <span style="color: magenta;">mail</span> received Wed Feb <b><span style="color: darkblue;">18</span></b> <b><span style="color: darkblue;">01</span></b>:<b><span style="color: darkblue;">21</span></b> <b><span style="color: darkblue;">2009</span></b> (MSK)
     Unread since Fri Feb <b><span style="color: darkblue;">13</span></b> <b><span style="color: darkblue;">00</span></b>:<b><span style="color: darkblue;">52</span></b> <b><span style="color: darkblue;">2009</span></b> (MSK)
<span style="color: teal;">No</span> Plan.

<b></b><b></b>
<u><i><span style="color: brown;">Давайте теперь узнаем кто сейчас находится в системе, для этого будем использовать команды users(1) и who(1):</span></i></u>

 


$ <span style="color: magenta;">who</span>
root             ttyp0    May <b><span style="color: darkblue;">17</span></b> <b><span style="color: darkblue;">23</span></b>:<b><span style="color: darkblue;">10</span></b> (<b><span style="color: darkblue;">192</span></b>.<b><span style="color: darkblue;">168</span></b>.<b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">2</span></b>)
atrium           ttyp1    May <b><span style="color: darkblue;">17</span></b> <b><span style="color: darkblue;">23</span></b>:<b><span style="color: darkblue;">19</span></b> (<b><span style="color: darkblue;">192</span></b>.<b><span style="color: darkblue;">168</span></b>.<b><span style="color: darkblue;">0</span></b>.<b><span style="color: darkblue;">2</span></b>)

$ users
atrium root

<b></b><b></b>

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


fdesktop1<span style="color: red;"># echo 'test:*:200:atrium' &gt;&gt; /etc/group</span>
fdesktop1<span style="color: red;"># id atrium</span>
uid=<b><span style="color: darkblue;">1001</span></b>(atrium) gid=<b><span style="color: darkblue;">20</span></b>(staff) groups=<b><span style="color: darkblue;">20</span></b>(staff),<b><span style="color: darkblue;">200</span></b>(<span style="color: magenta;">test</span>)

<b></b>
Мы создали новую группу ‘test’ и сразу же добавили в неё пользователя ‘atrium’.
<b></b>

 


fdesktop1<span style="color: red;"># pw groupadd list -M atrium,root</span>
fdesktop1<span style="color: red;"># pw groupshow list</span>
<span style="color: orange;">list</span>:*:<b><span style="color: darkblue;">1002</span></b>:atrium,root

<b></b>
С помощью прекрасной команды <span style="color: orange;">pw(8)</span> мы создали группу 'list’ и добавили в неё пользователя atrium и root. Так же посмотрели созданную группу.

Оригинал статьи