Управление пользователями во FreeBSD
Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX. Так как FreeBSD является многопользовательской ОС и принадлежит к семейству ОС относящихся к общему названию UNIX, поэтому умение грамотно управлять пользователями позволит избежать различных неприятностей.
Учётные записи пользователей и групп хранятся в двух файлах: • /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:
Каждая новая строка в файле описывает пользователя, она содержит в себе столбцы разделённые (:). Столбцы по порядку: 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). Пример:
При использовании (*) в /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)
Поэтому после каждого изменения файла /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) Вам необходимо включить учёт используемых ресурсов. Учёт используемых процессами ресурсов представляет собой метод защиты, при котором администратор может отслеживать использование системных ресурсов и их распределение между пользователями для нужд системного мониторинга и минимального отслеживания команд пользователей. Для того что бы включить систему учёта используемых ресурсов Вам необходимо выполнить несколько действий.
После выполнения 3 действия Вы уже можите использовать команды lastcomm(1), sa(8). Команда accton(8) включает систему учёта используемых ресурсов. Практика: (Для более подробной информации о командах обязательно читайте манны)
Добавление нового пользователя в систему, будем использовать команду pw(8):
Давайте разберём наше действие: -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:
Более интерактивная команда adduser(8), она имеет конфигурационный файл, в котором вы можите предопределить вводимые данные. Как видим пользователь у нас не имеет пароля, поэтому не сможет войти в систему, для того что бы задать пароль используем команду passwd(8):
Для более корректного удаления пользователя из системы используйте команду 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':
Посмотрим теперь информацию о существующих пользователях, для этого будем использовать каманды id(1), finger(1):
Как видим утилита показывает информацию, к каким группам принадлежит пользователь. У данной команды есть много полезных опций, поэтому почитайте манн.
Давайте теперь узнаем кто сейчас находится в системе, для этого будем использовать команды users(1) и who(1):
Создадим новую группу:
Мы создали новую группу ‘test’ и сразу же добавили в неё пользователя ‘atrium’.
С помощью прекрасной команды pw(8) мы создали группу 'list’ и добавили в неё пользователя atrium и root. Так же посмотрели созданную группу. Автор статьи. |
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.