02. FreeBSD - Работа с пользователями v2.ppt
- Количество слайдов: 64
Free. BSD Работа с пользователями
Основные идеи • В основе системы безопасности Free. BSD лежит концепция пользователей и групп. • Одноуровневая модель безопасности • Все решения о том, что разрешается или не разрешается пользователю, принимаются на основании того, кем является вошедший в систему пользователь с точки зрения ядра ОС.
Учетная запись • С каждой учетной записью связана определенная идентификационная информация: – – – – – Имя пользователя (Login) Пароль ID пользователя (User ID, UID) ID группы (Group ID, GID) Класс логина Время изменения пароля Время истечения действия учетной записи Полное имя пользователя Домашний каталог Оболочка пользователя
Типы пользователей • Три типа пользователей: – суперпользователь (root) – системные (псевдо) пользователи (bin, operator, nobody и т. д. ) – обычные пользователи.
Файлы учетных записей //etc/passwd //etc/master. passwd //etc/pwd. db //etc/spwd. db Команда pwd_mkdb -p
Файл master. passwd
Добавление учетной записи Команда adduser
Удаление учетной записи Команда rmuser
Удаление учетной записи • Команда rmuser выполняет следующие действия: – – – – Удаление записи пользователя из crontab (если она присутствует). Удаляет задачи at, принадлежащие пользователю. Уничтожает все процессы, принадлежащие пользователю. Удаляет пользователя из локального файла паролей. Удаляет домашний каталог пользователя (если он принадлежит пользователю). Удаляет принадлежащую пользователю входящую почту из /var/mail. Удаляет все файлы, принадлежащие пользователю, из каталогов с временными файлами, например /tmp. Удаляет имя пользователя из всех групп, которым оно принадлежит, в /etc/group.
Изменения информации в базе данных пользователей Команда chpass изменяет информацию в базе данных пользователей: пароли, оболочки, персональную информацию.
Изменение пароля • Команда Passwd – изменение собственного пароля или паролей других пользователей
Блокирование учетной записи
Утилита PW • это утилита командной строки для создания, удаления, модифицирования и отображения пользователей и групп. • Удобна при использовании в скриптах
Группы • Группа это список пользователей. • Группа идентифицируется по имени и GID (Group ID). • В Free. BSD ядро для определения прав процесса использует два фактора: его ID пользователя и список групп, которым он принадлежит.
Файл /etc/group
Создание группы • ручное добавление записи о новой группе в файл /etc/group • Использование утилиты pw # pw group add Developers # pw group show Developers teamtwo: *: 1100:
Добавление пользователя в группу • ручное добавление (редактирование файла /etc/group) • Использование утилиты pw # pw groupmod Developers –M Ivanov # pw groupshow Developers : *: 1100: Ivanov
Удаление группы • редактирование файла /etc/group • Использование утилиты pw # pw groupdel Developers
Определение принадлежности к группам # id Ivanov uid=1001(Ivanov) groups=1001(Ivanov), 1100(Developers)
Полезные команды • whoami - выдает действующий идентификатор пользователя • who – список зарегистрировавшихся в системе пользователей • last - список пользователей, зарегистрировавшихся последними • users - выдает имена пользователей в системе
Выполнение команд от имени других пользователей Команды: su, sudo
SU • Команда su позволяет становиться другим пользователем без логического отключения. По умолчанию имя пользователя root. • su username – вход под именем username • su -username – вход под именем username + смена окружения • su – вход под именем root-a
SU • Для того, чтобы изменить свои привилегии на пользователя root (или любого другого пользователя, имеющего привилегии администратора), вы должны быть членом группы wheel.
Sudo • Команда sudo позволяет выполнить команду от имени другого пользователя
Sudo • Список пользователей + разрешенный перечень команд: /usr/local/etc/sudoers • visudo – редактирование файла sudoers
Файл sudoers: псевдонимы • Имеется четыре типа псевдонимов: – User_Alias, – Runas_Alias, – Host_Alias, – Cmnd_Alias. • Определение псевдонима: – Тип_Псевдонима НАЗВАНИЕ = элемент1, элемент2, . . .
Примеры псевдонимов Определение псевдонимов пользователя • User_Alias FULLTIMERS = ivanov, petrov • User_Alias PARTTIMERS = sidorov, kuznecov • User_Alias WEBMASTERS = user 1, user 2
Примеры псевдонимов Определение псевдонимов Runas (Выполнить как) • Runas_Alias OP = root, operator • Runas_Alias DB = oracle, sybase
Примеры псевдонимов Определение псевдонимов машин • Host_Alias CUNETS = 128. 138. 0. 0/255. 0. 0 • Host_Alias CSNETS = 128. 138. 243. 0, 128. 138. 204. 0/24, 128. 138. 242. 0 • Host_Alias SERVERS = master, mail, www, ns • Host_Alias CDROM = orion, perseus, hercules
Примеры псевдонимов Определение псевдонимов Cmnd(команд) • Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/restore, /usr/sbin/rrestore • Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown • Cmnd_Alias HALT = /usr/sbin/halt, /usr/sbin/fasthalt • Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, /usr/local/bin/tcsh, /usr/bin/rsh, /usr/local/bin/zsh
Примеры записей в sudoers • Cупер-пользовател (root) и любой пользователь в группе wheel может выполнить любую команду на любой машине от имени любого пользователя. • root ALL = (ALL) ALL • %wheel ALL = (ALL) ALL
Примеры записей в sudoers • Пользователь Ivanov может выполнить любую команду на любой машине без аутентификации. • Ivanov ALL = NOPASSWD: ALL
Примеры записей в sudoers • Пользователь Ivanov может выполнить любую команду на машине WS 1. • Ivanov WS 1 = ALL
Примеры записей в sudoers • Пользователь operator может выполнять команды ограничивающиеся простым обслуживанием. В данном случае таковыми являются резервное копирование, уничтожение процессов, система печати, выключение системы и любая команда в каталоге /usr/oper/bin/. • operator ALL = DUMPS, KILL, PRINTING, SH UTDOWN, HALT, REBOOT, /usr/oper/bin/
Примеры записей в sudoers • Пользователю Ivanov разрешено изменять любой пароль, за исключением пароля супер-пользователя (root) на машинах HPPA. • Ivanov HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root
Примеры использования sudo • sudo shutdown – выполнение команды shutdown от имени root • sudo –u Ivanov ls ~Ivanov – выполнение команды ls от имени Ivanov
Примеры использования sudo • sudo –l – список разрешенных команд для данного пользователя • sudo –k - лишает законной силы временную метку пользователя
Преимущества sudo ü Выполнение рутинных операций без лишних привилегий ü Ведется список всех пользователей с «дополнительными» полномочиями ü Регистрация команд повышает степень контроля за системой ü Лишение полномочий без смены пароля root
Недостатки sudo ü Брешь в системе безопасности любого привилегированного пользователя = нарушение защиты учетной записи rootа ü временный выход в командный интерпретатор из разрешенной программы ü sudo csh или sudo su
Ограничения пользователей
Ограничение пользователей • Существует два вида ограничений: – дисковые квоты – другие ограничения ресурсов. Детальное описание ограничений: # Man LOGIN. CONF
Ограничение пользователей • Ограничения ресурсов включают способы ограничения использования CPU, памяти и других ресурсов, которые могут потребляться пользователем. • Ограничения накладываются с помощью классов учетных записей. • Классы учетных записей определяются в /etc/login. conf. • Каждому пользователю присвоен класс (default по умолчанию), и каждому классу присвоен набор характеристик. • Характеристика определяется в виде пары имя=значение, где имя это определенный идентификатор, а значение это произвольная строка, обрабатываемая в зависимости от имени.
Ограничение пользователей • Для каждого ограничения существует ''мягкое'' (текущее) и ''жесткое'' ограничение. • Мягкое ограничение может настраиваться пользователем или приложением, но не может превышать жесткое ограничение. • Последнее может быть уменьшено пользователем, но никогда не увеличено. • Большинство ограничений ресурсов применяются к процессам определенного пользователя, а не к пользователю вообще.
База данных login-классов • База данных login-классов является расширением "учетной записи" (user account). • База данных "учетных записей" содержит только основную информацию, необходимую для регистрации пользователя в системе и создания для него "среды обитания".
login. conf • База данных login-классов находится в файле /etc/login. conf • Система не читает настройки в /etc/login. conf непосредственно, она обращается к файлу базы данных /etc/login. conf. db для ускорения доступа к данным. • Для создания /etc/login. conf. db из /etc/login. conf, используется команда: • # cap_mkdb /etc/login. conf
Общее устройство login. conf • Каждая запись представляет собой набор полей, разделенных двоеточием. • Первое поле в каждой записи является ее уникальным именем-идентификатором и представляет собой имя "login class'а", по которому программы выбирают информацию из базы данных. • Каждое поле обычно пишется на отдельной строке, а для указания "переноса" используется обратный слэш ("") в конце строки.
Пример default: : copyright=/etc/COPYRIGHT: : welcome=/etc/motd: : nologin=/var/run/nologin: : cputime=unlimited: : datasize=unlimited: : stacksize=unlimited: : memorylocked=unlimited:
Каждое поле содержит запись типа имя = значение (например, : cputime=infinity) или логическую переменную (например, : requirehome@)
• Для большей гибкости в login. conf предусмотрено специальное имя tc, которое означает - "а продолжение возьмем оттуда". • Его значением должно быть имя записи, которая и берется в качестве продолжения.
Пример • Пусть есть некоторый класс для студентов: students: : cputime=1 h: : datasize=8 M: : stacksize=2 M: Опишем новый класс для преподавателей: teachers: : cputime=2 h: : tc=students:
Ограничения ( limits ) • man getrlimit cputime - общее "процессорное время", которое может использовать отдельный процесс. (Это не все время, в течении которого процесс запущен, а сумма "квантов времени" в течении которых процесс действительно использовал CPU). filesize - максимальный размер файла, который может создать юзер. datasize - максимальный размер памяти, который программа может запросить под данные stacksize - максимальный размер стэка каждой программы. memoryuse - максимальный размер физической памяти (ОЗУ), занимаемой процессом. memorylocked - максимальный размер памяти, которую процесс может попросить "закрепить" (to lock) в физической памяти. maxproc - максимальное количество процессов, которые может запустить юзер. openfiles - максимальное количество файлов, которые может открыть (одновременно) каждый процесс.
Обозначения единиц измерения • • По умолчанию указывается "размер в байтах". Для более крупных величин: b - блоки по 512 байт. Например - sbsize=10 b k - килобайты. Например - datasize=100 k. m - мегабайты. Например - stacksize=10 m. g - гигабайты. Например - coredumpsize=3 g. t - терабайты. Например - filesize=1 t.
• Для обозначения времени используются единицы измерения • s - секунды. • m - минуты. • h - часы. • d - дни. • w - недели. • y - годы. • Например - 9600 s, 160 m, 2 h 40 m.
Переменные окружения • copyright - файл, который содержит COPYRIGHT текст. • manpath - пути (через пробел) в которых программа man будет искать свои pages. • nologin - имя файла, который будет использоваться вместо файла nologin. • path - Значение переменной $PATH - список путей (через пробел), в которых система будет искать исполняемые файлы • priority - начальное значение приоритета, запускаемых юзером программ. • requirehome - логическое значение, которое говорит о том, что для входа пользователя в систему необходимо, чтобы в его учетной карточке в качестве home directory была прописана существующая и доступная ему директория.
• shell - Shell, который надо запустить для пользователя. Хотя shell указывается и в учетной карточке, но shell, указанный в login. conf, имеет больший приоритет. • term - Значение переменной $TERM - тип терминала. • timezone - Значение переменной $TZ. • welcome - имя файла, который будет использоваться вместо /etc/motd (приветствие, которое распечатывается при входе в систему).
Параметры, влияющие на аутентификацию • minpasswordlen - минимальная длина пароля. • passwd_format - метод зашифровки пароля. Сейчас для Free. BSD метод может быть md 5 или des. • mixpasswordcase - логическая переменная, которая указывает программе passwd, что надо требовать от юзера пароль, в котором есть и прописные, и строчные буквы. • host. allow - список имен хостов, с которых вход в систему разрешен. • host. deny - список хостов, с которых вход запрещен. • times. allow - список интервалов времени, в течении которых юзеру разрешен вход в систему. • times. deny - задает интервалы, в течении которых доступ запрещен. • ttys. allow - список терминалов, вход с которых разрешен. • ttys. deny - список терминалов, вход с которых запрещен.
Параметры и ограничения, связанные с учетом времени, проведенного юзером в системе • accounted - логическая переменная, говорит о том, что для юзеров этого класса надо вести подсчет времени. • autodelete - интервал времени, после которого учетная карточка автоматически удаляется. • daytime - максимальное время, которое юзер может провести в системе, в течении одного дня (точнее - суток). • expireperiod - период, в течении которого лимит времени считается исчерпанным. • graceexpire - дополнительное время, в течении которого юзер может войти в систему, даже если его лимит исчерпан. • gracetime - максимальное время, которое юзер может провести в системе, когда его лимит исчерпан.
• host. accounted - список хостов, при заходе с которых, надо вести подсчет времени. • host. exempt - список хостов, при заходе с которых, время учитывать не нужно. • idletime - если в течении этого времени юзер бездействует, то его сессия заканчивается • monthtime - максимальное (суммарное) время, которое юзер может провести в системе в течении месяца. • passwordtime - время (его устанавливает в учетной карточке программа passwd при смене пароля) в течении которого пароль считается действующим.
• refreshtime - полный лимит времени, который дается юзеру при обновлении лимитов. • refreshperiod - период времени после которого лимит времени обновляется. • sessiontime - максимальное время для юзера за одну сессию. • sessionlimit - максимальное количество одновременно существующих сессий для всех юзеров из данного класса.
• ttys. accounted - список терминалов, при заходе с которых, надо учитывать время. • ttys. exempt - список терминалов, при заходе с которых, учет времени не ведется. • warnexpire - время, когда надо предупредить юзера, что его лимит времени подходит к концу. • warnpassword - время, когда надо предупредить юзера о том, что срок действия его пароля скоро закончится (и пора менять пароль). • warntime - время, когда надо предупредить пользователя, что подходит к концу время суток, когда он может входить в систему (и находиться там). • weektime - максимальное (суммарное) время, которое юзер может провести в системе в течении недели.
Специальные классы • Несколько классов в login. conf имеют специальное значение и могут быть не связаны ни с какими реальными или фиктивными пользователями.
• default – в этой записи вы может указать значения по умолчанию для любых полей. Использоваться эта запись будет в том случае, если вы для какого-нибудь юзера вообще не укажете ни какого класса.
• root – эта запись будет использоваться для юзера root (и для программ, которые выполняются с привилегиями root).
• daemon – это "самая особенная" запись. Ее использует не login, а программа init, которая при старте системы должна запустить другие программы - демоны. Вот для этих daemon'ов используется класс не default, а daemon.
02. FreeBSD - Работа с пользователями v2.ppt