UNIX - многопользовательская операционная система. Пользователи, занимающиеся общими задачами, могут объединяться в группы. Каждый пользователь обязательно принадлежит к одной или нескольким группам. Все команды выполняются от имени определенного пользова
Автор:
Разместил: Amro   Дата: 2006-04-04 10:02
Комментарии: (0)   Рейтинг:

Основы операционной системы UNIX - 03. Пользователи и группы

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

В многопользовательских системах необходимо обеспечивать защиту объектов (файлов, процессов), принадлежащих одному пользователю, от всех остальных. ОС UNIX предлагает базовые средства защиты и совместного использования файлов на основе отслеживания пользователя и группы, владеющих файлом, трех уровней доступа (для пользователя-владельца, для пользователей группы-владельца, и для всех остальных пользователей) и трех базовых прав доступа к файлам (на чтение, на запись и на выполнение). Базовые средства защиты процессов основаны на отслеживании принадлежности процессов пользователям.

Для отслеживания владельцев процессов и файлов используются числовые идентификаторы. Идентификатор пользователя и группы - целое число (обычно) в диапазоне от 0 до 65535. Присвоение уникального идентификатора пользователя выполняется при заведении системным администратором нового регистрационного имени. Значения идентификатора пользователя и группы - не просто числа, которые идентифицируют пользователя, - они определяют владельцев файлов и процессов. Среди пользователей системы выделяется один пользователь - системный администратор или суперпользователь, обладающий всей полнотой прав на использование и конфигурирование системы. Это пользователь с идентификатором 0 и регистрационным именем root.

При представлении информации человеку удобнее использовать вместо соответствующих идентификаторов символьные имена - регистрационное имя пользователя и имя группы. Соответствие идентификаторов и символьных имен, а также другая информация о пользователях и группах в системе (учетные записи), как и большинство другой информации о конфигурации системы UNIX, по традиции, представлена в виде текстовых файлов. Эти файлы - /etc/passwd, /etc/group и /etc/shadow (в системах с теневым хранением паролей) - детально описаны ниже.

Файл /etc/passwd

Каждая строка (учетная запись) в файле /etc/passwd описывает одного известного системе пользователя и имеет семь разделенных двоеточиями полей. Пример записи:

user_01:x:169:10:Student:/home/user_01:/bin/sh

Назначение полей этой записи представлено в следующей таблице.

Таблица 1. Поля файла /etc/passwd и их назначение

Поле

Назначение

Имя пользователя (регистрационное имя)

Содержит символьное имя пользователя, используемое при регистрации в системе. В пределах одной машины должно быть уникальным. Регистрационное имя должно состоять из алфавитно-цифровых символов (нижнего регистра), без пробелов, с максимальной длиной, определяемой конкретной ОС. Наиболее часто используется максимальная длина - восемь символов. Дублирование имен пользователей приводит к определенным осложнениям. Например, дубликаты появляются тогда, когда администратор использует в имени более 8 символов. Тогда для системы jarmstrong то же, что jarmstroff. Когда имя так продублировано, система использует первую найденную для него запись в файле /etc/passwd и игнорирует последующие.

Пароль

Поле хранит зашифрованный пароль. Допускается пустое поле. При использовании системы теневого хранения паролей, в этом поле находится только метка пароля (x), а зашифрованный пароль хранится в другом месте. Правила задания пароля обычно находятся в файле /etc/default/passwd, (например, директива PASSLENGТH=число в этом файле задает минимальное количество символов в пароле). Некоторые системы также учитывают регистр, а в некоторых предусматривается использование как минимум одного не алфавитно-цифрового символа.

Идентификатор пользователя

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

Идентификатор группы

Содержит числовой идентификатор группы. Любой созданный пользователем файл ассоциируется с его идентификатором группы. Указанная здесь группа является основной (первичной) для данного пользователя.

Комментарий

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

Начальный каталог

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

Начальная команда

Определяет командную среду пользователя (обычно запускается один из командных интерпретаторов UNIX, но, теоретически, можно указать любую команду). Это поле можно изменять.

Файл /etc/group

Этот файл соотносит числовые идентификаторы групп с символьными именами. Каждая строка файла /etc/group содержит четыре поля. Поля разделяются двоеточиями. Назначение полей этой записи представлено в табл. 2.

Таблица 2. Поля файла /etc/group и их назначение

Поле Назначение
Имя группы Содержит (уникальное) символьное имя группы.
Пароль группы Группы могут иметь пароли, хотя использование паролей групп - явление редкое. В примере данное поле пустое - это значит, что пароль отсутствует.
Идентификатор группы Содержит числовой идентификатор группы.
Список пользователей Содержит список регистрационных имен пользователей данной группы. Имена в этом списке разделяются запятыми. Пользователи могут принадлежать к нескольким группам и, при необходимости, переключаться между ними с помощью команды newgrp.

Пример записи из файла /etc/group:

bin::2:root,bin,daemon

Файл /etc/shadow

Этот файл используется в системах с теневым хранением паролей, где они вынесены из доступного всем пользователям на чтение файла /etc/passwd для повышения безопасности системы. Здесь (помимо собственно зашифрованных паролей) хранятся дополнительные ограничения, связанные с регистрационным именем и паролем пользователя. Доступ к этому файлу на чтение имеет только пользователь root, а работают с ним команды passwd и login.

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

Таблица 3. Поля файла /etc/shadow и их назначение

Номер поля Назначение
1 Имя пользователя.
2 Зашифрованный по особому алгоритму (обычно, DES или MD5) пароль.
3 Количество дней между 01.01.1970 (началом эры UNIX) и днем последнего изменения пароля.
4 Минимальное количество дней между изменениями пароля.
5 Срок действия пароля пользователя.
6 За сколько дней система будет начинать предупреждать пользователя о необходимости изменения пароля.
7 Сколько дней пользователь может не работать в системе, прежде чем его регистрационное имя будет заблокировано.
8 Дата, после которой имя пользователя нельзя будет использовать в системе.

Системные регистрационные имена

Каждая версия ОС UNIX резервирует несколько специальных регистрационных имен для предопределенных системных целей. Так, в UNIX SVR4 системными считаются регистрационные имена, соответствующие идентификаторам от 0 до 100. Наиболее часто резервируются регистрационные имена, представленные в табл. 4.

Таблица 4. Системные регистрационные имена в ОС UNIX SVR4

Регистрационное имя Назначение
root Регистрационное имя суперпользователя, администратора системы, соответствующее идентификатору 0. Единственное имя, обязательно имеющееся в любой UNIX-системе. Пользователь root не связан никакими ограничениями по доступу. Для выполнения большинства программ администрирования используется регистрационное имя root, обеспечивающее гарантированный доступ к необходимым ресурсам.
daemon Владелец процессов, реализующих пользовательские службы.
sys Владелец выполняемых пользовательских системных команд UNIX (часто соответствует идентификатору 0).
bin Владелец стандартных пользовательских утилит UNIX (часто соответствует идентификатору 0).
adm Псевдопользователь, владеющий файлами системы журнализации.
cron Псевдопользователь, владеющий соответствующими файлами, от имени которого выполняются процессы подсистемы запуска программ по расписанию.
news Псевдопользователь, от имени которого выполняются процессы системы телеконференций (дискуссионных групп или групп новостей).
nobody Псевдопользователь, используемый при работе сетевой файловой системы NFS.
uucp Псевдопользователь подсистемы UUCP, позволяющий передавать почтовые сообщения и файлы между UNIX-хостами.
lp, lpd Псевдопользователь, от имени которого выполняются процессы системы печати, владеющий соответствующими файлами.

Точно так же задаются и системные группы в файле /etc/group. В SVR4 зарезервированными считаются имена групп с идентификаторами от 0 до 100.

Изменение действующего идентификатора пользователя

Команда su предназначена для временного изменения действующего (эффективного) идентификатора пользователя и сеанса пользователя. Она имеет следующий синтаксис:

su [-] [регистрационное_имя [аргументы ...]

Команда su запрашивает пароль (у всех пользователей, кроме root, и если пароль существует). В случае соответствия пароля создается новый сеанс от имени нового пользователя. В следующем примере сохраняется среда пользователя с именем user01, включая текущий рабочий каталог и переменные среды:

$ logname
user01
$ su informix
Password:
$ logname
user01
$ echo $LOGNAME
user01
$ set
HOME=/home/user01
LOGNAME=user01
MAIL=/var/mail/user01
PWD=/home/user01
...
$ exit
$

Если введена команда su - регистрационное_имя, то система предоставляет пользователю командный интерпретатор и среду в соответствии с указанным регистрационным именем:

$ logname
user01
$ su - informix
Password:
$ logname
user01
$ echo $LOGNAME
informix
$ set
HOME=/home3/informix
LOGNAME=informix
MAILPATH=/usr/mail/informix
PWD=/home3/informix
...
$ exit
$

Команда в формате su регистрационное_имя -c аргументы воспринимает аргумент как команду, которую необходимо выполнить с регистрационным именем нового пользователя. Для выполнения команды запрашивается пароль нового пользователя и используются его права доступа. После завершения выполнения происходит возврат в среду пользователя, вызвавшего команду su. Таким образом, если пользователю, например, надо удалить файл пользователя с регистрационным именем new_user, необходимо выполнить команду:

$ su new_user -c "rm file"
Password:
$

Команда su без указания регистрационного имени позволяет получить права пользователя root. При этом необходимо знать и правильно ввести пароль пользователя root. Если пользователь работает под регистрационным именем root, вводить пароль при изменении действующего идентификатора не нужно.

Изменение действующего идентификатора группы

Сразу после регистрации пользователь работает от имени основной группы (задана в файле /etc/passwd). Кроме основной, пользователь может принадлежать к любому количеству дополнительных групп. Эти группы задаются путем указания регистрационного имени в четвертом поле строки в файле /etc/group, описывающей дополнительную группу. Членство в дополнительных группах либо учитывается при определении прав доступа автоматически (BSD-системы), либо для перехода в дополнительную группу и изменения тем самым действующего идентификатора группы используется команда newgrp (SVR4) со следующим синтаксисом:

/usr/bin/newgrp [ группа ]

Команда newgrp встроена в некоторые командные интерпретаторы (sh, ksh).

Команда newgrp переводит пользователя в новую группу путем запуска нового командного интерпретатора с реальным и эффективным идентификатором (GID) новой группы. При этом новый командный интерпретатор запускается даже если переход в группу завершился ошибкой (например, указана несуществующая группа). Естественно, в новом командном интерпретаторе будут иметь нестандартные и непустые значения только переменные, экспортированные в среду.

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

Если во втором поле записи соответствующей группы в файле /etc/group указан пароль (т.е. если это поле не пустое) и пользователь не указан в четвертом поле как член группы, при переходе в группу у пользователя запрашивается пароль. Единственный способ создать пароль группы - воспользоваться командой passwd для задания пароля одной из учетных записей пользователей, а затем скопировать зашифрованный пароль из файла /etc/shadow в файл /etc/group. Пароли групп сейчас используют редко.

Изменение пароля и характеристик учетной записи, связанных с регистрацией

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

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

Команда passwd имеет следующий синтаксис:

passwd [регистрационное_имя]
passwd [-l|-d][-f][-x max][-n min][-w warn] регистрационное_имя
passwd -s [-a]
passwd -s [регистрационное_имя]

Опции команды представлены в табл. 5. Обычные пользователи могут использовать только опцию -s.

Таблица 5. Опции команды passwd

Опция Назначение
-s Показывает атрибуты пароля для регистрационного_имени пользователя. Любой пользователь может задавать данную опцию.
-l Блокирует запись пароля для регистрационного_имени.
-d Удаляет пароль для регистрационного_имени, так что у пользователя с этим регистрационным_именем пароль не запрашивается.
-f Заставляет пользователя изменить пароль при следующей регистрации в системе, делая пароль для регистрационного_имени устаревшим.
-x max Задает для пользователя с указанным регистрационным_именем количество дней, в течение которых пароль будет действителен.
-n min Задает минимальное количество дней между изменениями пароля для пользователя с указанным регистрационным_именем. Всегда используйте эту опцию с опцией -x, если только max не установлен в -1 (устаревание отключено). В этом случае, min устанавливать не нужно.
-w warn Задает, за сколько дней (относительно max) пользователя с данным регистрационным_именем будут предупреждать о предстоящем устаревании пароля.
-s -a Показывает атрибуты паролей для всех пользователей.

Правила построения паролей

При создании паролей обычно необходимо выполнять следующие требования:

  • Пароль должен содержать не менее PASSLENGTH символов, как определено в файле /etc/default/passwd. Значение PASSLENGTH должно быть не менее 3. Учитываются только первые восемь символов пароля.
  • Пароль должен содержать не менее двух буквенных символов и одной цифры или специального символа. (В данном случае к буквенным символам относятся все прописные и строчные буквы.)
  • Пароль должен отличаться от регистрационного имени пользователя и от любого слова, получаемого циклическим (circular shift) или обратным (reverse shift) сдвигом этого регистрационного имени. (Соответствующие прописные и строчные буквы считаются совпадающими.)

Эти требования не распространяются на пользователя root.

Действие команды passwd

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

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

Устаревание паролей

Пароли действительны в течение ограниченных периодов времени (определяемых системным администратором), после чего их необходимо изменить. Поэтому необходимо хранить информацию о периоде активности для каждого пароля. Когда приближается дата истечения срока действия пароля, его владельцу предлагается выбрать новый пароль в течение определенного количества ближайших дней. Процесс отслеживания сроков действия паролей и уведомления пользователей о необходимости сменить пароль называется устареванием паролей (password aging).

Информация о паролях всех пользователей системы хранится в файле /etc/shadow, который могут читать только привилегированные пользователи. Каждая строка пользователя в файле /etc/shadow содержит четыре параметра, определяющих устаревание пароля (поля 3-6, см. табл. 3). Последние три из этих параметров можно установить опциями командной строки -n, -x и -w, соответственно. При отсутствии опций, их значения берутся из файла /etc/default/passwd.

Показ атрибутов пароля

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

login_name status lastchanged minimum maximum warn

или, если отсутствует информация, связанная с устареванием пароля,

login_name status

Поля определены следующим образом:

login_name

Регистрационное имя пользователя.

status

Статус пароля для регистрационного_имени: PS означает наличие пароля, LK означает, что регистрация заблокирована, а NP означает отсутствие пароля.

Стандартные значения атрибутов

Присваивая значения набору параметров в файле /etc/default/passwd, администратор может управлять устареванием и длиной паролей. Можно задать следующие параметры:

MINWEEKS

Минимальное количество недель перед тем, как пароль можно будет изменить. Сразу после установки системы этот параметр имеет значение 0.

MAXWEEKS

Максимальное количество недель, в течение которых пароль можно не изменять. Сразу после установки системы этот параметр имеет значение 24.

WARNWEEKS

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

PASSLENGTH

Минимальное количество символов в пароле. Сразу после установки системы этот параметр имеет значение 6.

Обратите внимание, что аргументы опций команды passwd (min, max и warn), а также соответствующие поля файла /etc/shadow задают параметры устаревания в днях; тогда как соответствующие поля файла /etc/default/passwd (MINWEEKS, MAXWEEKS и WARNWEEKS) - в неделях.

Просмотр базы данных учетных записей

Для просмотра базы данных учетных записей системы предназначена команда logins. Команда logins выдает информацию о пользовательских и системных регистрационных именах. Содержание выдаваемой информации управляется опциями команды и может включать: регистрационное имя, идентификатор пользователя, описание учетной записи в файле /etc/passwd (реальное имя пользователя или другая информация), имя основной группы, идентификатор основной группы, имена групп, идентификаторы групп, начальный каталог, начальный командный интерпретатор и четыре параметра устаревания пароля.

По умолчанию выдается следующая информация: регистрационное имя, идентификатор пользователя, имя основной группы, идентификатор основной группы и поле описания учетной записи в файле /etc/passwd. Результат сортируется по идентификатору пользователя, в результате чего сначала идут системные регистрационные имена, а затем - пользовательские.

Команда logins имеет следующий синтаксис:

logins [-dmopstuxa] [-g группы] [-l рег_имена]

Действие опций команды logins представлено в табл. 6.

Таблица 6. Опции команды logins

Опция Назначение
-d Выбирает регистрационные имена с дублирующимися идентификаторами пользователя.
-m Показывает все группы, к которым принадлежит пользователь.
-o Форматирует вывод в виде одной строки полей, разделенных двоеточиями.
-p Выбирает регистрационные имена без паролей.
-s Выбирает все системные регистрационные имена.
-t Сортирует результат по регистрационному имени, а не по идентификатору пользователя.
-u Выбирает все пользовательские регистрационные имена.
-x Выдает расширенную информацию о каждом выбранном пользователе. Эта расширенная информация включает начальный каталог, начальный командный интерпретатор и информацию об устаревании паролей, причем каждый элемент выдается в отдельной строке. Информация о пароле содержит статус пароля (PS при наличии пароля, NP при отсутствии пароля или LK для заблокированного регистрационного имени), дату последнего изменения пароля, количество дней, через которое потребуется изменить пароль, минимальное количество дней между изменениями и за сколько дней пользователь начнет получать (при регистрации) предупреждающее сообщение об устаревании пароля.
-a Добавляет к результату два поля, связанных с устареванием пароля. Они показывают, сколько дней пароль можно не использовать, перед тем как он автоматически деактивируется, и дату устаревания пароля.
-g Выбирает всех пользователей, принадлежащих указанной группе, сортируя список по идентификатору пользователя. Можно указывать несколько групп в виде списка через запятую.
-l Выбирает указанное регистрационное имя. Можно указывать несколько регистрационных имен в виде списка через запятую.

При совместном использовании нескольких опций будут показаны учетные записи, удовлетворяющие любому из критериев. При совместном использовании опций -l и -g информация о пользователе будет выдаваться один раз, даже если он принадлежит к нескольким указанным группам.

Получение списка зарегистрировавшихся пользователей

Для получения списка пользователей, работающих сейчас в системе, используется команда who со следующим синтаксисом:

/usr/bin/who [ -abdHlmpqrstTu ] [ файл ]
/usr/bin/who -q [ -n x ] [ файл ]
/usr/bin/who am i

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

Утилита who выдает имя пользователя, терминал, время регистрации, время, прошедшее после последней выполненной команды, а также идентификатор процесса командного интерпретатора. Для получения этой информации она просматривает файл /var/adm/utmp. Если указан файл (который должен иметь формат utmp(4)), информация берется из него.

В общем случае, результат имеет следующий вид:

имя [состояние] терминал время [ожидание] [pid] [комментарий] [статус выхода]

где:

имя

регистрационное имя пользователя

состояние

возможность записи на терминал

терминал

имя терминала из каталога /dev

время

время регистрации пользователя

ожидание

время, прошедшее после последнего действия пользователя

pid

идентификатор процесса командного интерпретатора

комментарий

строка комментария из файла /etc/inittab (SVR4)

статус выхода

статус возврата для "мертвых" процессов

Опции команды who представлены в табл. 7.

Таблица 7. Опции команды who

Опция Назначение
-a Обрабатывает /var/adm/utmp или указанный файл с опциями -b, -d, -l, -p, -r, -t, -T и -u.
-b Выдает дату и время последней перезагрузки.
-d Выдает все процессы, прекращенные и не перезапущенные процессом init. Для "мертвых" процессов будет выдано поле статуса выхода. Это может пригодиться для выяснения причины прекращения процесса. Только для SVR4.
-H Выдает заголовки столбцов.
-l Выдает только терминалы, на которых система ожидает регистрации пользователей. В качестве имени для них выдается LOGIN. Остальные поля - такие же, как и для пользователей, но поле состояния не выводится.
-m Выдает информацию только о текущем терминале.
-n x Выдает по x пользователей в строке. Значение x должно быть не менее 1. Опция -n может использоваться только с опцией -q.
-p Выдает информацию об активных процессах, запущенных ранее процессом init. В поле имени выдается имя программы, запущенной процессом init в соответствии с файлом /sbin/inittab. Поля состояния, терминала и ожидания в этом случае не имеют смысла. Поле комментария показывает идентфикатор строки из файла /sbin/inittab, запустившей этот процесс. Только для SVR4.
-q (quick who) Выдает только имена и количество зарегистрированных пользователей. Если задана эта опция, другие опции игнорируются.
-r Показывает текущий уровень выполнения процесса init. Только для SVR4.
-s Выдает только поля имени, терминала и времени регистрации. Используется по умолчанию.
-T То же, что и опция -s, но также выдаются поля состояния, времени ожидания, pid и комментарий. В поле состояния выдается один из следующих символов:
+ терминал разрешает запись другим пользователям;
- терминал запрещает запись другим пользователям;
? возможность записи на терминал не определена.

Рассмотрим примеры выполнения команды who в ОС Solaris 8:

[kravchuk@arturo 09:40:03 /]$ who -a | more
   .       system boot  Фев 23 15:39
   .       run-level 3  Фев 23 15:39     3      0  S
rc2             .       Фев 23 15:41  old      84  id=  s2 term=0   exit=0
root     + console      Фев 27 21:34  0:28   4612       (:0)
rc3             .       Фев 23 15:41  old     359  id=  s3 term=0   exit=0
sac             .       Фев 23 15:41  old     411  id=  sc
LOGIN      console      Фев 23 15:41  0:28    428
panaslog        .       Фев 23 15:41  old     413  id=  e1
netwatch        .       Фев 25 12:02  old     415  id=  up term=15  exit=0
zsmon           .       Фев 23 15:41  old     423
informix + pts/1        Мар 25 10:13 15:21   1796       (khomjak.profix.com)
eugene   + pts/3        Мар 22 18:23 15:24  23392       (khomjak.profix.com)
serj     + pts/4        Мар 18 10:41  old   13278       (sysadm.profix.com)
serj     + pts/15       Мар 25 11:32 14:51   3004       (sysadm.profix.com)
kravchuk + pts/14       Мар 26 09:39   .    11615       (creator.profix.com)
slavik   + pts/2        Мар 21 14:18 16:13  14526       (slavik.profix.com)
informix + pts/17       Мар 21 13:19 17:50  14012       (bachin.profix.com)
informix   pts/6        Мар 25 18:34 15:05   3572  id=t800 term=0   exit=0
(lyapota.profix.com)
lyapota    pts/7        Мар 25 18:34 17:58   3577  id=t900 term=0   exit=0
(lyapota.profix.com)
informix + pts/5        Мар  5 14:48 15:33  27664       (slavik.profix.com)
kravchuk   pts/8        Мар 25 18:24 15:15   8916  id=tB00 term=0   exit=0
--More--

В простейшем случае программа who вызывается без параметров:

[kravchuk@arturo 09:45:35 /]$ who
root       console      Фев 27 21:34    (:0)
informix   pts/1        Мар 25 10:13    (khomjak.profix.com)
eugene     pts/3        Мар 22 18:23    (khomjak.profix.com)
serj       pts/4        Мар 18 10:41    (sysadm.profix.com)
serj       pts/15       Мар 25 11:32    (sysadm.profix.com)
kravchuk   pts/14       Мар 26 09:39    (creator.profix.com)
slavik     pts/2        Мар 21 14:18    (slavik.profix.com)
informix   pts/17       Мар 21 13:19    (bachin.profix.com)
informix   pts/5        Мар  5 14:48    (slavik.profix.com)
root       pts/13       Фев 27 21:35    (:0.0)
root       pts/16       Мар 25 17:24    (:0.0)

Наконец, вот как используется команда who для самоидентификации:

[kravchuk@arturo 09:45:38 /]$ who am i
kravchuk   pts/14       Мар 26 09:39    (creator.profix.com)

Средства создания, изменения и удаления учетных записей пользователей

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

Для создания, изменения и удаления учетных записей все версии ОС UNIX предлагают три команды, useradd, usermod и userdel, соответственно. Они в большинстве систем имеют следующий синтаксис:

useradd [-u идентификатор [-o] [-i]] [-g группа]
   [-G группа[[,группа]...]] [-d каталог] [-s shell]
   [-c комментарий] [-m [-k skel_dir]] [-f inactive]
   [-e expire] рег_имя

usermod [-u идентификатор [-o]] [-g группа]
   [-G группа[[,группа]...]] [-d каталог [-m]]
   [-s shell] [-c комментарий] [-l новое_рег_имя]
   [-f inactive] [-e expire] рег_имя

userdel [-r] рег_имя

Эти команды позволяют выполнить только согласованные и допустимые изменения в файлах /etc/passwd, /etc/shadow и /etc/group. Команды управления учетными записями, в общем случае, может выполнять только пользователь root. Основные опции команд управления учетными записями представлены в табл. 8.

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

Опция Назначение
-u идентификатор Идентификатор пользователя (UID). Должен быть неотрицательным целым числом, не превосходящим MAXUID, определенный в sys/param.h. По умолчанию используется следующий доступный (уникальный) не устаревший UID в диапазоне пользовательских идентификаторов.
-o Эта опция позволяет продублировать UID (сделать его не уникальным). Поскольку защита системы в целом, а также целостность контрольного журнала (audit trail) и регистрационной информации (accounting information) в частности, зависит от однозначного соответствия каждого UID определенному физическому лицу, использовать эту опцию не рекомендуется.
-i Позволяет использовать устаревший идентификатор UID.
-g группа Целочисленный идентификатор или символьное имя существующей группы. Эта опция задает основную группу (primary group) для нового пользователя. По умолчанию в SVR4 используется стандартная группа, указанная в файле /etc/default/useradd. В ОС FreeBSD и Linux обычно принято по умолчанию создавать для каждого пользователя отдельную приватную основную группу, имя которой совпадает с именем пользователя.
-G группа[[,группа] ...] Один или несколько элементов в списке через запятую, каждый из которых представляет собой целочисленный идентификатор или символьное имя существующей группы. Этот список определяет принадлежность к дополнительным группам (supplementary group membership) для пользователя. Повторения игнорируются. Количество элементов в списке не должно превосходить NGROUPS_MAX-1, поскольку общее количество дополнительных групп для пользователя плюс основная группа не должно превосходить NGROUPS_MAX.
-d каталог Начальный каталог (home directory) нового пользователя. Длина этого поля не должна превосходить определенного предела (обычно - от 256 до 1024 символов). По умолчанию используется HOMEDIR/рег_имя, где HOMEDIR - базовый каталог для начальных каталогов новых пользователей, а рег_имя - регистрационное имя нового пользователя.
-s shell Полный путь к программе, используемой в качестве начального командного интерпретатора для пользователя сразу после регистрации. Длина этого поля не должна превосходить определенного предела (обычно - от 256 до 1024 символов). По умолчанию в этом поле используется стандартный командный интерпретатор /bin/sh. В качестве значения shell должен быть указан существующий выполняемый файл. В противном случае, пользователь не сможет зарегистрироваться в системе.
-c комментарий Любая текстовая строка. Обычно, это краткое описание регистрационного имени, например, фамилия и имя реального пользователя. Эта информация хранится в записи пользователя в файле /etc/passwd. Длина этого поля не должна превосходить 128 символов.
-m Создает начальный каталог нового пользователя, если он еще не существует. Если каталог уже существует, добавляемый пользователь должен иметь права на доступ к указанному каталогу.
-k skel_dir Копирует содержимое скелетного каталога skel_dir в начальный каталог нового пользователя, вместо содержимого стандартного скелетного каталога, /etc/skel. Каталог skel_dir должен существовать. Стандартный скелетный каталог содержит стандартные файлы, определяющие среду работы пользователя. Заданный администратором каталог skel_dir может содержать аналогичные файлы и каталоги, созданные для определенной цели.
-f inactive Максимально допустимое количество дней между регистрациями, когда это имя еще не объявляется недействительным. Обычно в качестве значений используются положительные целые числа.
-e expire Дата, начиная с которой регистрационное имя больше нельзя будет использовать; после этой даты никакой пользователь не сможет получить доступ под этим регистрационным именем. (Эта опция удобна при создании временных регистрационных имен.) Вводить значение аргумента expire (представляющего собой дату) можно в любом поддерживаемом локалью формате (кроме Julian date). Например, можно ввести 10/6/99 или October 6, 1999.
-l новое_рег_имя Строка печатных символов, задающая новое регистрационное имя для пользователя. Она не должна содержать двоеточий (:) и переводов строк (\n). Кроме того, она не должна начинаться с прописной буквы.
-r При удалении учетной записи удалить начальный каталог пользователя из системы. Этот каталог должен существовать. После успешного выполнения команды файлы и подкаталоги в начальном каталоге будут недоступны.
рег_имя Строка печатных символов, задающая регистрационное имя для нового пользователя. В ней не должно быть двоеточий (:) и символов перевода строки (\n). Она также не должна начинаться с прописной буквы.

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

Рассмотрим ряд простых примеров управления учетными записями:

# useradd -с "Student 1" -d /home/user01 -g ixusers -m -s /bin/bash user01
# usermod -с "Student 1 of UNIX Course" -G others -s /bin/ksh user01
# userdel -r user01

Средства создания, изменения и удаления групп

Для создания, изменения и удаления групп все версии ОС UNIX предлагают три команды, groupadd, groupmod и groupdel, соответственно. Они имеют следующий синтаксис:

groupadd [-g идентификатор [-o]] группа
groupmod [-g идентификатор [-o]] [-n имя] группа
groupdel группа

Эти команды позволяют выполнить только согласованные и допустимые изменения в файле /etc/group. Команды управления группами, в общем случае, может выполнять только пользователь root. Опции и операнды команд управления группами представлены в табл. 9.

Таблица 9. Опции команд управления группами

Опция Назначение
-g идентификатор Идентификатор новой группы (GID). Этот идентификатор группы должен быть неотрицательным десятеричным целым числом, не превышающим значения MAXUID, определенного в заголовочном файле <param.h>. По умолчанию выделяется уникальный идентификатор группы, не относящийся к зарезервированным. В UNIX SVR4 идентификаторы групп в диапазоне 0-100 зарезервированы.
-o Эта опция позволяет задавать дублирующийся (не уникальный) идентификатор группы.
-n имя Строка печатных символов, задающая новое имя для группы при изменении. Строка не должна содержать двоеточия (:) или переводы строк (\n).
группа Имя создаваемой, изменяемой или удаляемой группы. Имя группы не должно содержать символы двоеточия (:) или перевода строки (\n).

Учтите, что при удалении группы просто удаляется строка из файла /etc/group. Никакие изменения в файловой системе и в учетных записях пользователей команды groupmod и groupdel не производят. Соответствующие действия по согласованию, при необходимости, должен выполнять системный администратор - пользователь root.

Рассмотрим ряд простых примеров управления группами:

# groupadd -g 101 informix
# groupmod -g 102 -o -n ixusers informix
# groupdel ixusers