Описание: Важная часть системного администрования — манипулирование учётными записями. Кандидат 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), что предохранит вас от неожиданного разрушения собственной системы. Существует другая крайность, это создание множества пользователей с административными правами, что может привести как минимум к нестабильности системы, к ее вскрытию злоумышленниками или даже разрушению.
Можно выделить три основных типа учётных записей: суперпользователь, системные пользователи, и учётные записи пользователей. Учётная запись суперпользователя, обычно называемая root, используется для управления системой без ограничения привилегий. Системные пользователи запускают сервисы и, как правило, не могут входить (login) в систему. Учётные записи пользователей необходимы остальным для входа в систему, чтения почты, работы с документами, создания приложений и так далее.
С каждой учётной записью в системе *BSD связана определённая идентификационная информация:
Имя пользователя в том виде, в каком оно вводится в
приглашение login:. Имена пользователей должны быть
уникальны в пределах одного компьютера; не может быть двух
пользователей с одинаковым именем пользователя. Существует
множество правил для создания правильных имён
пользователей, документированных в
passwd(5)
; вы как правило будете
использовать имена пользователей, состоящие из восьми или
меньшего количества символов, все символы в нижнем
регистре.
Вообще-то это не является какой-то догмой. Но некоторый софт расчитывает, что на имя пользователя наложены некоторые ограничения. Так, старые реализации системы NIS расчитывали, то имя пользователя состоит не более чем из восьми символов. В настоящий момент вы можете не соблюдать это ограничение. Почтовая система sendmail(8) при доставке почты переводит символы в нижний регистр. Поэтому пользователь в имени которого есть буквы из верхнего регистра будет лишён почты. Многие файловые форматы расчитывают на то, что в имени нет двоеточия и т.п. Если по каким-то причинам вы хотите, чтобы в имени были большие буквы, точки и т.п. Вам надо подумать над архитектурой програмного обеспечения. Например, если вы хотите, чтобы в вашем домене существовали электронные адреса типа Mikhail.Kutuzov@borodino.ru, вам слеует хранить почтовые аккаунты, например, в базе данных PostgreSQL, а не в виде учётных записей UNIX.
login.conf(5)
,
passwd(5)
, см. так же Приложение F, /etc/login.conf(5)
).
/home/username
. Пользователи хранят
личные файлы в домашнем каталоге и в любых подкаталогах,
создаваемых внутри домашнего каталога.
Самый простой и интерактивный способ добавить нового пользователя, это использовать команду 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 []:
testuserEnter full name []:
Test FAQ UserEnter shell csh ksh nologin sh [sh]:
kshUid [1002]:
EnterLogin group testuser [testuser]:
guestLogin group is ``guest''. Invite testuser into other groups: guest no [no]:
noLogin 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/kshOK? (y/n) [y]:
y Added user ``testuser'' Copy files from /etc/skel to /home/testuserAdd 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 6Enter 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)
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.
Быстро и эффективно удалить пользователя можно с помощью команды
rmuser(8). rmuser(8)
старается удалить всё, относящееся к указанному пользователю:
домашнюю директорию, письма, задачи в
crontab(1)/at(1),
уничтожает запущенные процессы этого пользователя, созданные им
временные файлы в /tmp
и, разумеется,
удаляет его из /etc/master.passwd
и
/etc/group
.
#
rmuserEnter 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/kshIs this the entry you wish to remove?
yRemove 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 старого пользователя и он завладеет брошенными файлами. Если имя нового пользователя совпадёт с именем удалённого, то он завладеет почтовыми алиасами и др.
В связи со сказанным, в ряде случаев блокирование пользователей оказывается более желательно, чем удаление их учётных записей.