Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX. Так как FreeBSD является многопользовательской ОС и принадлежит к семейству ОС относящихся к общему названию UNIX, поэтому грамотное умение управлять пользователями во FreeBSD позволит избежать различных неприятностей.
Учётные записи пользователей и групп хранятся в двух файлах:
•/etc/master.passwd – в данном файле хранятся учётные данные пользователей и их пароли в зашифрованном виде.
•/etc/group – файл который отвечает за группы
Во FreeBSD используется технология теневых паролей – это когда системные данные пользователей разделены на два файла:
1. Файл /etc/master.passwd в котором распологаются пароли в зашифрованном виде, этот файл имеет права только на чтение и запись для пользователя root .
2. Файл /etc/passwd, созданный с помощью команды pwd_mkdb (8) (генерация базы с паролями) из файла /etc/master.passwd, он имеет права на чтение для группы и других пользователей, в нём пароли заменены на *. Также с помощью команды pwd_mkdb(8) из файла /etc/master.passwd создаются два файла — /etc/pwd.db и /etc/spwd.db (индексированные базы данных), они предназначены для ускорения поиска, в случае большого количества системных пользователей. Файл /etc/spwd.db является секретным как и файл /etc/master.passwd и имеет теже права доступа и владельца.
Рассмотрим синтаксис файла /etc/master.passwd:
________________________________________________________________________________
root:$1$SJSDMXQE$LRpetLGNt5xO8k980r2om.:0:0::0:0:Charlie &:/root:/bin/csh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
_________________________________________________________________________________
Каждая новая строка в файле описывает пользователя, она содержит в себе столбцы разделённые (:).
Столбцы по порядку:
- 1.name – логин пользователя, который будет использоваться при входе в систему
- 2.password – зашифрованный пароль в файле /etc/master.passwd и * в /etc/passwd
- 3.uid – уникальный идентификатор пользователя.
- 4.gid – уникальный идентификатор группы.
- 5.class – класс настроек и установок, который берётся из файла /etc/login.conf
- 6.change – время жизни пароля, т.е период через который необходимо сменить пароль. Количество секунд с 1 января 1970. Проверить на какую дату указывают секунды в поле можно с помощью команды: date –r seconds, где seconds – значение поля.
- 7.expire – время жизни аккуанта, после прошествия этого периода времени он заблокируется, 1 января 1970. Проверить на какую дату указывают секунды в поле можно с помощью команды: date –r seconds, где seconds – значение поля.
- 8.gecos – общая информация о пользователе
- 9.home dir – домашний каталог пользователя
- 10.shell – оболочка, которую будет использовать пользователь
При создании файла /etc/passwd из файла /etc/master.passwd поля class, change, expire удаляются, а пароль заменяется на *.
Поле логина (name) не может начинаться с символа (-), так же не советуется использовать прописные буквы в имени пользователя и разделять логин символом (.), что может вызвать проблемы при работе с почтой. В файле /etc/master.passwd поле password зашифровано, если поле отсутствует, т.е вместо пароля стоит символ *, то доступ к машине вы не получите. Для быстрого редактирования файла /etc/master.passwd и без последующего применения команды pwd_mkdb(8) применяется команда vipw(8), это тот же текстовый редактор vi(1), поэтому перед применение команды vipw(8) ознакомьтесь с man страницей по vi(1).
Пример:
_________________________________________________________________
# vipw
root:$1$SJSDMXQE$LRpetLGNt5xO8k980r2om.:0:0::0:0:Charlie &:/root:/bin/csh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
_________________________________________________________________
При использовании (*) в /etc/master.passwd вместо поля password запрещается авторизация в системе так как символ (*) не может быть зашифрованным паролем. Например, для временной блокировки пользователя, можно использовать вместо поля password в файле /etc/master.passwd такую комбинацию *LOCKED* или добавить такую комбинацию в начало пароля, если он существует, а при разблокировке просто её удалить, для этого Вам понадобится команда vipw(8). Для того, чтобы посмотреть как блокировать аккуант с помощью командной строки прочтите man по команде pw(8).
Поле gecos дающее общую информацию о пользователи, содержит в себе следующие поля, разделённые запятой:
•name – полное имя пользователя
•office – номер офиса
•wphone – рабочий телефон
•hphone – домашний телефон
Поле home_dir, определяет путь к домашнему каталогу пользователя, владельцем которого он будет являться.
Поле shell, определяет оболочку пользователя, список доступных оболочек для пользователя можно посмотреть в файле /etc/shells. Для пользователя root изменять текущую оболочку не рекомендуется, т.к в случае аварии файловая система /usr может быть не примонтирована, в следствии чего пользователь root не получит доступ к системе.
Если Вы хотите запретить доступ пользователя к системе, замените его оболочку на /sbin/nologin. Данная программа более корректно, чем другие (пр.: /dev/null) обработает попытку входа пользователя.
При добавлении нового пользователя необходимо выбрать уникальное имя (login name) которое не будет встречаться в файле /etc/passwd и /etc/mail/aliases. Так же имя не должно начинаться с символа (-) и содержать в себе символ (.), и прописные буквы, так как могут возникнуть непредвиденные ситуации при работе с почтой. Новый пользователь получает уникальный id – UID и становится членом группы, имя которой совпадает с именем пользователя, в которой он будет один. Такая стратегия именования группы позволяет улучшить безопасность и гибкость при управлении доступом. UID и имя пользователя(login name) являются уникальными в системе и будут использоваться при осуществлении контроля доступа к файловой системе. После добавления пользователя в систему, в его домашний каталог копируются файлы .profile (выполняется при заходе пользователя в систему), если используется оболочка /bin/sh или .cshrc(при старте оболочки) и .login(при заходе пользователя в систему), если используется оболочка /bin/csh. Все эти файлы копируются из каталога /usr/share/skel.
В файле /etc/group находятся все локальные группы системы. Данный файл можно редактировать любым текстовым редактором на Ваше усмотрение, т.е чтобы добавить группу достаточно отредактировать вышеуказанный файл.
Файл состоит из отдельных строк, столбцы в которых разделены с помощью специального символа (:). Строка состоит из следующих столбцов или полей:
•group – название или имя группы
•password – зашифрованный пароль для группы
•gid – уникальный номер группы
•member – члены данной группы
В данном файле, каждая строка, начинающаяся с символа (#) является комментарием.
Поле group является именем группы, которое определяет доступ пользователям к файлам, являющимися членами данной группы. С полем group ассоциируется поле gid, которое определяет уникальный идентификатор группы. Два этих поля неразрывно связаны, точно также как имя пользователя и его UID. Поле password является необязательным, оно редко используется и поэтому символ (*) никак лучше подходит вместо шифрованного пароля. Поле member содержит членов группы, виде имён пользователей разделённых между собой с помощью сивола (,) – запятая. В группе может находится не больше 200 пользователей. Максимальная длина строки в файле /etc/group 1024 символа.
Управление ресурсами пользователя и ограничения.
Управление ресурсами пользователя осуществляется с помощью классов, которые определяются в специальном файле /etc/login.conf, а также задаются пользователю при его добавлении. Если для пользователя не определён какой-либо класс, то ему присваивается класс – default. Каждый класс имеет набор характеристик в виде имя=значение. Для ускорения доступа к данным система непосредственно не читает файл /etc/login.conf, а вместо этого читает файл /etc/login.conf.db, который создаётся специальной командой cap_mkdb(1)
________________________________________________________
cam_mkdb /etc/login.conf
________________________________________________________
Поэтому после каждого изменения файла /etc/login.conf не забывайте исполнять команду cap_mkdb(1)
Изменить или задать класс пользователю можно в файле /etc/master.passwd, в котором для этого имеется специальное поле class. Это обсуждалось выше. Пользователь с UID = 0, т.е администратор системы (root) не имеет действующего класса, к нему применяется запись root в /etc/login.conf или класс default, если запись root отсутствует.
Пользователь может для себя создать индивидуальный файл с настройками ресурсов в домашнем каталоге под названием ~/login.conf, этот файл использует тот же синтаксис, что и файл /etc/login.conf, но он содержит только запись id с именем «me». В этом файле пользователь может только уменьшать предоставляемые ему ресурсы, но никак не увеличивать.
В качестве разделителя полей в файле /etc/login.conf используется символ (:). Первое поле в файле означает имя класса, который в последующем будет применяться к тому или иному пользователю.
Каждое поле в файле /etc/login.conf может принимать следующие значения:
•bool – если параметр является булевым, то оно может принимать следующие значения – true или false; Просто запись опции в файле /etc/login.conf без указания явного значения означает – true. Для определения false необходимо явно указать.
•file – опция принимает значение в виде пути к файлу;
•program – опция принимает значение в виде пути к исполняемуму файлу или программе;
•list – опция принимает значения в виде списка разделённого запятой или пробелом;
•path – опция принимает значения путей, разделённых запятой или пробелом. Тильда (~) раскрывается в домашний каталог пользователя;
•number – числовой значение, в десятичном, шестнадцатиричном или восьмеричном виде.
•string – в виде строки;
•size – размер. По умолчанию принимается в байтах. Может принимать следующие суффиксы для обозначения единиц размеров:
b – байты
k – килобайты
m – мегабайты
g – гигабайты
t – терабайты
Возможно объединение значений с указанием соответствующих суффикосв: 1m30k
•time – период времени, по умолчанию выраженный в секундах. В качестве суффикса используются следующие обозначения:
y – год
w – неделя
d – день
h – час
m – минуты
s – секунды
Возможно объединение значений с указанием соответствующих суффиксов: 2h30m
•unlimited – отсутствие ограничений
Ограничение ресурсов:
|
Ресурсы могут ограничиваться как мягкими, так и жёсткими ограничениями, разница между ними состоит в том, что жёсткие ограничения пользователь не сможет увеличивать, а мягкие сможет, но не больше чем жёсткое значение. Для обозначения мягких и жёстких ограничений используются специальные суффиксы –max и –cur. Пр: filesize-max
Окружение пользователя:
|
Авторизация пользователя:
|
В опциях host.allow и host.deny разделителем хостов является запятая.
В опциях times.allow и times.deny записи разделяются запятой. Значения периодов времени записываются в 24 –х часовом формате, отделённых друг от друга дефисом.
Для примера: MoThSa0200-1300 Данная запись расшифровывается следующим образом: доступ пользователю разрешён по понедельникам, четвергам, субботам в период с 2 –ч часов ночи до часу дня. Если обе опции в пользовательском классе отсутствуют, то доступ разрешается в любое время. Если период времени разрешённый в опции times.allow запрещается периодом времени в файле times.deny, то приоритет имеет опция times.deny.
В опциях ttys.allow и ttys.deny содержаться записи tty устройств, разделённые запятой (без префикса /dev/) и список ttygroups (смотрите getttyent(3) и ttys(5)) к которым пользователь данного класса имеет или не имеет доступ. Если в опции нет ни одной записи, то пользователь имеет неограниченный доступ.
Параметры пароля такие как минимальная длинна (minpasswordlen) и параметр отвечающий за предупрждение, если пользователь вводит пароль только в нижнем регистре (minpasswordcase) не поддерживаются, для этих ограничений применяется pam модуль pam_passwdqc(8).
Задание классов для системных пользователей является очень хорошим средством индивидуального ограничения пользователя, но используйте это средство осознанно и с осторожностью.
Для управления пользователями и группами будут полезны следующие команды:
•pw(8) – создание, удаление, изменение, отображение пользователей и групп;
•adduser(8) – интерактивное добавление нового пользователя;
•rmuser(8) – удаление пользователя из системы;
•id(1) – отображение имени пользователя, UID и групп в которых он состоит с указанием их GID;
•finger(1) – отображает информацию о системном пользователе;
•users(1) – показывает список текущих пользователей;
•who(1) – показывает тех кто находится в системе;
•whoami(1) – показывает эффективный id пользователя соответствующий имени;
•last(1) – показывает когда пользователь пользовался терминалом;
•lastlogin(8) – показывает информацию о последнем использовании терминала;
•lastcomm(1) – показывает список последних выполняем команд пользователем;
•ac(8) – показывает время, которое пользователь находился в системе;
•sa(8) – показывает статистику по пользователям;
•passwd(8) – смена пароля пользователю;
•chpass(1) – смена пароля пользователя;
•chfn(1) – изменение пользовательских данных;
•groups(1) – показывает кто в каких группах состоит;
•chgrp(1) – изменение группы;
•chkgrp(8) – проверка синтаксиса файла групп;
Для полноценного использования команд lastcomm(1), sa(8) Вам необходимо включить учёт используемых ресурсов. Учёт используемых процессами ресурсов представляет собой метод защиты, при котором администратор может отслеживать использование системных ресурсов и их распределение между пользователями для нужд системного мониторинга и минимального отслеживания команд пользователей.
Для того что бы включить систему учёта используемых ресурсов Вам необходимо выполнить несколько действий.
_______________________________________________________________
1.mkdir /var/account
2.touch /var/account/acct
3.accton /var/account/acct
4.echo ‘accounting_enable=»YES»‘ >> /etc/rc.conf
_______________________________________________________________
После выполнения 3 действия Вы уже можите использовать команды lastcomm(1), sa(8). Команда accton(8) включает систему учёта используемых ресурсов.
Практика:
(Для более подробной информации о командах обязательно читайте манны)
Использование системы учёта ресурсов, команда lastcomm(1) и sa(8):
_______________________________________________________________
fdesktop1# lastcomm root
lastcomm — root ttyp0 0.023 secs Tue May 19 02:25
cron -F root __ 0.004 secs Tue May 19 02:25
sh — root __ 0.005 secs Tue May 19 02:25
atrun — root __ 0.004 secs Tue May 19 02:25
man — root ttyp0 0.032 secs Tue May 19 02:24
sh — root ttyp0 0.019 secs Tue May 19 02:24
more — root ttyp0 0.071 secs Tue May 19 02:24
zcat — root ttyp0 0.025 secs Tue May 19 02:24
man — root ttyp0 0.038 secs Tue May 19 02:24
sh — root ttyp0 0.020 secs Tue May 19 02:24
zcat — root ttyp0 0.030 secs Tue May 19 02:24
more — root ttyp0 0.039 secs Tue May 19 02:24
lastcomm — root ttyp0 0.014 secs Tue May 19 02:24
man — root ttyp0 0.013 secs Tue May 19 02:24
sh — root ttyp0 0.031 secs Tue May 19 02:24
_______________________________________________________________
_______________________________________________________________
fdesktop1# sa
73 9.617re 0.03cp 0avio 2804k
9 3.187re 0.01cp 0avio 1383k more
13 3.196re 0.00cp 0avio 4158k sh
9 3.197re 0.00cp 2avio 3484k man
9 0.026re 0.00cp 0avio 1547k zcat
7 0.003re 0.00cp 0avio 2386k sa
7 0.002re 0.00cp 0avio 4726k lastcomm
5 0.001re 0.00cp 0avio 4516k ***other
7 0.001re 0.00cp 0avio 4584k mv
_______________________________________________________________
Добавление нового пользователя в систему, будем использовать команду pw(8):
_______________________________________________________________
# pw useradd test -s /bin/sh -c «Test users» -m -b /home -e 03-06-2009 -p 02-6-2009
_______________________________________________________________
Давайте разберём наше действие:
-s – указывает какой терминал будет использоваться, поле shell
-с – комментарии к созданному пользователю, поле gecos
-e – время жизни аккуанта, поле expire. Формат поля аналогичен опции ‘-p’
-p – время жизни пароля, поле change. Формат задания даты или времени таков:
dd-mm-yy[yy], где dd – день, mm – месяц, yy[yy] – год. Или используется следующий
формат: +0mhdwoy, где m – минуты, h – часы, d – дни, w – недели, o – месяц, y — год
-m – заставляет создать домашний каталог пользователя и скопировать в него стандартные файлы
и каталога /usr/share/skel
-b – базовая директория в которой будет находится домашний каталог пользователя, поле home_dir
-L – задаёт класс для пользователя из файла login.conf, поле class
Результаты работы, из файла /etc/master.passwd:
_______________________________________________________________
test:*:1002:1002::40:30:Test users:/home/test:/bin/sh
_______________________________________________________________
Более интерактивная команда adduser(8), она имеет конфигурационный файл, в котором вы можите предопределить вводимые данные.
Как видим пользователь у нас не имеет пароля, поэтому не сможет войти в систему, для того что бы задать пароль используем команду passwd(8):
________________________________________________________________
# passwd test
Changing local password for test
New Password:
Retype New Password:
________________________________________________________________
Для более корректного удаления пользователя из системы используйте команду rmuser(8), данная команда не просто удаляет пользователя из файла /etc/master.passwd, но и все его данные в системе:
1.Удаляет пользовательский crontab(1), если он существует
2.Удаляет задания пользователя, созданные командой at(1)
3.Отправляет всем процессам работающим от имени этого пользователя сигнал SIGKILL
4.Удаляет пользователя из файла /etc/passwd
5.Удаляет домашнюю директорию пользователя, включая символические ссылки на домашний каталог
6.Удаляет входящие письма из каталога /var/mail
7.Удаляет все файлы владельцем которых является пользователь из каталогов /tmp, /var/tmp и /var/tmp/vi.recover
8.Удаляет пользователя из всех группы, в которых он состоит (файл /etc/groups)
9.Удаляет все очереди сообщений, общую разделяемую память, семафоры владельцем которых является пользователь. (Для справки: все это интерфейсы межпроцессорного взаимодействия)
Используйте утилиту rmuser(8) с параметром ‘–y’ что бы она не спрашивала подтверждения на удаление.
Пример удаления без опции ‘-y’ и с опцией ‘y’:
_________________________________________________________________
fdesktop1# rmuser test
Matching password entry:
test:*:1002:1002::0:0:Test users:/home/test:/bin/sh
Is this the entry you wish to remove? y
Remove user’s home directory (/home/test)? y
Removing user (test): mailspool home passwd.
fdesktop1# pw useradd test -s /bin/sh -m -b /home -c «Test users»
fdesktop1# rmuser -y test
Removing user (test): mailspool home passwd.
_________________________________________________________________
Посмотрим теперь информацию о существующих пользователях, для этого будем использовать каманды id(1), finger(1):
_________________________________________________________________
fdesktop1# id root
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
_________________________________________________________________
Как видим утилита показывает информацию, к каким группам принадлежит пользователь. У данной команды есть много полезных опций, поэтому почитайте манн.
_________________________________________________________________
fdesktop1# id -P root
root:$1$SJSDMXQE$LRpetLGNt5xO8k980r2om.:0:0::0:0:Charlie &:/root:/bin/csh
fdesktop1# finger root
Login: root Name: Charlie Root
Directory: /root Shell: /bin/csh
On since Sun May 17 23:10 (MSD) on ttyp0 from 192.168.0.2
New mail received Wed Feb 18 01:21 2009 (MSK)
Unread since Fri Feb 13 00:52 2009 (MSK)
No Plan.
_________________________________________________________________
Давайте теперь узнаем кто сейчас находится в системе, для этого будем использовать команды users(1) и who(1):
_________________________________________________________________
$ who
root ttyp0 May 17 23:10 (192.168.0.2)
atrium ttyp1 May 17 23:19 (192.168.0.2)
$ users
atrium root
_________________________________________________________________
Создадим новую группу:
_________________________________________________________________
fdesktop1# echo ‘test:*:200:atrium’ >> /etc/group
fdesktop1# id atrium
uid=1001(atrium) gid=20(staff) groups=20(staff),200(test)
_________________________________________________________________
Мы создали новую группу ‘test’ и сразу же добавили в неё пользователя ‘atrium’.
_________________________________________________________________
fdesktop1# pw groupadd list -M atrium,root
fdesktop1# pw groupshow list
list:*:1002:atrium,root
_________________________________________________________________
С помощью этой команды pw(8) мы создали группу ‘list’ и добавили в неё пользователя atrium и root. Так же посмотрели созданную группу.
Автор статьи: atrium
Взято тут : http://www.lissyara.su/