4.1. Создание, изменение и удаление учётных записей

[*]4.1.1. Введение
[*]4.1.2. Добавление пользователя
[*]4.1.3. Изменение параметров пользовательской учётной записи
[*]4.1.4. Удаление учётной записи

Описание:  Важная часть системного администрования — манипулирование учётными записями. Кандидат BSDA должен быть знаком с различными утилитами для манипулирования учётными записями и уметь использовать их в соответствии с поставленными задачами.

Практика: vipw(8); pw(8), adduser(8), adduser.conf(5), useradd(8), userdel(8), rmuser(8), userinfo(8), usermod(8), и user(8)

Комментарий

[Замечание]Замечание
Данный текст прислан Дмитрием Орловым, но подвергся моей незначительной редактуре. Е.М.

После установки системы требуется перейти к задаче управления локальными пользователями системы. Даже в том случае, если вы единственный пользователь, системы семейства BSD настоятельно рекомендуют завести некоего пользователя и пользоваться привилегированным аккаунтом при помощи команды su(8), что предохранит вас от неожиданного разрушения собственной системы. Существует другая крайность, это создание множества пользователей с административными правами, что может привести как минимум к нестабильности системы, к ее вскрытию злоумышленниками или даже разрушению.

4.1.1. Введение

Можно выделить три основных типа учётных записей: суперпользователь, системные пользователи, и учётные записи пользователей. Учётная запись суперпользователя, обычно называемая root, используется для управления системой без ограничения привилегий. Системные пользователи запускают сервисы и, как правило, не могут входить (login) в систему. Учётные записи пользователей необходимы остальным для входа в систему, чтения почты, работы с документами, создания приложений и так далее.

С каждой учётной записью в системе *BSD связана определённая идентификационная информация:

Имя пользователя

Имя пользователя в том виде, в каком оно вводится в приглашение login:. Имена пользователей должны быть уникальны в пределах одного компьютера; не может быть двух пользователей с одинаковым именем пользователя. Существует множество правил для создания правильных имён пользователей, документированных в passwd(5); вы как правило будете использовать имена пользователей, состоящие из восьми или меньшего количества символов, все символы в нижнем регистре.

Вообще-то это не является какой-то догмой. Но некоторый софт расчитывает, что на имя пользователя наложены некоторые ограничения. Так, старые реализации системы NIS расчитывали, то имя пользователя состоит не более чем из восьми символов. В настоящий момент вы можете не соблюдать это ограничение. Почтовая система sendmail(8) при доставке почты переводит символы в нижний регистр. Поэтому пользователь в имени которого есть буквы из верхнего регистра будет лишён почты. Многие файловые форматы расчитывают на то, что в имени нет двоеточия и т.п. Если по каким-то причинам вы хотите, чтобы в имени были большие буквы, точки и т.п. Вам надо подумать над архитектурой програмного обеспечения. Например, если вы хотите, чтобы в вашем домене существовали электронные адреса типа Mikhail.Kutuzov@borodino.ru, вам слеует хранить почтовые аккаунты, например, в базе данных PostgreSQL, а не в виде учётных записей UNIX.

Пароль
С каждой учётной записью связан пароль. Пароль может быть пустым, в этом случае для доступа к системе не нужен пароль. Обычно это очень плохая идея; у каждой учётной записи должен быть пароль.
ID пользователя (User ID, UID)
The UID это номер, традиционно от 0 до 65535, используемый для однозначной идентификации пользователя в системе. Сама система *BSD для идентификации пользователей использует UID — любая команда *BSD, позволяющая вам указывать имя пользователя, первым делом преобразует его к UID. Это означает, что вы можете создать несколько учётных записей с различными именами пользователей, но с одним UID. *BSD будет воспринимать эти учётные записи как одного пользователя. Например, в системе FreeBSD имеются учётные записи root и toor с одинаковым UID=0. Вы можете заблокировать логин пользователя root, но при необходимости ходить в систему как toor и иметь при этом права суперпользователя. Это плохая идея с точки зрения безопасности, однако возможность такая есть. Кроме того, многие характеристики учётных записей, такие как оболочка, домашний каталог и даже почтовый spool, привязаны не к UID а именно к имени. Таким образом, имея альтернативные имена для одного пользователя вы можете иметь альтернативные пароли, оболочки и пр. при одинаковом наборе прав.
ID группы (Group ID, GID)
GID это номер, традиционно от 0 до 65535, используемый для однозначной идентификации главной группы, к которой принадлежит пользователь. Группы это механизм для контроля доступа к ресурсам на основе GID пользователя вместо его UID. Это может значительно уменьшить размер некоторых файлов настройки. Кроме того, пользователь может быть включен более чем в одну группу.
Класс логина
Классы логинов это расширение к механизму групп, позволяющее системе более гибко управлять различными пользователями. Например, ограничение использования ресурсов системы (login.conf(5), passwd(5), см. так же Приложение F, /etc/login.conf(5)).
Время изменения пароля
По умолчанию *BSD не принуждает пользователей периодически менять пароли. Вы можете включить эту функцию для определённых пользователей, заставив некоторых или всех пользователей менять пароли по прошествии некоторого времени.
Время истечения действия учетной записи
По умолчанию в *BSD время действия учётных записей не ограничено. Если вы создаёте учётные записи, продолжительность жизни которых ограничена, например учётные записи для студентов в школе, вы можете определить время истечения действия учётной записи. После наступления этого времени учётная запись не может использоваться для входа в систему, хотя каталоги и файлы этой учётной записи останутся нетронутыми.
Полное имя пользователя
Имя пользователя является уникальным идентификатором учётной записи в *BSD, но недостаточно для сопоставления с реальным именем пользователя. Спустя некоторое время после заведения учётной записи с именем vjhe56 вы уже не вспомните кто это такой. Реальное имя и другая информация может быть добавлена в виде так называемой GECOS information в базу учётных записей. Это необязательное действие.
Домашний каталог
Домашний каталог это полный путь к каталогу в системе, в котором пользователь начнёт работать после входа в систему. По общепринятому соглашению все домашние каталоги пользователей помещаются в /home/username. Пользователи хранят личные файлы в домашнем каталоге и в любых подкаталогах, создаваемых внутри домашнего каталога.
Оболочка пользователя
Оболочка необходима пользователям как средство взаимодействия с системой по умолчанию. Существует множество различных видов оболочек, опытные пользователи работают с собственными настройками, которые могут быть отражены в установках их учетных записей.

4.1.2. Добавление пользователя

Самый простой и интерактивный способ добавить нового пользователя, это использовать команду adduser(8) (нет в NetBSD). Пример использования adduser(8). (Скопировано из OpenBSD FAQ).

# adduser
Use option ``-silent'' if you don't want to see all warnings and questions.

Reading /etc/shells
Reading /etc/login.conf
Check /etc/master.passwd
Check /etc/group

Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username []: testuser
Enter full name []: Test FAQ User
Enter shell csh ksh nologin sh [sh]: ksh
Uid [1002]: Enter
Login group testuser [testuser]: guest
Login group is ``guest''. Invite testuser into other groups: guest no [no]: no
Login class auth-defaults auth-ftp-defaults daemon default staff [default]: <Enter>
Enter password []: <Набираете пароль и нажимаете Enter>
Enter password again []: <Набираете пароль и нажимаете Enter>

Name:        testuser
Password:    ****
Fullname:    Test FAQ User
Uid:         1002
Gid:         31 (guest)
Groups:      guest
Login Class: default
HOME:        /home/testuser
Shell:       /bin/ksh
OK? (y/n) [y]: y
Added user ``testuser''
Copy files from /etc/skel to /home/testuser
Add another user? (y/n) [y]: n
Goodbye!
        

Значения по умолчанию для adduser(8) можно создать в файле /etc/adduser.conf

# adduser -config_create
        

Вот пример файла /etc/adduser.conf:

# Конфигурационный файл для утилиты adduser(8).
# ЗАМЕЧАНИЕ: only *some* variables are saved.
# Последнее изменение Fri Mar 30 14:04:05 EST 2004.

defaultLgroup=
defaultclass=
defaultgroups=
passwdtype=yes
homeprefix=/home
defaultshell=/bin/csh
udotdir=/usr/share/skel
msgfile=/etc/adduser.msg
disableflag=
upwexpire=91d # Срок годности паролей истекает через 91 день
        

Скрипт adduser(8) вначале читает /etc/group, /etc/passwd, /etc/shells и другие конфигурационные файлы на предмет целостности и инициализации значений по умолчанию, а так же получения допустимых значений. Добавляет домашнюю директорию и создает пользователя, а так же заносит его в требуемые группы. Интересующиеся тонкостями могут просмотреть сам скрипт /usr/sbin/adduser.

В OpenBSD и NetBSD в командной строке пользователя можно дабавить при помощи утилиты user(8). Метод достаточно прост и полезен для использования в сценариях. Следует только учитывать, когда заводится пользователь данной командой, то используется УЖЕ шифрованный пароль. Таким образом, для вышеописанного пользователя мы получаем следующую последовательность действий (пример сделан в OpenBSD):

# encrypt -p -b 6
Enter string:
$2a$06$YOdOZM3.4m6MObBXjeZtBOWArqC2.uRJZXUkOghbieIvSWXVJRzlq

# user add -p '$2a$06$YOdOZM3.4m6MObBXjeZtBOWArqC2.uRJZXUkOghbieIvSWXVJRzlq' -u 1002 \
-s /bin/ksh -c "Test FAQ User" -m -g guest testuser
        

В FreeBSD и DragonFly BSD для этих целей используется утилита pw(8)

4.1.3. Изменение параметров пользовательской учётной записи

BSD системы поддерживают «классический», древнейший способ изменения пользовательской информации — vipw(8).Использование этой утилиты весьма удобно, так как после рабоиы vipw(8) проверяет синтаксис файла и, если администратор не совершил никаких ошибок, обновляет данные в файле /etc/master.passwd, строит из него /etc/passwd и бинарные базы /etc/pwd.db и /etc/spwd.db. (См. Раздел 2.12.1, «Устройство базы паролей».)

Однако, этот способ следует рекомендовать лишь в том случае, если вы понимаете формат файла /etc/master.passwd. Поэтому начинающие и ине только начинающие администраторы используют команду chpass(1).

При запуске chpass(1) запускает редактор vi(1) (см. Раздел 7.3, «Навыки работы в vi(1)») и предлагает изменить следующие настройки учётной записи:

# chpass testuser

Changing user database information for testuser.
Login: testuser
Encrypted password:$2a$06$YOdOZM3.4m6MObBXjeZtBOWArqC2.uRJZXUkOghbieIvSWXVJRzlq
Uid [#]: 1002
Gid [# or name]: 31
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/testuser
Shell: /bin/ksh
Full Name: Test FAQ User
Office Location:
Office Phone:
Home Phone:
        

В случе если команда вызвана непривилегированным поьзователем, она позволяет изменить информацию только в рамках полномочий пользователя:

$ chpass

#Changing user information for paakai.
Shell: /usr/local/bin/bash
Full Name: Paakai Sudoer
Office Location:
Office Phone:
Home Phone:
Other information:
        

После успешного изменения информации о пользователе, chpass(8) вызывает pwd_mkdb(8) для актуализации изменений в базах данных пользователей (/etc/master.passwd и /etc/passwd).

Другие, команды для изменения информации о пользователях: user mod, usermod, pw usermod.

4.1.4. Удаление учётной записи

Быстро и эффективно удалить пользователя можно с помощью команды rmuser(8). rmuser(8) старается удалить всё, относящееся к указанному пользователю: домашнюю директорию, письма, задачи в crontab(1)/at(1), уничтожает запущенные процессы этого пользователя, созданные им временные файлы в /tmp и, разумеется, удаляет его из /etc/master.passwd и /etc/group.

# rmuser
Enter login name for user to remove: testuser
Matching password entry:
testuser:$2a$06$YOdOZM3.4m6MObBXjeZtBOWArqC2.uRJZXUkOghbieIvSWXVJRzlq:1002
:31::0:0:Test FAQ User:/home/testuser:/bin/ksh
Is this the entry you wish to remove? y
Remove user's home directory (/home/testuser)? y
Updating password file, updating databases, done.
Updating group file: done.
Removing user's home directory (/home/testuser): done.
        

Для удаления пользователя так же можно вопользоваться командами: userdel, user del, pw userdel.

К сожалению, в UNIX (да и вообще, наверное ни в одной операционной системе) не существует абсолютно надёжного метода удалить пользователя. Никто не может гарантировать вам, что этот пользователь не прикопал своих файлов где-то вне своего домашнего каталога. Что никто не выдал ему прав на ресурсы используя метод ACL. rmuser(8) не в силах удалить связанные с пользователем почтовые алиасы. Если спустя время вы заведёте нового пользователя, то ему может быть выдан UID старого пользователя и он завладеет брошенными файлами. Если имя нового пользователя совпадёт с именем удалённого, то он завладеет почтовыми алиасами и др.

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