Назад Содержание Вперед
Введение в POSIX'ивизм
(C) Алексей Федорчук, 2005
Опубликовано на сайте
LinuxCenter
Интермедия: средства управления акаунтами
Разговор о пользовательских акаунта логично завершить описанием средств управления ими, позволяющими создавать учетные записи, объединять их в группы, изменять атрибуты и так далее. Однако разговор на эту тему требует знаний об атрибутах процессов, описанных в главе 7, атрибутах файлов, рассмотренных в главе 8, а представления о принципах работы в командной строке, составляющих предмет главы 12. Которые и рекомендуется предварительно прочитать совсем начинающему пользователю.
Средства для управления акаунтами несколько отличаются в Linux и в BSD-системах. Причем BSD-утилиты администрирования пользователей и групп являются существенно более мощными, разнообразными, удобными и универсальными, почему и сконцентрируем на них основное внимание, делая соответствующие оговорки относительно аналогичных по назначению средств Linux.
Начнем с создания пользователей. Самое простое на сей предмет средство - команда adduser
, тем более, что утилита с этим именем имеется во всех POSIX-системах, по крайней мере открытых. Для создания единичного акаунта ее можно запустить без опций:
$ adduser
В ответ она в диалоговом режиме последовательно запросит следующую информацию:
- Username - имя пользователя, требуется задать обязательно;
- Full name - теоретически имя и фамилия пользователя, его можно оставить пустым или ввести произвольную информацию, которая составит значение поля комментария в базе данных пользователей;
- Uid - идентификатор пользователя; если это поле оставить пустым, то он автоматически примет ближайшее свободное значение (для первого пользователя в системе - 1001);
- Login group - основная группа пользователя, по умолчанию - собственная, совпадающая с его именем;
- Login group is group_name. Invite exp into other groups? [] - включить ли пользователя в другие группы; если предполагается его доступ к полномочиям администратора, то здесь следует указать группу
wheel
;
- Login class [default] - очень важный атрибут (см. следующую интермедию); в наших условиях лучше всего задать класс
russian
;
- Shell (sh csh tcsh) [sh] - пользовательская оболочка; предлагаемый по умолчанию вариант (
sh
) - отнюдь не лучший, о чем подробнее я скажу чуть позже;
- Home directory [/home/username] - имя домашнего каталога пользователя;
- Use password-based authentication? [yes] - использовать ли авторизацию по паролю;
- Use an empty password? (yes/no) [no] - использование пустого пароля (по нажатию клавиши Enter);
- Use a random password? (yes/no) [no] - генерация произвольного пароля;
- Enter password - ввод пароля;
- Enter password again - и его повторение;
- Lock out the account after creation? [no] - закрыть ли доступ к акаунту после его создания.
После честного и откровенного ответа на все поставленные вопросы будет выведено сообщение такого рода:
Username : exp
Password : *****
Full Name :
Uid : 1002
Class : russian
Groups : exp
Home : /home/exp
Shell : /bin/sh
Locked : no
OK? (yes/no):
Если с этим согласиться. последует сообщение об успехе процедуры и предложение создать еще один Акаунт:
adduser: INFO: Successfully added (exp) to the user database.
Add another user? (yes/no):
Однако, если планируется создание серии однотипных учетных записей, целесообразно сначала выполнить настройку команды adduser
, для чего ее следует запустить таким образом:
$ adduser -C
После чего последуют запросы о некоторых общих атрибутах, которые будут в дальнейшем распространяться по умолчанию на все создаваемые учетные записи. А именно:
- Login group - здесь можно задать общую группу для всех пользователей, например,
users
(сама группа должна быть создана предварительно, как - см. ниже);
- Enter additional groups -список дополнительных групп, к которым будут приписаны все вновь создаваемые пользователи (например,
wheel operator
);
- Login class - класс пользователей по умолчанию, взамен
defaults
; как я уже говорил, в качестве такового в наших условиях целесообразно определить russian
;
- Shell (sh csh tcsh) - командная оболочка (login shell) по умолчанию; если вы предпочитаете пользоваться каким-либо шеллом, здесь не указанным (например, zsh), его также можно указать здесь, внеся предварительно имя и полный путь к нему в файл
/etc/shells
;
- Home directory - если планируется использование домашних каталогов, отличных от умолчальных
/home/username
;
- Use password-based authentication? и прочие - общие условия парольного доступа;
- умолчальное согласие с введенными данными и (или) их правка.
Определенные таким образом общие атрибуты сохраняются в файле /etc/adduser.conf
и введенные нами ответы на их запрос в дальнейшем будут предлагаться по умолчанию.
К сказанному остается добавить только, что команда adduser
автоматически сама проверяет имя и идентификаторы пользователя на предмет уникальности, предлагая для последних подходящие значения (обычно - следующие по порядку за ID предыдущего зарегистрированного пользователя), создает домашний каталог пользователя и копирует туда "скелеты" конфигурационных файлов (они берутся из файлов каталога /etc/skel
- по умолчанию он пуст, и созданием соответствующих "скелетов" следует озаботиться самому), после чего делает соответствующие записи в базах данных пользователей - файлах /etc/passwd
, /etc/master.passwd
, /etc/group
и /etc/master.group
.
Кроме диалогового режима, команда adduser
имеет и режим чисто командный, когда все пользовательские атрибуты задаются опциями командной строки. Ознакомиться с ними можно на странице документации -
$ man 8 adduser
Команда adduser
(или useradd
) имеется и в Linux, однако там возможности ее несколько меньше. В частности, она не создает автоматически домашний каталог пользователя - это следует сделать вручную командой
$ mkdir /home/username
Да еще и позаботиться о установке его принадлежности пользователю и группе:
$ chown -R username /home/username && \
chgroup -R users /home/username
Впрочем, это можно сделать и в один прием:
$ chown -R username:users /home/username
Использование adduser
- наиболее автоматизированный, но и наименее гибкий способ управления учетными записями. Основное его назначение - создание либо единичного акаунта, либо многочисленных учетных записей со сходными атрибутами и профильными файлами пользователей, "скелеты" которых заблаговременно создаются в каталоге /etc/skel
.
Другая крайность - внесение всех данных пользователя в файл
/etc/master.passwd
вручную (в текстовом редакторе) и дальнейший запуск команды pwd_mkdb
, которая в форме
$ pwd_mkdb -p /etc/master.passwd
внесет соответствующие изменения в остальные три файла, имеющие отношение к акаунтами. При этом поле пароля следует оставить пустым, поскольку любой набор символов в нем развертыванию в реальный пароль не поддается. И в дальнейшем не забыть определить пароль специальной командой passwd
. Кроме того, в реально многопользовательской (то есть не настольной) системе следует быть уверенным, что никто другой в этот же момент времени не занимается изменением учетных записей - иначе трудно предсказать, чьи модификации возымеют силу. А заниматься этим может не только другой администратор системы, но и пользователь, изменяющий свой пароль или командную оболочку.
Далее, существует программа vipw
, совмещающая оба процесса: вызов текстового редактора для внесения вручную изменений в файл /etc/master.passwd
, а по выходе из него - модификацию баз пользовательских записей командой pwd_mkdb
. В качестве редактора используется значение переменной EDITOR
в профильном файле администратора. Если такового нет - вызывается классический редактор всех Unix-систем - vi
(откуда и название программы).
Наконец, самое мощное средство для управления учетными записями пользователей вообще - команда pw
. Это - специфичная для BSD-систем, универсальная утилита администрирования учетных записей пользователей и групп - их создания, изменения и удаления юзеров и групп. Для создания нового пользователя ее проще всего запустить в автоматическом режиме - в форме
$ pw useradd username
после чего она сама подберет подходящие (то есть ближайшие по порядку свободные) идентификаторы пользователя и группы, поля общих сведений, домашнего каталога и командной оболочки заполнит некими значениями по умолчанию (User ID, /home/username
, /bin/sh
, соответственно), прочие же оставит пустыми. Сам домашний каталог она тоже не создаст - для этого она потребует формы
$ pw useradd username -m
во исполнение которой заодно будут скопированы и "скелетные" файлы.
Кроме этого, команда pw
может создавать учетную запись пользователя с заранее предопределенными атрибутами, описанными в файле /etc/pw.conf
. Правда, для этого такой файл необходимо предварительно создать - командой
$ pw useradd -D
В первозданном виде он будет содержать все те же сведения по умолчанию. Однако его легко отредактировать в текстовом редакторе для внесения всех необходимых данных, которые отныне и будут выступать в качестве "умолчальных" для команды pw. К слову сказать (и это - очень ценное свойство данной команды) - учетные записи ранее созданных пользователей могут быть приведены в соответствие с новой их "скелетной" схемой с помощью команды
$pw useradd -D username
Ничто не мешает и задать несколько таких конфигурационных файлов
(например, /etc/pw1.conf
, /etc/pw2.conf
и т.д.) для создания учетных записей пользователей разных категорий (например реальных или виртуальных, или пользователей с различными значениями атрибута class
). Приведение конкретной учетной записи к какой-либо из принятых схем после этого можно выполнить командой
$ pw adduser username -C /etc/pw1.conf
она создает учетную запись нового пользователя с именем newuser и его домашним каталогом /home/newuser
, в который копируются конфигурационные файлы командной оболочки. Файлы, подлежащие копированию, определяются содержимым каталога /etc/skel
и могут быть отредактированы администратором в текстовом редакторе.
Некоторые атрибуты учетной записи пользователя, будучи раз созданными, могут быть изменены в дальнейшем, причем некоторые - и самим пользователем (не только root-оператором). Наиболее часто такая необходимость возникает в отношении пароля. Во-первых, как уже было сказано, не всегда он задается при
создании учетной записи. Во-вторых, менять пароль время от времени рекомендуется и из соображений безопасности.
Для смены пароля предназначена команда passwd
, общая для всех POSIX-систем. Запущенная от лица обычного пользователя без параметров и аргументов, она запросит для начала старый его пароль (если такового не было, этот шаг, естественно, пропускается), затем - новый пароль и его повторение (во избежание ошибки ввода).
Администратор системы с помощью команды
$ passwd username
может поменять пароль любого пользователя. старый пароль его при этом не запрашивается - да, в общем случае, администратор его и не знает (и восстановить из базы пользовательских записей простым способом не может).
Далее, пользователь может изменить еще два атрибута - общие сведения о себе (то есть поле комментария) и командную оболочку. Для этого он вправе использовать команду chpass
, которая вызовет в текстовом редакторе (определенном переменной EDITOR профильного файла пользователя, за отсутствием таковой - в редакторе vi
) следующие поддающиеся изменению сведения:
#Changing user database information for alv.
Shell: /bin/csh
Full Name: Alex Fedorchuk
Office Location:
Office Phone:
Home Phone:
Other information:
По завершении их модификации и выходе из редактора внесенные изменения будут зафиксированы в базах данных автоматически. Нетрудно догадаться, что для этого команда chpass
должна иметь упоминавшийся в главе 8 атрибут "суидности", в чем можно убедиться посредством:
$ ls -l /usr/bin/chpass
-r-sr-xr-x 6 root wheel 32324 Jan 28 16:12 /usr/bin/chpass
Кроме этого, для изменения командной оболочки пользователя во всех POSIX-системах служит команда chsh
, требующая опции -s
, значением которой служит полный путь к исполняемому файлу нового шелла, и аргумента - имени пользователя. Впрочем, если шелл изменяет сам пользователь, в последнем нет необходимости.
Другие изменения учетной записи требуют вмешательства администратора, который может обратиться к той же команде chpass
с указанием имени пользователя как аргумента:
$ chpass username
Login: alv
Password: lhBESi9NHbsrg
Uid [#]: 1000
Gid [# or name]: 1000
Change [month day year]:
Expire [month day year]:
Class: russian
Home directory: /home/alv
Shell: /bin/csh
Full Name: Alex Fedorchuk
Office Location:
Office Phone:
Home Phone:
Other information:
Можно видеть, что root-оператору предоставлено гораздо больше возможностей для изменения атрибутов акаунта. Что, прочем, не значит, что он может использовать их все. Так, изменение идентификатора пользователя эквивалентно созданию пользователя нового, а изменение имени просто поставит ему в соответствие тот же идентификатор. Ни то, ни другое не вызовет ничего, кроме путаницы. Идентификатор основной группы, вероятно, изменить можно, хотя трудно представить необходимость этого. Ну а о пароле уже говорилось достаточно.
Так что фактически из недоступных пользователю полей изменению подлежат только класс и временные атрибуты акаунта. Почему последние подведомственны администратору - понято. Отношение же к классу выведено из сферы компетенции пользователя, так как через его определение возможен очень широкий круг настроек, в том числе и связанных с разделением доступа, степенью безопасности, и т.д.
Теоретически, для изменения учетных записей в разных POSIX-системах применяются также команды chfn
и chsh
, но в BSD эти файлы - лишь иные имена для команды chpass
, и потому вызов любой из них автоматически влечет запуск последней.
Внести изменение в учетную запись можно и командой adduser
с
соответствующими опциями, например:
$ adduser -shell shell
для изменения командной оболочки,
$ adduser -class login_class
для изменения класса пользователя, и т.д. - список возможностей можно получить по команде
$ adduser --help
Кроме этого, для изменения учетных записей может применяться и универсальная команда pw
с параметром usermod
, именем пользователя и соответствующими (весьма многочисленными) опциями, с которыми можно ознакомиться посредством
$ man 8 pw
Удаление учетной записи пользователя, на первый взгляд, задача очень простая: достаточно удалить соответствующую строку из файла /etc/master.passwd
и запустить команду pwd_mkdb
для синхронизации изменений, точно также, как это делалось при создании акаунта. Или прибегнуть к программе vipw
, которая сделает это сама. Однако и в том, и в другом случае будут удалены только сами учетные записи, а пользовательские каталоги, почтовые ящики, временные файлы, результаты всякого рода протоколирования действий (log-файлы) благополучно сохраняться, причем будут рассеяны по ряду каталогов (кроме /home
, в основном, также по /tmp
и /var
). Кроме того, упоминания имени удаленного пользователя останутся в списках принадлежности к группам, конфигурационных файлах авторизации, систем доставки почты, почтовых и ftp-клиентов (и в иных местах). Что может создать проблемы, если в дальнейшем будет создан пользователь с тем же идентификатором и (или) именем.
Поэтому для бесследного истребления следов жизнедеятельности удаленного пользователя их следует сначала отыскать. Все принадлежащие ему файлы могут быть найдены командой find
:
$ find / -user username
А добавив в конец строки опцию -delete
(или перенаправив вывод по конвейеру команде rm
) - и немедленно уничтожить их. А для поиска упоминаний имени в конфигурационных файлах можно прибегнуть к команде grep
:
$ grep -e username /*
Однако ради чистоты исполнения в обоих случаях поиск должен проводиться, начиная с корневого каталога (о чем сигнализирует символ /
в аргументах обоих команд). И может занять немало времени.
Поэтому может оказаться целесообразным прибегнуть к команде rmuser
для автоматизации процесса. В форме
$ rmuser username
она удалит не только учетную запись из базы данных, но также и домашний каталог, почтовый ящик, имя в списках принадлежности групп (/etc/group
) и еще некоторых конфигурационных файлах.
И конечно, ту же работу в состоянии сделать и палочка-выручалочка администратора - команда pw
в форме
$ pw userdel username -r
Где следует обратить внимание на опцию -r
- без нее pw
удалит только пользовательскую запись из базы акаунтов.
Разумеется, существуют и средства для управления записями групп. Как уже говорилось, новая группа автоматически создается при заведении нового пользовательского акаунта. По умолчанию ее имя и численное значение идентификатора совпадают с именем и идентификатором пользователя. И для последнего эта группа в дальнейшем остается основной - то есть только о ней содержится информация в учетной записи пользователя.
Однако пользователь может принадлежать и к иным, дополнительным, группам: для этого его имя или идентификатор должен быть приписан к списку таких групп в файле /etc/group
. Это может сделать администратор в любом текстовом редакторе (никаких дальнейших действий по синхронизации изменений не потребуется).
В полномочиях root-оператора также и создание новых дополнительных групп - просто добавив строку по образу и подобию любой существующей, записав в последнее ее поле имена тех пользователей, которые должны быть ее членами. Тем же способом группа может быть и удалена.
И конечно, для управления группами можно применить универсальное средство - pw
. В форме
$ pw group add groupname
она создаст новую группу,
$ pw group del groupname
удалит существующую, а посредством
$ pw group mod groupname -m username1 username2
или
$pw group mod groupname -M username1 username2
дополнит или полностью перепишет списков членов группы, соответственно. Наконец, с помощью
$ pw usermod username -G groupname
можно приписать пользователя к указанной группе в индивидуальном порядке.
Назад Содержание Вперед