RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Команда su предназначена для временного изменения действующего (эффективного) идентификатора пользователя и сеанса пользователя. Она имеет следующий синтаксис:
su [-] [регистрационное_имя [аргументы ...]
Команда su запрашивает пароль (у всех пользователей, кроме root, и если пароль существует). В случае соответствия пароля создается новый сеанс от имени нового пользователя. В следующем примере сохраняется среда пользователя с именем user01, включая текущий рабочий каталог и переменные среды:
Если введена команда su - регистрационное_имя, то система предоставляет пользователю командный интерпретатор и среду в соответствии с указанным регистрационным именем:
Команда в формате 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.
Показывает атрибуты пароля для регистрационного_имени пользователя. Любой пользователь может задавать данную опцию.
-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 проверяет, удовлетворяет ли новый пароль описанным выше правилам построения. При вводе нового пароля второй раз, две копии нового пароля сравниваются. Если они не совпадают, цикл запроса нового пароля повторяется, но не более двух раз.
Пользователь root может изменять любой пароль; команда passwd не запрашивает у него старый пароль.
Пароли действительны в течение ограниченных периодов времени (определяемых системным администратором), после чего их необходимо изменить. Поэтому необходимо хранить информацию о периоде активности для каждого пароля. Когда приближается дата истечения срока действия пароля, его владельцу предлагается выбрать новый пароль в течение определенного количества ближайших дней. Процесс отслеживания сроков действия паролей и уведомления пользователей о необходимости сменить пароль называется устареванием паролей (password aging).
Информация о паролях всех пользователей системы хранится в файле /etc/shadow, который могут читать только привилегированные пользователи. Каждая строка пользователя в файле /etc/shadow содержит четыре параметра, определяющих устаревание пароля (поля 3-6, см. табл. 3). Последние три из этих параметров можно установить опциями командной строки -n, -x и -w, соответственно. При отсутствии опций, их значения берутся из файла /etc/default/passwd.
Присваивая значения набору параметров в файле /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.
Выбирает регистрационные имена с дублирующимися идентификаторами пользователя.
-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
время
время регистрации пользователя
ожидание
время, прошедшее после последнего действия пользователя
Обрабатывает /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)