Управление пользователями FreeBSD. Freebsd: управление учетными записями пользователей

Что-бы упростить процесс администрирования системы и сделать его более гибким, FreeBSD поддерживает полезную возможность, использование так называемых классов пользователей (login class). При создании учетной записи пользователя, по-умолчанию, используется класс "default", берется он, из соответствующей секции файла /etc/login.conf. Кроме класса "drfault", файл содержит еще несколько предопределенных классов, например класс "russian" с соответствующими языковыми настройками, класс "root", "standart", "xuser", "news", "dialer", "siit", часть из них закомментирована, но при необходимости можете раскомментировать и использовать.

В секции класса прописаны начальные системные настройки для пользователя и это довольно важный момент . Приведу пример секции "default" из файла /etc/login.conf , в системе FreeBSD 7.1.

default:\
:passwd_format=md5:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:\
:path=/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin ~/bin:\
:nologin=/var/run/nologin:\
:cputime=unlimited:\
:datasize=unlimited:\
:stacksize=unlimited:\
:memorylocked=unlimited:\
:memoryuse=unlimited:\
:filesize=unlimited:\
:coredumpsize=unlimited:\
:openfiles=unlimited:\
:maxproc=unlimited:\
:sbsize=unlimited:\
:vmemoryuse=unlimited:\
:priority=0:\
:ignoretime@:\
:umask=022:

Вот описание некоторых опций класса пользователя:

passwd_format=md5:
Как можно догадаться по названию, это алгоритм шифрования паролей, вместо md5 , можно использовать, например DES
copyright=/etc/COPYRIGHT:
Файл копирайта, можно назначить какой угодно
welcome=/etc/motd:
Сообщение выводимое при логине пользователя в системе
setenv= ... ....
Устанавливает некоторые переменные окружения оболочки
path=.. ..
Пути к директориям с исполняемыми файлами, данная опция может быть переопределена из других файлов конфигурации
nologin=/var/run/nologin:
Опция, указывающая на местоположение файла nologin, запрещающего пользователю вход в систему
администратор может использовать этот файл, для временного запрета входа пользователей в систему
priority=0:
Начальный приоритет процессов по-умолчанию
umask=022:
Задает так называемую маску прав доступа к файлам и директориям, в данном случае, если пользователь создаст файл,
права доступа будут выставлены как 644 , при создании директории 755

Кроме перечисленного в классе можно задавать различные лимиты на использование пользователем системных ресурсов, процессорного времени, памяти, файлов и т.д.. Пройдитесь по файлу, он довольно прост для восприятия и интуитивно понятен, думаю вы без труда поймете как это работает. Список всех возможных опций и значений файла login.conf , можно посмотреть на страницах руководства man login.conf . Как было упомянуто выше, вы можете легко создать свой класс или использовать один из существующих, просто раскомментировав соответствующую секцию файла.

Имейте в виду, что после редактирования файла /etc/login.conf , вам необходимо пересобрать базу данных логинов /etc/login.conf.db , делается это так:

Vds-admin /# cap_mkdb /etc/login.conf

В операционной системе FreeBSD, информация из файла /etc/login.conf.db , используется при каждом входе пользователя в систему.

Изменение учетных записей пользователей в операционных системах FreeBSD

После создания учетной записи, может понадобится что-то изменить или исправить в начальных пользователя. Есть несколько мест, где это можно делать, например, домашняя директория пользователя содержит файлы, имена которых начинаются со знака "." (точка). В этих файлах как правило содержаться настройки пользовательской оболочки, переменные среды, настройки приложений. Основные настройки учетной записи можно изменить в файле /etc/passwd . Для безопасного редактирования используйте специальный редактор файла паролей vipw .

Vds-admin #/ vipw

Конечно можно использовать любой редактор для изменения файла паролей, но у vipw есть некоторое преимущество, при редактировании с помощью vipw , файл паролей блокируется, что-бы избежать изменения содержимого, по какой-либо другой причине. Файл паролей может редактировать только пользователь root. Типичная запись из файла паролей:

Drupal:*:1007:1007:drupal cms:/home/drupal:/bin/csh

В данном примере показана запись о пользователе drupal , идентификатор пользователя и группы: 1007 , полное имя: drupal cms , домашняя директория:/home/drupal , оболочка: /bin/csh . В общем-то данный файл не несет никакой критической информации, как видите во втором поле строки, вместо пароля, стоит символ "*", это говорит о том, что сам пароль, в зашифрованном виде, храниться в файле master.passwd .

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

Удаление учетных записей пользователей в операционных системах FreeBSD, программа rmuser

Удалить учетную запись пользователя, можно с помощью команды rmuser . Запущенная без параметров, команда rmuser, запросит имя пользователя, которого вы желаете удалить, покажет соответствующую запись из файла паролей и попросит подтверждение удаления, при положительном ответе, будет задан вопрос по поводу удаления домашней директории пользователя. Обычный вывод команды rmuser можно увидеть ниже.

Vds-admin /# rmuser Please enter one or more usernames: newuser Вводим имя учетной записи Matching password entry: newuser:*:1011:1011::0:0:User &:/home/newuser:/bin/csh Строка из /etc/passwd Is this the entry you wish to remove? y Удалить учетную запись Remove user"s home directory (/home/newuser)? y Удалить домашнюю директорию Removing user (newuser): files(1) mailspool home passwd.

Что-бы на все вопросы, программа получала утвердительный ответ, можно использовать ее с опцией -y . А что-бы увидеть подробный отчет о проделанной работе, используйте ключ -v . Так-же, при необходимости, можно воспользоваться возможностью команды rmuser , брать список пользователей из текстового файла, в нем просто перечисляются все учетные записи для удаления, по одной на строку, а команде rmuser передается опция -f и имя файла.

Vds-admin /root# rmuser -yv newuser Removing crontab for (newuser):. Removing at(1) jobs owned by (newuser): 0 removed. Removing IPC mechanisms. Terminating all processes owned by (newuser): -KILL signal sent to 0 processes. Removing files owned by (newuser) in /tmp: 0 removed. Removing files owned by (newuser) in /var/tmp: 0 removed. Removing mail spool(s) for (newuser): /var/mail/newuser. Removing user (newuser) (including home directory) from the system: Done.

Как видите, rmuser , подчищает все довольно капитально, удаляя записи из таблицы планировщика crontab , убивает процессы запущенные данным пользователем, чистит временные папки и т.д.

Управление паролями учетных записей в операционных системах FreeBSD, программа passwd

Для работы с паролями учетных записей предназначена специальная утилита, passwd . Кроме того можно работать с паролями и с помощью утилиты vipw , описанной выше. Обычный пользователь может управлять только своим паролем, пользователь root , может управлять любыми паролями в системе.
Смена пароля пользователем:

Vds-admin /home/user# passwd Запускаем passwd Changing local password for user Old Password: Вводим старый пароль New Password: Вводим новый пароль Retype New Password: Повторно вводим новый пароль

Смена пользователем root , пароля на учетной записи обычного пользователя:

Vds-admin /root# passwd user Запускаем passwd имя учетной записи в качестве параметра Changing local password for user New Password: Вводим новый пароль Retype New Password: Повторно вводим новый пароль

При запуске пользователем root , утилиты passwd без параметров, ему будет предложено сменить свой пароль

Не забывайте, пароль должен быть сложным! Это значит, чем из большего числа символов состоит пароль, тем лучше, использовать в паролях, желательно, как буквы в верхнем и нижнем регистрах, так и цифры и не буквенно-цифровые символы, такие как &^@)*_, и т.д. Конечно для обычных пользователей это не столь критично как для пользователя root, поэтому желательно создавать для них такие пароли, которые они в состоянии запомнить, не записывая на бумажку и не приклеивая ее на морду монитора..:)

Создание групп в операционной системе FreeBSD, файл /etc/group

При создании учетной записи пользователя, он добавляется в одну или более групп. По-умолчанию, для каждой учетной записи создается отдельная группа, с тем-же именем, что и учетная запись, в нее и добавляется, только что созданный, пользователь. Права группы, зависят от того как выставлены права для группы, на конкретных объектах (файлы, директории, и т.д.). Добавление пользователя к определенной группе, дает ему дополнительные права на объекты, на которые есть права у данной группы.

Записи о группах и пользователях в них входящих, хранятся в файле /etc/group , формат его весьма прост:

# $FreeBSD: src/etc/group,v 1.35 2007/06/11 18:36:39 ceri Exp $
#
wheel:*:0:root
daemon:*:1:
kmem:*:2:
sys:*:3:
tty:*:4:
operator:*:5:root
mail:*:6:
bin:*:7:
sshd:*:22:

Это укороченный вариант, но для ознакомления достаточно. В первом поле, имя группы, далее пароль, вместо него как правило стоит символ "*", далее идентификатор группы (GroupID ), и в последнем поле, через запятую, перечисляются пользователи, входящие в данную группу. Группы с идентификаторами меньше 100, это административные группы, обычные группы начинаются с ID 1001. Существуют так-же специальные группы, предназначенные для отображения групповых прав пользователей, через сеть, такие как nogroup (65533) и nobody (65534) .

При создании учетной записи пользователя, будет создана соответствующая группа, он имеет полный доступ к своим файлам и директориям, если необходимо разрешить доступ еще кому-либо, например для совместной работы над каким-то проектом, можно включить второго пользователя в группу, владеющую данными файлами и директориями.

Группа wheel , является привилегированной, как видите в нее входит пользователь root , добавляя в эту группу еще какого-то пользователя, вы тем самым даете ему права root , помните об этом.

Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС 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:

    root:$1 $SJSDMXQE $LRpetLGNt5xO8k980r2om .:0 :0 ::0 :0 0 :0 ::0 :0 1 :1 ::0 :0 2 :5 ::0 :0 3 :7 ::0 :0 4 :65533 ::0 :0 5 :65533 ::0 :0 7 :13 ::0 :0

    Каждая новая строка в файле описывает пользователя, она содержит в себе столбцы разделённые (:).

    Столбцы по порядку:

    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 с именем. В этом файле пользователь может только уменьшать предоставляемые ему ресурсы, но никак не увеличивать.
    В качестве разделителя полей в файле /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 - отсутствие ограничений

    Ограничение ресурсов:

    Название опции Тип значения Описание
    coredumpsize size Ограничивает размер файла coredump
    cputime time Ограничивает время использования процессора
    datasize size Максимальный размер данных
    filesize size Максимальный размер файла. Запрещает создавать файлы больше указанного размера
    maxproc number Максимальное число процессов которые может создать пользователь
    memorylocked size Максимальный размер в core memory котрую может заблокировать процесс
    memoryuse size Максимальный размер памяти которую может использовать процесс
    openfiles number Максимально количество файлов которые может открыть каждый процесс
    sbsize size Максимально разрешённый размер сокетбуфера
    vmemoryuse size Максимально разрешенный размер виртуальной памяти для каждого процесса
    stacksize size Максимальный размер стека


    Ресурсы могут ограничиваться как мягкими, так и жёсткими ограничениями, разница между ними состоит в том, что жёсткие ограничения пользователь не сможет увеличивать, а мягкие сможет, но не больше чем жёсткое значение. Для обозначения мягких и жёстких ограничений используются специальные суффиксы -max и -cur . Пр: filesize-max

    Окружение пользователя:

    Название опции Тип значения Дефолт Описание
    charset string Устанавливает значение переменной окружения $MM_CHARSET. Пр: KOI8-R
    hushlogin bool false Разрешает (false) показывать файл /etc/motd при загрузке или запрещает (true). Тоже самое что присутствие файла ~/.hushlogin в домашнем каталоге.
    ftp-chroot bool false Делать chroot(2) пользователя в его домашнем каталоге при заходе по FTP. Применительно только к стандартному демону ftpd(8).
    ignorenologin bool false Логин не блокируется nologin.
    label string Политика MAC (maclabel(7)) применяемая к пользователю.
    lang string Устанавливает значение переменной окружения $LANG. Пр: ru_RU.KOI8-R
    manpath path Определяет пути поиска man страниц
    nocheckmail bool false Показывать состояние почтового ящика при заходе пользователя в систему.
    nologin file Если данный файл существует то отображается его содержимое при заходе в систему и сессия закрывается. Можно указать данную опцию в классе для пользователя и заблокировать для него вход в систему если даже у него в файле /etc/master.passwd установлена оболочка.
    path path Определяет пути поиска выполняемых файлов или программ.
    priority number Определяет первоначальный приоритет пользователя (nice(1)).
    requirehome bool false Требуется ли пользователю рабочий домашний каталог. Если его нет то пользователь не сможет войти в систему.
    setenv list Устанавливает переменные окружения в виде переменная=значение разделённые запятой
    shell prog Оболочка пользователя. Имеет приоритет над оболочкой указанной в файле /etc/master.passwd.
    term string Определяет тип терминала.
    timezone string Устанавливает значение переменной окружения $TZ. Зоны находятся /usr/share/zoneinfo.
    umask number 022 Определяет права на создаваемые файлы. Права рассчитываются вычитанием маски из 666 а на каталог из 777.
    welcome file ./etc/motd Файл приветствия который показывается при заходе пользователя в систему.
    Название опции Тип значения Дефолт Описание
    copyright file Дополнительный файл содержащий информацию о кооперайтах
    host.allow list Список удалённых хостов с которых пользователи данного класса могут заходить на машину.
    host.deny list Список удалённых хостов с которых пользователи данного класса не могут заходить на машину.
    login_prompt string Строка выводимая при запросе логина login(1)
    login-backoff number Определяет величину задержки умноженную на 5 секунд между неправильными логинами после того как исчерпаются попытки входа параметр ниже. Применимо к неудалённому терминалу.
    login-retries number 10 Количество разрешённых неправильных попыток входа прежде чем логин будет признан неудачным.
    passwd_format string Формат в котором будет шифроваться новый пароль. Значения которые можно использовать - "md5" "blf" "des". Советую по умолчанию использовать формат шифрования - "blf" так как это наиболее криптостойкий алгоритм.
    passwd_prompt string Приветствие для пароля.
    times.allow list Список периодов времени в течение которых заходить в систему можно
    times.deny list Список периодов времени в течение которых заходить в систему запрещено
    ttys.allow list Список терминалов или групп терминалов которые пользователь с данным классом может использовать. Группы терминалов указаны в файле /etc/ttys(5)
    ttys.deny list Список терминалов или групп терминалов которые пользователю с данным классом запрещено использовать. Группы терминалов указаны в файле /etc/ttys(5)
    warnexpire time Период времени за который необходимо предупреждать пользователя об истечении срока действия учётной записи.
    warnpassword time Период времени за который необходимо предупреждать пользователя об истечении срока действия пароля.


    В опциях 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) .

    Задание классов для системных пользователей является очень хорошим средством индивидуального ограничения пользователя, но используйте это средство осознанно и с осторожностью.

    Для управления пользователями и группами будут полезны следующие команды:

  • Модель полномочий и пользователей, используемая в операционной системе FreeBSD и большинстве систем семейства UNIX достаточно простая и одноуровневая. Не то, что Windows со своими вложенными одна в другую группами:-).

    В FreeBSD существует только два типа пользователей: обычные пользователи и суперпользователь root. Ну и соответственно плоское пространство групп.

    На первый взгляд может показаться, что эта схема менее практична, чем схема Windows. Но всё-таки у любой из схем есть свои плюсы и минусы. Сложная иерархическая система групп, пользователей и полномочий Windows позволяет более гибко настроить политику доступа, но также увеличивает вероятность того, что что-то может пойти не так. Да и велика вероятность допустить ошибку, степень которой может варьироваться в широких пределах. Ладно б там, начальник не получил доступ к своей папке. А если все получили доступ к закрытым документам?

    Каждый обычный пользователь системы FreeBSD обладает ограниченными полномочиями и имеет закреплённое за собой место хранения файлов (домашняя директория). Когда мы подключаемся к компьютеру удалённо, то являемся там, как правило, рядовым пользователем. Мы сразу попадаем в свой домашний каталог, в котором можем изменять файлы. И то только потому, что являемся их владельцем.

    Для того, чтобы олицетворить себя суперпользователем, используем команду su. Потребуется ввести пароль суперпользователя, который является “ключом от всех дверей” нашей системы. После получения доступа на уровне суперпользователя мы получим такие возможности для создания или удаления файлов на компьютере, какие не сможем получить ни на одной системе под управлением Windows.

    Важно помнить, что работая в системе под root нужно соблюдать повышенные меры безопасности. Система не будет сомневаться в компетентности root-а, если он сказал – удалить важные каталоги, значит так нужно.

    Для того, чтобы выполнить команду su, нужно быть членом группы, называемой “wheel”. В эту группу входят те пользователи, которым полномочно становиться суперпользователями.

    “Кто все эти люди?”

    Есть ещё одна особенность. Наряду с регистрирующимися пользователями (люди, которые подключаются к системе), существуют и автоматические пользователи (bin, daemon, nobody, operator, www и прочие). Эти учётные записи существуют, чтобы владеть некоторыми системными процессами. Важно понимать тут, что каждый процесс, как и файл, должен принадлежать некоторому пользователю и все процессы ограничены полномочиями тех пользователей, которым они принадлежат.

    Пользователи никогда не обращаются к своим файлам напрямую. Все, что делает пользователь со своими файлами с помощью команд – на самом деле выполняет процесс, от имени пользователя. Процессы оперируют файлами или другими процессами. Процессы, принадлежащие пользователю ivan могут работать только с файлами и процессами, которые принадлежат пользователю ivan. В доступе может быть отказано, если один из этих процессов попытается изменить файл или процесс пользователя andrey.

    Для чего же нужны псевдопользователи? Представим, что пользователь ivan стал вдруг суперпользователем. Все процессы, выполняемые от имени ivan станут обладать абсолютной властью по отношению к процессам другого пользователя. А что, если один из таких процессов читает особый конфигурационный файл и изменяет параметры системы? А что, если по причине какой-либо ошибки любой может получить доступ к конфигурационному файлу или иным способом передать потенциально небезопасные параметры в программу, выполняющуюся с абсолютными правами? Система может быть уничтожена. Без вопросов и лишних предупреждений. Поэтому каждый сервис должен быть запущен от имени определённого псевдопользователя и быть “запертым” в пространстве своих “владений”, чтобы ненароком не повредить остальную часть системы.

    Для чего нужны группы?

    Каждый пользователь принадлежит определённой первичной группе, которая, как правило, имеет то же имя, что и пользователь. Фактически пользователь является единственным членом своей первичной группы. Но ничто не мешает нам создать группу, например ftpusers и добавить пользователей в неё. Кстати, управлять принадлежностью пользователей может только суперпользователь root.

    В общем случае группы нужды для того, чтобы предоставить определённым пользователям возможность совместной работы с некоторыми файлами или процессами. Ведь нежелательно, чтобы разные люди использовали одну учётную запись для доступа к файлам, нежелательно, чтобы один пароль был известен кому-то ещё. И группы могут предоставить разным пользователям равные привилегии.


    Пример 13-2. Добавление пользователя в FreeBSD 5.X

    # adduser

    Username: jru

    Full name: J. Random User

    Uid (Leave empty for default):

    Login group :

    Login group is jru. Invite jru into other groups? : wheel

    Login class :

    Shell (sh csh tcsh zsh nologin) : zsh

    Home directory :

    Use password-based authentication? :

    Use an empty password? (yes/no) :

    Use a random password? (yes/no) :

    Enter password again:

    Lock out the account after creation? :

    Full Name: J. Random User

    Groups: jru wheel

    Shell: /usr/local/bin/zsh

    OK? (yes/no): yes

    adduser: INFO: Successfully added (jru) to the user database.

    Add another user? (yes/no): no

    13.6.2. rmuser

    Для полного удаления пользователя из системы вы можете использовать rmuser(8). Эта программа выполняет следующие действия:

    1. Удаление записи пользователя из crontab(1) (если она присутствует).

    2. Удаляет задачи at(1), принадлежащие пользователю.

    3. Уничтожает все процессы, принадлежащие пользователю.

    4. Удаляет пользователя из локального файла паролей.

    5. Удаляет домашний каталог пользователя (если он принадлежит пользователю).

    6. Удаляет принадлежащую пользователю входящую почту из /var/mail.

    7. Удаляет все файлы, принадлежащие пользователю, из каталогов с временными файлами, например /tmp.

    8. Наконец, удаляет имя пользователя из всех групп, которым оно принадлежит, в /etc/group.

    Замечание: Если после этого удаления группа остается пустой и имя группы совпадает с именем пользователя, она удаляется; Это необходимо для удаления пользовательских уникальных групп, создаваемых adduser(8).

    rmuser(8) не может использоваться для удаления учетной записи суперпользователя, поскольку это почти всегда означает разрушение системы.

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

    Пример 13-3. Интерактивное удаление учетной записи с помощью rmuser

    # rmuser jru

    Matching password entry:

    jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh

    Is this the entry you wish to remove? y

    Remove user"s home directory (/home/jru)? y

    Updating password file, updating databases, done.

    Updating group file: trusted (removing group jru -- personal group is empty) done.

    Removing user"s incoming mail file /var/mail/jru: done.

    Removing files belonging to jru from /tmp: done.

    Removing files belonging to jru from /var/tmp: done.

    Removing files belonging to jru from /var/tmp/vi.recover: done.

    13.6.3. chpass

    chpass(1) изменяет информацию в базе данных пользователей: пароли, оболочки, персональную информацию.

    Только системные администраторы с правами суперпользователя могут изменять информацию и пароли других пользователей с помощью chpass(1).

    При запуске без параметров (кроме опционального имени пользователя), chpass(1) вызывает редактор, содержащий информацию о пользователе. Когда пользователь выходит из редактора, база данных пользователей обновляется этой информацией.

    Замечание: В FreeBSD 5.X, после выхода из редактора будет запрошен пароль (если вы не суперпользователь.

    Пример 13-4. Интерактивная работа с chpass суперпользователя

    Gid [# or name]: 1001

    Change :

    Expire :

    Home directory: /home/jru

    Shell: /usr/local/bin/zsh

    Full Name: J. Random User

    Office Location:

    Other information:

    Обычные пользователи могут изменять лишь небольшую часть этой информации, и только для своей учетной записи.

    Пример 13-5. Интерактивная работа с chpass обычного пользователя

    #Changing user database information for jru.

    Shell: /usr/local/bin/zsh

    Full Name: J. Random User

    Office Location:

    Other information:

    Замечание: chfn(1) и chsh(1) это всего лишь ссылки на chpass(1), как и ypchpass(1), ypchfn(1) и ypchsh(1). NIS поддерживается автоматически, так что указание yp перед командой не обязательно. Если это непонятно, не беспокойтесь, NIS будет рассмотрен в Гл. 23.

    13.6.4. passwd

    passwd(1) это обычный способ изменения собственного пароля пользователя, или пароля другого пользователя суперпользователем.

    Замечание: Для предотвращения случайного или неавторизованного изменения, перед установкой нового пароля необходимо ввести старый.

    Пример 13-6. Изменение пароля

    % passwd

    Retype new password:

    Пример 13-7. Изменение пароля другого пользователя суперпользователем

    # passwd jru

    Changing local password for jru.

    Retype new password:

    passwd: updating the database...

    Замечание: Как и с chpass(1), yppasswd(1) это всего лишь ссылка на passwd(1), так что NIS работает с обеими командами.

    13.6.5. pw

    pw(8) это утилита командной строки для создания, удаления, модифицирования и отображения пользователей и групп. Она функционирует как внешний интерфейс к системным файлам пользователей и групп. У pw(8) очень мощный набор параметров командной строки, что делает это программу подходящей для использования в shell скриптах, но новым пользователям она может показаться более сложной, чем другие представленные здесь команды.

    13.7. Ограничение пользователей

    Если у вас есть пользователи, может появиться мысль о возможности ограничения нагрузки на систему. FreeBSD предоставляет администратору несколько способов ограничения объема занимаемых пользователями системных ресурсов. Существует два вида ограничений: дисковые квоты и другие ограничения ресурсов.

    Дисковые квоты ограничивают объем пространства, занимаемого пользователями, это способ быстрой проверки объема без вычисления его каждый раз. Квоты обсуждаются в Разд. 16.14.

    Другие ограничения ресурсов включают способы ограничения использования CPU, памяти и других ресурсов, которые могут потребляться пользователем. Ограничения накладываются с помощью классов учетных записей и обсуждаются в этом разделе.

    Классы учетных записей определяются в /etc/login.conf. Описание полной семантики выходит за пределы обсуждаемого здесь материала, она детально описана в странице справочника login.conf(5). Достаточно сказать, что каждому пользователю присвоен класс (default по умолчанию), и каждому классу присвоен набор характеристик. Характеристика определяется в виде пары имя =значение , где имя это определенный идентификатор, а значение это произвольная строка, обрабатываемая в зависимости от имени. Настройка классов и характеристик довольно проста и также описана в login.conf(5).

    Замечание: Система не читает настройки в /etc/login.conf непосредственно, она обращается к файлу базы данных /etc/login.conf.db. Для создания /etc/login.conf.db из /etc/login.conf, выполните следующую команду:

    # cap_mkdb /etc/login.conf

    Ограничения на ресурсы отличаются от обычных характеристик: во-первых, для каждого ограничения существует “мягкое” (текущее) и “жесткое” ограничение. Мягкое ограничение может настраиваться пользователем или приложением, но не может превышать жесткое ограничение. Последнее может быть уменьшено пользователем, но никогда не увеличено. Во-вторых, большинство ограничений ресурсов применяются к процессам определенного пользователя, а не к пользователю вообще. Обратите внимание, что эти различия реализуются специфической обработкой лимитов, а не реализацией структуры характеристик учетных записей (т.е. это не настоящий специальный случай характеристик).

    Ниже приведен список наиболее часто используемых ограничений на ресурсы (остальные, вместе с другими характеристиками можно найти в login.conf(5)).

    Ограничение на размер файла core, генерируемого программой, по очевидным причинам подчиняющееся другим ограничениям на используемое дисковое пространство (например, filesize, или дисковые квоты). Тем не менее, оно часто используется как менее строгий метод контролирования потребления дискового пространства: поскольку пользователь не создает файлы core самостоятельно, и зачастую не удаляет их, установка этого параметра может предохранить его от выхода за пределы дисковых квот, если большая программа (например, emacs ) создаст core файл.

    Это максимальное количество времени CPU, потребляемого пользователем. Превысившие это время процессы будут уничтожены ядром.

    Замечание: Это ограничение потребляемого времени CPU, а не процентов использования CPU, которые отображаются в некоторых полях top(1) и ps(1). Ограничения на них на время написания этого материала невозможны и такие ограничения практически бесполезны: компилятор - вполне законное приложение - иногда может легко использовать почти 100% CPU.

    Это максимальный размер файла, который может обрабатываться пользователем. В отличие от дисковых квот, это ограничение применяется к отдельным файлам, а не ко всему набору принадлежащих пользователю файлов.

    Это максимальное число процессов, которые могут быть запущены пользователем. В это число включаются и консольные и фоновые процессы. По очевидным причинам, они не могут быть больше, чем системное ограничение, указываемое через переменную sysctl(8) kern.maxproc. Имейте ввиду, что установка слишком жестких ограничений может стать помехой работе пользователя: зачастую полезно входить в систему с нескольких консолей или использовать каналы. Некоторые задачи, такие как компиляция большой программы, также порождают множество процессов (например, make(1), cc(1) и другие препроцессоры).

    Это максимальный объем памяти, блокировка которого может быть запрошена процессом (см. например mlock(2)). Некоторые критически важные для системы программы, такие как amd(8), блокируют память так, что при выгрузке они не создают системе дополнительных проблем.

    Это максимальный объем памяти, которая может быть занята процессами. Он включает основную и основную память и использование подкачки. Это ограничение не снимает все вопросы, связанные с использованием памяти, но для начала это подходящее ограничение.

    Это максимальное количество файлов, которые могут быть открыты процессами. В FreeBSD, файлы также используются для представления сокетов и каналов IPC; не устанавливайте слишком маленькое значение. Ограничение этого параметра, устанавливаемое для всей системы, определяется переменной sysctl(8) kern.maxfiles.

    Это ограничение потребляемого пользователем объема сетевой памяти, т.е. mbufs. Оно было введено как ответ на старые DoS атаки, при которых создавалось множество сокетов, но обычно может быть использовано и для ограничения сетевых соединений.

    Это максимальный размер, до которого может вырасти стек процесса. Сам по себе этот параметр не может ограничить размер используемой программой памяти, следовательно, его необходимо использовать вместе с другими ограничениями.

    Существуют несколько других аспектов, которые необходимо учитывать при установке ограничений ресурсов. Ниже приведены некоторые общие подсказки, советы и различные комментарии.

    Процессам, загружаемым при старте системы скриптами /etc/rc присваивается класс daemon.

    Хотя /etc/login.conf, поставляемый с системой, это хороший источник подходящих значений для большинства ограничений, только вы, администратор, можете знать подходящие значения для вашей системы. Установка слишком слабых ограничений может повлечь злоупотребления системой, а установка слишком сильных ограничений может стать помехой производительности.

    Пользователи X Window System (X11) возможно должны получить больше ресурсов, чем другие пользователи. X11 сама по себе потребляет много ресурсов, а также провоцирует пользователей на одновременный запуск большего количества программ.

    Помните, что многие ограничения применяются к отдельным процессам, а не к пользователю вообще. Например, установка openfiles в 50 означает, что каждый процесс, запущенный пользователем, может открывать до 50 файлов. Таким образом, общее количество файлов, которые могут быть открыты пользователем, вычисляется как openfiles, помноженное на maxproc. Это также применимо к потребляемой памяти.

    За дальнейшей информацией по ограничениям на ресурсы, классам учетных записей и характеристикам, обращайтесь к соответствующим страницам справочника.

    13.8. Персонализация пользователей

    Локализация это окружение, настраиваемое системным администратором или пользователем для работы с различными языками, наборами символов, стандартами даты и времени, и так далее. Это обсуждается в главе локализация.

    13.9. Группы

    Группа это просто список пользователей. Группа идентифицируется по имени и GID (Group ID, идентификатор группы). В FreeBSD (и большинстве других UNIX-подобных системах) ядро для определения прав процесса использует два фактора: его ID пользователя и список групп, которым он принадлежит. Когда вы слышите что-то о “group ID” пользователя или процесса, это обычно означает только первую группу из списка.

    Имена групп связываются с ID групп в файле /etc/group. Это текстовый файл с четырьмя разделенными двоеточием полями. Первое поле это имя группы, второе это зашифрованный пароль, третье это ID группы, а четвертое это разделенный запятыми список членов группы. Этот файл может быть безопасно отредактирован вручную (предполагается, конечно, что вы не сделаете синтаксических ошибок!). За более полным описанием синтаксиса обратитесь к странице справочника group(5).

    Если вы не хотите редактировать /etc/group вручную, используйте команду pw(8) для добавления и редактирования групп. Например, для добавления группы, называемой teamtwo, и проверки ее существования вы можете использовать:

    Пример 13-8. Добавление группы с использованием pw(8)

    # pw groupadd teamtwo

    # pw groupshow teamtwo

    Число 1100 это ID группы teamtwo. На данный момент в, teamtwo нет членов, и поэтому она практически бесполезна. Давайте изменим эту ситуацию, добавив jru в группу teamtwo.

    Пример 13-9. Добавление пользователя в группу с использованием pw(8)

    # pw groupmod teamtwo -M jru

    # pw groupshow teamtwo

    teamtwo:*:1100:jru

    Аргумент к параметру -M это разделенный запятыми список пользователей, являющихся членами группы. Из предыдущих разделов мы знаем, что файл паролей также указывает группу для каждого пользователя. Пользователь автоматически добавляется системой к списку групп; пользователь не будет показан как член группы при использовании pw(8) groupshow, но эта информация будет показана при использовании id(1) или похожего инструмента. Другими словами, с этим параметром программа pw(8) работает только с файлом /etc/group; она никогда не будет пытаться получить дополнительную информацию из файла /etc/passwd.

    Пример 13-10. Использование id(1) для определения принадлежности к группам

    % id jru

    uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)

    Как вы можете видеть, jru является членом групп jru и teamtwo.

    За дальнейшей информацией о pw(8), обратитесь к ее странице справочника, а за дополнительной информацией о формате файла /etc/group к странице справочника group(5).

    Примечания

    1. Конечно, пока не используется множество терминалов, но мы оставим эту тему для Гл. 20.

    2. Возможно использование UID/GID вплоть до 4294967295, но эти ID могут вызвать серьезные проблемы с программами, делающими предположения о значениях ID.

    3. С параметром -s adduser(8) не будет выводить информацию. Позже для изменения настроек по умолчанию мы используем параметр -v.

    Глава 14. Безопасность

    Большая часть этой главы была взята из страницы справочника security(7) которую написал Matthew Dillon. Перевод на русский язык: Денис Пеплин.

    14.1. Краткое описание

    Эта глава представляет введение в основные концепции безопасности системы, некоторые эмпирические правила и более подробно обращается к отдельным темам, касающимся FreeBSD. Большая часть затрагиваемых тем может быть применена к безопасности системы и безопасности в интернет вообще. Интернет больше не то “дружественное” место, где каждый хочет быть вам добрым соседом. Защита системы необходима для сохранения ваших данных, интеллектуальной собственности, времени и всего остального от хакеров и им подобных.

    FreeBSD предоставляет массу утилит и механизмов для обеспечения целостности и безопасности системы и сети.

    После прочтения этой главы вы узнаете:

    Основные концепции безопасности системы, специфику FreeBSD.

    О различных механизмах шифрования в FreeBSD, таких как DES и MD5.

    Как настроить аутентификацию с использованием одноразовых паролей.

    Как настроить KerberosIV в релизах FreeBSD до 5.0.

    Как настроить Kerberos5 в релизах FreeBSD после 5.0.

    Как создать межсетевые экраны с помощью IPFW.

    Как настроить IPsec и создать VPN между компьютерами на FreeBSD/Windows.

    Как настроить и использовать OpenSSH , реализацию SSH в FreeBSD.

    Как настроить и загрузить модули расширения контроля доступа, использующие концепцию TrustedBSD MAC.

    Что такое ACL и как их использовать.

    Как работать с сообщениями безопасности FreeBSD.

    Перед чтением этой главы вам потребуется:

    Понимание основных концепций FreeBSD и интернет.

    14.2. Введение

    Безопасность это первая и основная функция системного администратора. Хотя все многопользовательские системы BSD UNIX уже снабжены некоторой защитой, работа по созданию и поддержке дополнительных механизмов безопасности, обеспечивающих защищенную работу пользователей, это одна из самых серьезных задач системного администратора. Компьютеры безопасны настолько, насколько вы сделаете их безопасными и требования безопасности всегда находятся в противоречии с удобством работы пользователей. Системы UNIX способны одновременно работать с огромным количеством процессов и многие из этих процессов серверные - это означает, что с ними могут взаимодействовать внешние программы. Сегодня десктопы заменили мини-компьютеры и мэйнфрэймы, и поскольку компьютеры в наши дни подключены к сети интернет, безопасность важна как никогда.

    Наилучшая реализация системы безопасности представима в виде “послойной” системы. Вообще говоря все, что нужно сделать, это создать столько слоев безопасности, сколько необходимо и затем внимательно следить за вторжениями в систему. Не переусердствуйте в настройке системы безопасности, иначе она сделает невозможной обнаружение вторжений, являющееся одним из наиболее важных аспектов механизма безопасности. Например, нет большого смысла в установке флага schg (chflags(1)) на каждый исполняемый файл системы, поскольку хотя таким способом можно временно защитить исполняемые файлы, это помешает обнаружению факта взлома системы.

    Безопасность системы также относится к различным формам атак, имеющих своей целью вызвать крах системы, или сделать систему недоступной другим способом, но не пытающихся получить доступ к учетной записи root (“break root”). Угрозы безопасности могут быть поделены на несколько категорий:

    1. Отказ в обслуживании (Denial of service, DoS).

    2. Взлом пользовательских учетных записей.

    3. Взлом учетной записи root через доступные сервисы.

    4. Взлом учетной записи root через учетные записи пользователей.

    5. Создание backdoor.

    Атака “отказ в обслуживании” отбирает у машины необходимые ресурсы. Обычно DoS атаки используют грубую силу, чтобы попытаться обрушить систему или сделать ее недоступной другим способом, превысив лимиты ее сервисов или сетевого стека. Некоторые DoS атаки пытаются использовать ошибки в сетевом стеке для обрушения системы одним пакетом. Эту проблему можно решить только исправив ядро системы. Атаки зачастую можно предотвратить правильной установкой параметров, ограничивающих нагрузку на систему в неблагоприятных условиях. С атаками, использующими грубую силу, бороться сложно. Например, атака с использованием пакетов с поддельными адресами, которую почти невозможно остановить, может быстро отключить вашу систему от интернет. Возможно, она не приведет к отказу системы, но сможет переполнить соединение с интернет.

    Взлом учетной записи пользователя обычно встречается чаще, чем DoS атаки. Многие системные администраторы все еще используют стандартные сервисы telnetd , rlogind и ftpd на своих серверах. Эти сервисы по умолчанию не работают с зашифрованными соединениям. В результате при среднем количестве пользователей пароль одного или нескольких пользователей, входящих в систему через внешнее соединение (это обычный и наиболее удобный способ входа в систему), будет перехвачен. Внимательный системный администратор должен анализировать логи удаленного доступа на предмет подозрительных адресов пользователей даже в случае успешного входа.

    Кто-то может предположить, что атакующий при наличии доступа к учетной записи пользователя может взломать учетную запись root. Однако, реальность такова, что в хорошо защищенной и поддерживаемой системе доступ к учетной записи пользователя не обязательно даст атакующему доступ к root. Разница между доступом к обычной учетной записи и к root важна, поскольку без доступа к root атакующий обычно не способен скрыть свои действия, и в худшем случае сможет лишь испортить файлы пользователя или вызвать крах системы. Взлом пользовательских учетных записей встречается очень часто, поскольку пользователи заботятся о безопасности так, как системные администраторы.

    Системные администраторы должны помнить, что существует множество потенциальных способов взлома учетной записи root. Атакующий может узнать пароль root, найти ошибку в сервисе, работающем с привилегиями и взломать учетную запись root через сетевое соединение с этим сервисом, или узнать об ошибке в suid-root программе, позволяющей атакующему взлом root с помощью взломанной учетной записи пользователя. Если атакующий нашел способ взлома root, ему может не понадобиться установка backdoor. Многие из обнаруженных и закрытых на сегодняшний день брешей в системе, позволяющие взлом root, требуют от атакующего серьезной работы по заметанию следов, поэтому большинство атакующих устанавливают backdoor. Backdoor предоставляет атакующему простой способ восстановления доступа к системе с привилегиями root, но также дает системному администратору удобный способ обнаружения вторжения. Устранение возможности установки backdoor возможно повредит безопасности системы, поскольку это не устранит брешь, позволившую проникнуть в систему.

    FreeBSD Проект Документации FreeBSD Руководство FreeBSD Проект Документации FreeBSD Опубликовано Февраль 1999 Copyright © ... с дистрибьюцией. Важно: ЭТА ДОКУМЕНТАЦИЯ ПОСТАВЛЯЕТСЯ ПРОЕКТОМ ДОКУМЕНТАЦИИ FREEBSD "КАК ЕСТЬ" И ЛЮБЫЕ ЯВНЫЕ...

  • Руководство FreeBSD по созданию портов

    Руководство

    Такие обозначения появляются в этой книге, и Проекту FreeBSD известно о торговой марке, к обозначению добавляется... , поставляемых с дистрибьюцией. Важно: ЭТА ДОКУМЕНТАЦИЯ ПОСТАВЛЯЕТСЯ ПРОЕКТОМ ДОКУМЕНТАЦИИ FREEBSD "КАК ЕСТЬ" И ЛЮБЫЕ ЯВНЫЕ ИЛИ...

  • Проект плану-графіка підвищення кваліфікації керівників і фахівців товариства у філії “центр післядипломної освіти” ват “укртелеком” у 2010 році

    Документ

    ... ій управління проектом ▪ Типи проект ів та складання плану проекту в MS Projeсt ... нтерфейсу користувача (на прикладі FreeBSD та Linux); адміністрування... документи ▪ Складні випадки правопису в документац ії. Синтаксичні структури діловодства. Пунктуація...

  • Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС 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:

    root:$1 $SJSDMXQE $LRpetLGNt5xO8k980r2om .:0 :0 ::0 :0 0 :0 ::0 :0 1 :1 ::0 :0 2 :5 ::0 :0 3 :7 ::0 :0 4 :65533 ::0 :0 5 :65533 ::0 :0 7 :13 ::0 :0

    Каждая новая строка в файле описывает пользователя, она содержит в себе столбцы разделённые (:).

    Столбцы по порядку:

    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 – отсутствие ограничений

    Ограничение ресурсов:

    Название опции   Тип значения Описание
    coredumpsize size Ограничивает размер файла coredump
    cputime time Ограничивает время использования процессора
    datasize size Максимальный размер данных
    filesize size Максимальный размер файла. Запрещает создавать файлы больше указанного размера
    maxproc number Максимальное число процессов которые может создать пользователь
    memorylocked size Максимальный размер в core memory котрую может заблокировать процесс
    memoryuse size Максимальный размер памяти которую может использовать процесс
    openfiles number Максимально количество файлов которые может открыть каждый процесс
    sbsize size Максимально разрешённый размер сокетбуфера
    vmemoryuse size Максимально разрешенный размер виртуальной памяти для каждого процесса
    stacksize size Максимальный размер стека


      Ресурсы могут ограничиваться как мягкими, так и жёсткими ограничениями, разница между ними состоит в том, что жёсткие ограничения пользователь не сможет увеличивать, а мягкие сможет, но не больше чем жёсткое значение. Для обозначения мягких и жёстких ограничений используются специальные суффиксы –max и –cur . Пр: filesize-max

    Окружение пользователя:

    Название опции   Тип значения   Дефолт   Описание
    charset   string     Устанавливает значение переменной окружения $MM_CHARSET. Пр: KOI8-R
    hushlogin   bool   false   Разрешает (false) показывать файл /etc/motd при загрузке или запрещает (true). Тоже самое что присутствие файла ~/.hushlogin в домашнем каталоге.
    ftp-chroot   bool   false   Делать chroot(2) пользователя в его домашнем каталоге при заходе по FTP. Применительно только к стандартному демону ftpd(8).
    ignorenologin   bool   false   Логин не блокируется nologin.
    label   string     Политика MAC (maclabel(7)) применяемая к пользователю.
    lang   string Устанавливает значение переменной окружения $LANG. Пр: ru_RU.KOI8-R
    manpath   path     Определяет пути поиска man страниц
    nocheckmail   bool   false   Показывать состояние почтового ящика при заходе пользователя в систему.
    nologin   file     Если данный файл существует то отображается его содержимое при заходе в систему и сессия закрывается. Можно указать данную опцию в классе для пользователя и заблокировать для него вход в систему если даже у него в файле /etc/master.passwd установлена оболочка.
    path   path     Определяет пути поиска выполняемых файлов или программ.
    priority   number     Определяет первоначальный приоритет пользователя (nice(1)).
    requirehome   bool   false   Требуется ли пользователю рабочий домашний каталог. Если его нет то пользователь не сможет войти в систему.
    setenv   list     Устанавливает переменные окружения в виде переменная=значение разделённые запятой
    shell   prog     Оболочка пользователя. Имеет приоритет над оболочкой указанной в файле /etc/master.passwd.
    term   string     Определяет тип терминала.
    timezone   string     Устанавливает значение переменной окружения $TZ. Зоны находятся /usr/share/zoneinfo.
    umask   number   022   Определяет права на создаваемые файлы. Права рассчитываются вычитанием маски из 666 а на каталог из 777.
    welcome   file   ./etc/motd   Файл приветствия который показывается при заходе пользователя в систему.
    Название опции   Тип значения   Дефолт   Описание
    copyright   file     Дополнительный файл содержащий информацию о кооперайтах
    host.allow   list     Список удалённых хостов с которых пользователи данного класса могут заходить на машину.
    host.deny   list     Список удалённых хостов с которых пользователи данного класса не могут заходить на машину.
    login_prompt   string     Строка выводимая при запросе логина login(1)
    login-backoff   number     Определяет величину задержки умноженную на 5 секунд между неправильными логинами после того как исчерпаются попытки входа параметр ниже. Применимо к неудалённому терминалу.
    login-retries   number   10   Количество разрешённых неправильных попыток входа прежде чем логин будет признан неудачным.
    passwd_format   string     Формат в котором будет шифроваться новый пароль. Значения которые можно использовать – ‘md5’ ‘blf’ ‘des’. Советую по умолчанию использовать формат шифрования – "blf’ так как это наиболее криптостойкий алгоритм.
    passwd_prompt   string     Приветствие для пароля.
    times.allow   list     Список периодов времени в течение которых заходить в систему можно
    times.deny   list     Список периодов времени в течение которых заходить в систему запрещено
    ttys.allow   list     Список терминалов или групп терминалов которые пользователь с данным классом может использовать. Группы терминалов указаны в файле /etc/ttys(5)
    ttys.deny   list     Список терминалов или групп терминалов которые пользователю с данным классом запрещено использовать. Группы терминалов указаны в файле /etc/ttys(5)
    warnexpire   time     Период времени за который необходимо предупреждать пользователя об истечении срока действия учётной записи.
    warnpassword   time     Период времени за который необходимо предупреждать пользователя об истечении срока действия пароля.


    В опциях 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) .

      Задание классов для системных пользователей является очень хорошим средством индивидуального ограничения пользователя, но используйте это средство осознанно и с осторожностью.

    Для управления пользователями и группами будут полезны следующие команды: