Слабым местом систем UNIX с давних пор была невозможность делегировать часть полномочий системного администратора другим пользователям. Мы хорошо знаем, как передаются полномочия в системах Windows: существуют предопределенные группы, которым дано право выполнять некоторые определенные администраторские действия (Printer Operator, Backup Operator и т.п.) В UNIX для делегирования части администраторских прав в свое время использовалась программа sudo. Второй выход был в том, чтобы установить в правах доступа к некоей административной программе типа useradd бит SUID и доверенный пользователь мог бы запустить ее от имени владельца, т.е. пользователя root.
Оба этих решения не являются совершенными: некоторые виды операций трудно выполнить, имея право запуска отдельных программ. Например, управление учетными записями пользователей не ограничивается их добавлением, и разрешения запускать useradd недостаточно для доверенного пользователя, чтобы помогать системному администратору во всем, что связано с управлением пользователями.
В Solaris начиная с версии 8 была введена новая для UNIX система управления доступом – RBAC (role-based access control). Основанное на ролях управление доступом имеет такую же функциональность, как разнообразие групп с некоторыми административными правами в Windows. Смысл ролей в том, что любому пользователю может быть назначена роль. Ответственность и право выполнения части администраторских функций делегированы роли, и пользователь имеет право ее играть.
Физически роль представляет собой учетную запись специального типа, пользователь не может зайти в систему, указав
su имя_роли
Можно сказать, что роль – это root. Каждой роли могут быть делегированы те или иные права путем назначения ей профилей прав или авторизаций (наборов прав).
Рассмотрим все компоненты RBAC последовательно, начиная с пользователей и ролей.
Всего существует пять компонент: пользователи, роли, профили, авторизации, команды.
Пользователи – это те самые обычные пользователи. Они имеют самые обычные учетные записи. Пользователям может быть дано право играть ту или иную роль, согласно записям в файле /etc/user_attr.
Роли могут быть назначены пользователям. Предопределенных ролей не существует, но можно легко создать новые роли, назначив им один из трех предопределенных профилей. Предполагается, что системный администратор будет самостоятельно создавать роли и назначать их, по мере необходимости, тем или иным пользователям. Соответствие ролей и пользователей (т.е. разрешение конкретному пользователю играть ту или иную роль) описывается файлом /etc/user_attr:
# Copyright (c) 1999-2001 by Sun Microsystems, Inc. All rights reserved. # # /etc/user_attr # # user attributes. see user_attr(4) # #pragma ident "@(#)user_attr 1.5 01/12/11 SMI" # root::::auths=solaris.*,solaris.grant;profiles=All lp::::profiles=Printer Management adm::::profiles=Log Management printmgr::::type=role;profiles=All
Значащих полей в этом файле всего два: имя пользователя (или роли) и атрибуты. Среди атрибутов выделяется атрибут type: он имеет значение role для записи о роли и normal – о пользователе. По умолчанию подразумевается запись о пользователе.
Формат записей в /etc/user_attr следующий:
user:qualifier:res1:res2:attr
где:
user – имя пользователя, такое, как в /etc/passwd ;qualifier – зарезервировано на будущее;res1 – зарезервировано на будущее;res2 – зарезервировано на будущее;attr – атрибуты, разделенные точкой с запятой, вида имя=значение ; допустимые атрибуты – это auths, profiles, roles, type, and project.Атрибут auths предназначен для перечисления предопределенных прав (authorizations), в том числе и групп прав, где значение "все возможные" представляется символом "звездочка" ( * ), например,
auths=solaris.printer.*
обозначает все возможные права набора прав solaris.printer.
Атрибут roles позволяет разрешить пользователю играть различные роли, здесь они перечисляются через запятую. Если в строке, описывающей пользователя, не указан атрибут roles, пользователю запрещается играть какие бы то ни было роли. Например, запись о ролях может быть такой:
roles=printmgrs, useradmin
Атрибут type служит для определения того, относится ли текущая запись к обычному пользователю или описывает роль. Для обычного пользователя следует указывать атрибут
type=normal
и для роли
type=role
Аналогичным образом может быть назначен проект ( project ) и профиль прав ( profiles ) для пользователя или роли.
Профиль в данном контексте – это набор свойств, который можно назначить той или иной роли. В англоязычной литературе профиль, используемый в RBAC, называется профилем прав (Rights Profile). Профиль прав объединяет различные авторизации, чтобы можно было назначить той или иной роли логически связанный набор авторизаций (например, профиль Operator может быть назначен роли, которая нужна для выполнения простых задач администрирования: выполнения резервных копий, управления доступом к принтеру и свойствами принтера). Информация о профилях хранится в файле /etc/security/prof_attr, поля в котором имеют следующие значения:
profname:res1:res2:desc:attr
profname – это имя профиля; регистр букв в имени имеет значение;res1, res2 – зарезервированные поля;desc – описание профиля, в котором указывается смысл данного профиля; это описание должно быть пригодно в качестве пояснения назначения профиля для пользователей приложений высокого уровня (типа attr – атрибуты в таком же виде, как и в других файлах RBAC, допустимые атрибуты – это auths и help. Атрибут auths предполагает указание в качестве его значения списка наборов прав (авторизаций) из числа определенных в файле /etc/security/auth_attr. Атрибут help требует указания страницы в формате HTML, содержащей справку по данному профилю.В нижеследующем примере файла /etc/security/prof_attr опущены некоторые строки, каждый профиль прав описан отдельным абзацем, поскольку в реальном файле он описывается одной длинной строкой, которая не умещается на книжной странице:
# # Copyright (c) 1999-2001 by Sun Microsystems, Inc. All rights reserved. # # /etc/security/prof_attr # # profiles attributes. see prof_attr(4) # #ident "@(#)prof_attr 1.1 01/10/23 SMI" # iPlanet Directory Management:::Manage the iPlanet directory server:help=RtiDSMngmnt.html Media Restore:::Restore files and file systems from backups:help=RtMediaRestore. html Name Service Security:::Security related name service scripts/commands:help=RtNameS erviceSecure.html Device Management:::Control Access to Removable Media:auths=solaris. device.*,solaris.admin.serialmgr.*;help=RtDeviceMngmnt.html Media Backup:::Backup files and file systems:help=RtMediaBkup.html User Security:::Manage passwords, clearances:auths=solaris.role.*,solaris. profmgr.*,solaris.admin.usermgr.*;help=RtUserSecurity.html Audit Control:::Configure BSM auditing:auths=solaris.audit.config,solaris.jobs. admin,solaris.admin.logsvc.purge,solaris.admin.logsvc.read;help=RtAuditCtrl.html User Management:::Manage users, groups, home directory:auths=solaris.profmgr. read,solaris.admin.usermgr.write,solaris.admin.usermgr.read;help=RtUserMngmnt.html Mail Management:::Manage sendmail queues:help=RtMailMngmnt.html Printer Management:::Manage printers, daemons, spooling:help=RtPrntAdmin. html;auths=solaris.admin.printer.read,solaris.admin.printer.modify,solaris.admin. printer.delete Log Management:::Manage log files:help=RtLogMngmnt.html Audit Review:::Review BSM auditing logs:auths=solaris.audit. read;help=RtAuditReview.html Software Installation:::Add application software to the system:help=RtSoftwareInstall.html;auths=solaris.admin.prodreg.read,solaris.admin. prodreg.modify,solaris.admin.prodreg.delete,solaris.admin.dcmgr.admin,solaris.admin. dcmgr.read,solaris.admin.patchmgr.* Network Security:::Manage network and host security:help=RtNetSecure. html;auths=solaris.network.* Operator:::Can perform simple administrative tasks:profiles=Printer Management,Media Backup,All;help=RtOperator.html FTP Management:::Manage the FTP server:help=RtFTPMngmnt.html Project Management:::Manage Solaris projects:auths=solaris.project.read,solaris. project.write;help=RtProjManagement.html DHCP Management:::Manage the DHCP service:auths=solaris. dhcpmgr.*;help=RtDHCPMngmnt.html System Administrator:::Can perform most non-security administrative tasks:profiles=Audit Review,Printer Management,Cron Management,Device Management,File System Management,Mail Management,Maintenance and Repair,Media Backup,Media Restore,Name Service Management,Network Management,Object Access Management,Process Management,Software Installation,User Management,All;help=RtSysAdmin.html Basic Solaris User:::Automatically assigned rights:auths=solaris.profmgr. read,solaris.jobs.users,solaris.mail.mailq,solaris.admin.usermgr.read,solaris.admin. logsvc.read,solaris.admin.fsmgr.read,solaris.admin.serialmgr.read,solaris.admin. diskmgr.read,solaris.admin.procmgr.user,solaris.compsys.read,solaris.admin.printer. read,solaris.admin.prodreg.read,solaris.admin.dcmgr.read,solaris.snmp.read,solaris. project.read,solaris.admin.patchmgr.read,,solaris.network.hosts.read,solaris.admin. volmgr.read;profiles=All;help=RtDefault.html
Полномочие (в предыдущем издании этой книги мы использовали термин "авторизация", но "полномочие" – более понятный термин, да и по-русски так лучше) представляет собой право, включенное в профиль или данное пользователю, выполнять определенные действия в системе. В Solaris доступны только предопределенные полномочия, добавить новое нельзя. Список полномочий хранится в файле /etc/security/auth_attr:
# # Copyright (c) 2001 by Sun Microsystems, Inc. All rights reserved. # # /etc/security/auth_attr # # authorization attributes. see auth_attr(4) # #pragma ident "@(#)auth_attr 1.1 01/03/19 SMI" # solaris.admin.volmgr.:::Logical Volume Manager:: solaris.admin.volmgr.write:::Manage Logical Volumes::help=AuthVolmgrWrite.html solaris.admin.volmgr.read:::View Logical Volumes::help=AuthVolmgrRead.html solaris.admin.printer.modify:::Update Printer Information::help=AuthPrinter Modify.html solaris.admin.serialmgr.read:::View Serial Ports::help=AuthSerialmgrRead.html solaris.admin.logsvc.:::Log Viewer::help=AuthLogsvcHeader.html solaris.admin.procmgr.user:::Manage Owned Processes::help=AuthProcmgrUser.html solaris.admin.usermgr.read:::View Users and Roles::help=AuthUsermgrRead.html solaris.profmgr.:::Rights::help=ProfmgrHeader.html solaris.admin.procmgr.admin:::Manage All Processes::help=AuthProcmgrAdmin.html solaris.admin.logsvc.write:::Manage Log Settings::help=AuthLogsvcWrite.html solaris.admin.serialmgr.:::Serial Port Manager::help=AuthSerialmgrHeader.html solaris.admin.fsmgr.write:::Mount and Share Files::help=AuthFsmgrWrite.html solaris.admin.dcmgr.read:::View OS Services, Patches and Diskless Clients:: help=AuthDcmgrRead.html solaris.device.cdrw:::CD-R/RW Recording Authorizations::help=DevCDRW.html solaris.admin.usermgr.:::User Accounts::help=AuthUsermgrHeader.html solaris.role.delegate:::Assign Owned Roles::help=AuthRoleDelegate.html solaris.admin.patchmgr.read:::View Patches::help=AuthPatchmgrRead.html solaris.project.read:::View Projects::help=AuthProjmgrRead.html solaris.profmgr.write:::Manage Rights::help=AuthProfmgrWrite.html solaris.system.shutdown:::Shutdown the System::help=SysShutdown.html solaris.device.grant:::Delegate Device Administration::help=DevGrant.html solaris.:::All Solaris Authorizations::help=AllSolAuthsHeader.html solaris.project.write:::Manage Projects::help=AuthProjmgrWrite.html solaris.admin.serialmgr.modify:::Manage Serial Ports::help=AuthSerialmgrModify.html solaris.admin.patchmgr.:::Patch Manager:: solaris.admin.diskmgr.write:::Manage Disks::help=AuthDiskmgrWrite.html solaris.device.revoke:::Revoke or Reclaim Device::help=DevRevoke.html solaris.jobs.grant:::Delegate Cron At Administration::help=JobsGrant.html solaris.dhcpmgr.write:::Modify DHCP Service Configuration::help=DhcpmgrWrite. html solaris.network.hosts.write:::Manage Computers and Networks::help=Network HostsWrite.html solaris.mail.mailq:::Mail Queue::help=MailQueue.html solaris.admin.dcmgr.clients:::Manage Diskless Clients::help=AuthDcmgrClients.html solaris.project.:::Solaris Projects:: solaris.admin.logsvc.read:::View Log Files::help=AuthLogsvcRead.html solaris.admin.fsmgr.read:::View Mounts and Shares::help=AuthFsmgrRead.html solaris.admin.fsmgr.:::Mounts and Shares::help=AuthFsmgrHeader.html solaris.jobs.user:::Manage Owned Jobs::help=AuthJobsUser.html solaris.role.assign:::Assign All Roles::help=AuthRoleAssign.html solaris.network.hosts.:::Computers and Networks::help=NetworkHostsHeader.html solaris.admin.usermgr.write:::Manage Users::help=AuthUsermgrWrite.html solaris.compsys.read:::View Computer System Information::help=AuthCompSys Read.html solaris.audit.:::Audit Management::help=AuditHeader.html solaris.profmgr.read:::View Rights::help=AuthProfmgrRead.html solaris.device.config:::Configure Device Attributes::help=DevConfig.html solaris.profmgr.delegate:::Assign Owned Rights::help=AuthProfmgrDelegate.html solaris.admin.printer.delete:::Delete Printer Information::help=AuthPrinter Delete.html solaris.admin.dcmgr.admin:::Manage OS Services and Patches::help=AuthDcmgrAdmin.html solaris.admin.printer.:::Printer Information::help=AuthPrinterHeader.html solaris.admin.diskmgr.:::Disk Manager::help=AuthDiskmgrHeader.html solaris.role.write:::Manage Roles::help=AuthRoleWrite.html solaris.role.:::Roles::help=RoleHeader.html solaris.admin.patchmgr.write:::Add and Remove Patches::help=AuthPatchmgrWrite.html solaris.mail.:::Mail::help=MailHeader.html solaris.admin.procmgr.:::Process Manager::help=AuthProcmgrHeader.html solaris.device.allocate:::Allocate Device::help=DevAllocate.html solaris.system.:::Machine Administration::help=SysHeader.html solaris.compsys.write:::Manage Computer System Information::help=AuthCompSys Write.html solaris.compsys.:::Computer System Information::help=AuthCompSysHeader.html solaris.network.hosts.read:::View Computers and Networks::help=NetworkHostsRead.html solaris.device.:::Device Allocation::help=DevAllocHeader.html solaris.snmp.:::SNMP Management::help=AuthSnmpHeader.html solaris.admin.dcmgr.:::OS Server Manager::help=AuthDcmgrHeader.html solaris.dhcpmgr.:::DHCP Service Management::help=DhcpmgrHeader.html solaris.login.enable:::Enable Logins::help=LoginEnable.html solaris.admin.logsvc.purge:::Remove Log Files::help=AuthLogsvcPurge.html solaris.audit.read:::Read Audit Trail::help=AuditRead.html solaris.login.remote:::Remote Login::help=LoginRemote.html solaris.system.date:::Set Date Time::help=SysDate.html solaris.admin.serialmgr.delete:::Delete Serial Ports::help=AuthSerialmgrDelete.html solaris.audit.config:::Configure Auditing::help=AuditConfig.html solaris.jobs.admin:::Manage All Jobs::help=AuthJobsAdmin.html solaris.grant:::Grant All Solaris Authorizations::help=PriAdmin.html solaris.jobs.:::Job Scheduler::help=JobHeader.html solaris.profmgr.execattr.write:::Manage Commands::help=AuthProfmgrExecattr Write.html solaris.admin.usermgr.pswd:::Change Password::help=AuthUserMgrPswd.html solaris.login.:::Login Control::help=LoginHeader.html solaris.snmp.write:::Set SNMP Information::help=AuthSnmpWrite.html solaris.admin.printer.read:::View Printer Information::help=AuthPrinterRead. html solaris.profmgr.assign:::Assign All Rights::help=AuthProfmgrAssign.html solaris.snmp.read:::Get SNMP Information::help=AuthSnmpRead.html solaris.admin.diskmgr.read:::View Disks::help=AuthDiskmgrRead.html
Значения полей в этом файле таковы:
name:res1:res2:short_desc:long_desc:attr
name – обязательное поле, имя набора прав (полномочия). Это уникальное имя, которое получается из комбинации префикса и суффикса, где префикс – это часть имени до самой правой точки.
Префикс наборов прав, придуманных компанией Sun, всегда начинается со слова .)
Суффикс – это слово, определяющее детальный смысл авторизации. Слово grant предполагает право собладающего этой авторизацией пользователя делегировать свои наборы прав (авторизации) другим.
Файл /etc/security/exec_attr представляет собой базу данных атрибутов запуска программ, ассоциированных с тем или иным профилем (из prof_attr ).
# execution attributes for profiles. see exec_attr(4) # #pragma ident "@(#)exec_attr 1.1 01/10/23 SMI" # # iPlanet Directory Management:suser:cmd:::/usr/sbin/ directoryserver:uid=0 Software Installation:suser:cmd:::/usr/bin/pkgparam:uid=0 Network Management:suser:cmd:::/usr/sbin/in.named:uid=0 File System Management:suser:cmd:::/usr/sbin/mount:uid=0 FTP Management:suser:cmd:::/usr/sbin/ftprestart:euid=0 Software Installation:suser:cmd:::/usr/bin/pkgtrans:uid=0 Name Service Security:suser:cmd:::/usr/bin/nisaddcred:euid=0 Mail Management:suser:cmd:::/usr/sbin/makemap:euid=0 Software Installation:suser:cmd:::/usr/sbin/install:euid=0 Process Management:suser:cmd:::/usr/bin/crontab:euid=0 Audit Review:suser:cmd:::/usr/sbin/praudit:euid=0 Name Service Security:suser:cmd:::/usr/sbin/ldapclient:uid=0 Media Backup:suser:cmd:::/usr/bin/mt:euid=0
Формат записей в файле /etc/security/exec_attr предполагает обязательное указание имени профиля прав, жестко установленных значений полей policy и cmd, идентификатора и, при необходимости, атрибутов.
name:policy:type:res1:res2:id:attr
name – имя профиля прав (помните, регистр букв в имени важен!).policy – политика, ассоциированная с профилем прав; единственное допустимое значение этого поля в настоящее время – suser.тype – тип объекта, определенного в данной записи; единственное допустимое значение этого поля в настоящее время – cmd.id – строка, которая является cmd этот идентификатор, кроме того, является полным именем файла выполняемой программы или символом звездочка ( * ), который разрешает запустить любую команду. Можно указывать звездочку в конце полного имени файла, что будет означать любую программу в соответствующем каталоге.аttr – атрибуты вида имя=значение, разделенные точкой с запятой; допустимые варианты атрибутоов: euid , uid, egid, and gid.Все компоненты RBAC могут быть использованы как в виде файлов, так и в виде /etc/nsswitch.conf понадобится указать порядок обращения к различным источникам.
Итак, схема назначений прав в системе ролей следующая: определенные программы могут быть запущены не только пользователем root, что традиционно, но и другими пользователями. Для этого существуют полномочия ( authorizations ), которые могут быть даны напрямую пользователям (что нежелательно с организационной точки зрения) или профилям прав. Профиль прав, представляющий собой набор определенных прав, назначается роли. Пользователь может претендовать на то, что он будет играть ту или иную роль, если он знает пароль этой роли и может "перевоплотиться" в нее с помощью команды su. Рис. 9.1 иллюстрирует взаимоотношения компонент RBAC между собой.
(рис 9.1) Отношения между компонентами RBAC
Следующие команды проверяют права (authorizations) пользователя, который пытается их выполнить, и поддерживают систему RBAC. Это значит, что выполнить эти команды может не только root, но и другие пользователи, которые начали играть определенную роль, "переключившись" в нее.
Следующие программы проверяют наборы прав (полномочия), которыми обладает пользователь, пытающийся запустить их:
at, atq, batch, crontab ;allocate, deallocate , list_devices, cdrw.Управление ролями производится путем редактирования файлов в каталоге /etc/security или посредством программ roleadd, rolemod и roledel. Кроме того, управлять ролями и назначением прав в RBAC можно с помощью
Можно, например, добавить роль printmgr с назначением прав по умолчанию:
roleadd printmgr
а с помощью команды
roleadd –D
эти самые права по умолчанию можно увидеть воочию:
roleadd –D group=other,1 project=default,3 basedir=/home skel=/etc/skel shell=/bin/pfsh inactive=0 expire= auths= profiles=All
Для выполнения команд, предполагающих использование ролей, следует воспользоваться специальными командными процессорами, в которых реализована работа с ролями. Имеется набор таких командных процессоров, функционально эквивалентных своим "безролевым" аналогам: /bin/pfsh, /bin/pfcsh, or /bin/pfksh. Эти командные процессоры следует назначать в качестве login shell для ролей.
В root ).
Рис. 9.2 иллюстрирует сказанное: в главном меню
(рис 9.2) Управдение ролями в Solaris Management Console
Одним из самых простых и эффективных средств наблюдения за системой является инструмент bart (Basic Audit and Reporting Tool). С помощью этой программы вы сможете создавать информационную базу контрольных сумм важных файлов. Ежедневное сравнение контрольных сумм файлов поможет обнаружить неожиданную модификацию настроек злоумышленником или ошибочно работающим приложением. Определите периодичность проверок сами, лавируя между чрезмерными накладными расходами на безопасность и приемлемым временем реакции на вторжение в систему – можно запускать проверку даже ежеминутно.
Программа bart проверяет
uid, gid, права доступа, содержимое;Предположим, файл rules в текущем каталоге содержит инструкции программе bart, какие каталоги следует проверять при запуске:
cat ./rules /etc CHECK all
Запустим bart первый раз – для создания начальной информационной базы, которую будем хранить в файле oldManifest (логично выполнить эту команду после установки и начальной настройки системы, а затем повторять после внесения изменений в настройки – т.е. в файлы, которые находятся в /etc ):
find /etc | bart create -I > oldManifest
Теперь, по прошествии некоторого времени, запустим создание новой информационной базы и сравнение – и тут нам пригодится файл rules с инструкциями, который мы заранее создали:
find /etc | bart create -I > newManifest bart compare -r ./rules ./oldManifest ./newManifest
Оказывается, за это время что-то изменилось:
/etc/user_attr: size control:28268 test:23520 acl control:user::rw-,group::rw-,mask:r-x,other:r— test:user::rw-,group::rw-,mask:r-x,other:rwcontents control:28dd3a3af2fcc103f422993de5b162f3 test:28893a3af2fcc103f422993de5b162f3
Теперь нам остается выяснить, было ли это изменение санкционированным, или оно произошло по чьей-то злой воле.
Более подробно об автоматизации проверки целостности файлов с помощью bart можно прочесть в документе по адресу http://www.sun. com/blueprints/0305/819-2259.pdf.
Solaris приспособлен сообщать системному администратору обо всех проблемах, которые возникают при работе системы. Основной источник информации – это файлы протоколов. Во всех версиях Solaris следует наблюдать за сообщениями в файле /var/adm/messages (это аналог /var/log/messages в Linux и FreeBSD) и в файле /var/log/syslog. Кроме этого, в файле /etc/syslog.conf можно определить и другие файлы для протоколирования событий в системе и приложениях.
При подозрениии на неработоспособность какой-либо службы следует дать команду svcs -xv, эта команда выведет список служб, которые должны работать, но по какой-то причине не могут этого делать. Информация о каждой службе будет включать в себя имя ее индивидуального файла протокола.
Изучение файлов протоколов можно выполнять вручную (т.е. с помощью вывода этих файлов на экран – для этого пригодны команды more, less, pg или любой текстовый редактор).
Для анализа файлов протоколов можно приспособить скрипт на том языке, на котором вам комфортнее обрабатывать тексты. Я предпочитаю использовать perl (поставляется в дистрибутиве Solaris 10), но можно использовать также awk, php или любой другой.
В графической среде GNOME для просмотра файлов протоколов можно использовать инструмент gnome-system-log, легко вызываемый из меню All Applications->System Tools (рис. 9.3).
(рис 9.3) Программа просмотра файлов протоколов в GNOME
Хорошим стилем администрирования является не только своевременное обновление системы и установка требуемых заплаток, но и отслеживание новостей, связанных с безопасностью. Уже многие годы в этом помогают рассылки и новости, на которые можно подписаться на специализированных веб-сайтах, например, http://www.cert.org и http://sans.org.
Слабым местом систем UNIX с давних пор была невозможность делегировать часть полномочий системного администратора другим пользователям. Мы хорошо знаем, как передаются полномочия в системах Windows: существуют предопределенные группы, которым дано право выполнять некоторые определенные администраторские действия (Printer Operator, Backup Operator и т.п.) В UNIX для делегирования части администраторских прав в свое время использовалась программа sudo. Второй выход был в том, чтобы установить в правах доступа к некоей административной программе типа useradd бит SUID и доверенный пользователь мог бы запустить ее от имени владельца, т.е. пользователя root.
Оба этих решения не являются совершенными: некоторые виды операций трудно выполнить, имея право запуска отдельных программ. Например, управление учетными записями пользователей не ограничивается их добавлением, и разрешения запускать useradd недостаточно для доверенного пользователя, чтобы помогать системному администратору во всем, что связано с управлением пользователями.
В Solaris начиная с версии 8 была введена новая для UNIX система управления доступом – RBAC (role-based access control). Основанное на ролях управление доступом имеет такую же функциональность, как разнообразие групп с некоторыми административными правами в Windows. Смысл ролей в том, что любому пользователю может быть назначена роль. Ответственность и право выполнения части администраторских функций делегированы роли, и пользователь имеет право ее играть.
Физически роль представляет собой учетную запись специального типа, пользователь не может зайти в систему, указав
su имя_роли
Можно сказать, что роль – это root. Каждой роли могут быть делегированы те или иные права путем назначения ей профилей прав или авторизаций (наборов прав).
Рассмотрим все компоненты RBAC последовательно, начиная с пользователей и ролей.
Всего существует пять компонент: пользователи, роли, профили, авторизации, команды.
Пользователи – это те самые обычные пользователи. Они имеют самые обычные учетные записи. Пользователям может быть дано право играть ту или иную роль, согласно записям в файле /etc/user_attr.
Роли могут быть назначены пользователям. Предопределенных ролей не существует, но можно легко создать новые роли, назначив им один из трех предопределенных профилей. Предполагается, что системный администратор будет самостоятельно создавать роли и назначать их, по мере необходимости, тем или иным пользователям. Соответствие ролей и пользователей (т.е. разрешение конкретному пользователю играть ту или иную роль) описывается файлом /etc/user_attr:
# Copyright (c) 1999-2001 by Sun Microsystems, Inc. All rights reserved. # # /etc/user_attr # # user attributes. see user_attr(4) # #pragma ident "@(#)user_attr 1.5 01/12/11 SMI" # root::::auths=solaris.*,solaris.grant;profiles=All lp::::profiles=Printer Management adm::::profiles=Log Management printmgr::::type=role;profiles=All
Значащих полей в этом файле всего два: имя пользователя (или роли) и атрибуты. Среди атрибутов выделяется атрибут type: он имеет значение role для записи о роли и normal – о пользователе. По умолчанию подразумевается запись о пользователе.
Формат записей в /etc/user_attr следующий:
user:qualifier:res1:res2:attr
где:
user – имя пользователя, такое, как в /etc/passwd ;qualifier – зарезервировано на будущее;res1 – зарезервировано на будущее;res2 – зарезервировано на будущее;attr – атрибуты, разделенные точкой с запятой, вида имя=значение ; допустимые атрибуты – это auths, profiles, roles, type, and project.Атрибут auths предназначен для перечисления предопределенных прав (authorizations), в том числе и групп прав, где значение "все возможные" представляется символом "звездочка" ( * ), например,
auths=solaris.printer.*
обозначает все возможные права набора прав solaris.printer.
Атрибут roles позволяет разрешить пользователю играть различные роли, здесь они перечисляются через запятую. Если в строке, описывающей пользователя, не указан атрибут roles, пользователю запрещается играть какие бы то ни было роли. Например, запись о ролях может быть такой:
roles=printmgrs, useradmin
Атрибут type служит для определения того, относится ли текущая запись к обычному пользователю или описывает роль. Для обычного пользователя следует указывать атрибут
type=normal
и для роли
type=role
Аналогичным образом может быть назначен проект ( project ) и профиль прав ( profiles ) для пользователя или роли.
Профиль в данном контексте – это набор свойств, который можно назначить той или иной роли. В англоязычной литературе профиль, используемый в RBAC, называется профилем прав (Rights Profile). Профиль прав объединяет различные авторизации, чтобы можно было назначить той или иной роли логически связанный набор авторизаций (например, профиль Operator может быть назначен роли, которая нужна для выполнения простых задач администрирования: выполнения резервных копий, управления доступом к принтеру и свойствами принтера). Информация о профилях хранится в файле /etc/security/prof_attr, поля в котором имеют следующие значения:
profname:res1:res2:desc:attr
profname – это имя профиля; регистр букв в имени имеет значение;res1, res2 – зарезервированные поля;desc – описание профиля, в котором указывается смысл данного профиля; это описание должно быть пригодно в качестве пояснения назначения профиля для пользователей приложений высокого уровня (типа attr – атрибуты в таком же виде, как и в других файлах RBAC, допустимые атрибуты – это auths и help. Атрибут auths предполагает указание в качестве его значения списка наборов прав (авторизаций) из числа определенных в файле /etc/security/auth_attr. Атрибут help требует указания страницы в формате HTML, содержащей справку по данному профилю.В нижеследующем примере файла /etc/security/prof_attr опущены некоторые строки, каждый профиль прав описан отдельным абзацем, поскольку в реальном файле он описывается одной длинной строкой, которая не умещается на книжной странице:
# # Copyright (c) 1999-2001 by Sun Microsystems, Inc. All rights reserved. # # /etc/security/prof_attr # # profiles attributes. see prof_attr(4) # #ident "@(#)prof_attr 1.1 01/10/23 SMI" # iPlanet Directory Management:::Manage the iPlanet directory server:help=RtiDSMngmnt.html Media Restore:::Restore files and file systems from backups:help=RtMediaRestore. html Name Service Security:::Security related name service scripts/commands:help=RtNameS erviceSecure.html Device Management:::Control Access to Removable Media:auths=solaris. device.*,solaris.admin.serialmgr.*;help=RtDeviceMngmnt.html Media Backup:::Backup files and file systems:help=RtMediaBkup.html User Security:::Manage passwords, clearances:auths=solaris.role.*,solaris. profmgr.*,solaris.admin.usermgr.*;help=RtUserSecurity.html Audit Control:::Configure BSM auditing:auths=solaris.audit.config,solaris.jobs. admin,solaris.admin.logsvc.purge,solaris.admin.logsvc.read;help=RtAuditCtrl.html User Management:::Manage users, groups, home directory:auths=solaris.profmgr. read,solaris.admin.usermgr.write,solaris.admin.usermgr.read;help=RtUserMngmnt.html Mail Management:::Manage sendmail queues:help=RtMailMngmnt.html Printer Management:::Manage printers, daemons, spooling:help=RtPrntAdmin. html;auths=solaris.admin.printer.read,solaris.admin.printer.modify,solaris.admin. printer.delete Log Management:::Manage log files:help=RtLogMngmnt.html Audit Review:::Review BSM auditing logs:auths=solaris.audit. read;help=RtAuditReview.html Software Installation:::Add application software to the system:help=RtSoftwareInstall.html;auths=solaris.admin.prodreg.read,solaris.admin. prodreg.modify,solaris.admin.prodreg.delete,solaris.admin.dcmgr.admin,solaris.admin. dcmgr.read,solaris.admin.patchmgr.* Network Security:::Manage network and host security:help=RtNetSecure. html;auths=solaris.network.* Operator:::Can perform simple administrative tasks:profiles=Printer Management,Media Backup,All;help=RtOperator.html FTP Management:::Manage the FTP server:help=RtFTPMngmnt.html Project Management:::Manage Solaris projects:auths=solaris.project.read,solaris. project.write;help=RtProjManagement.html DHCP Management:::Manage the DHCP service:auths=solaris. dhcpmgr.*;help=RtDHCPMngmnt.html System Administrator:::Can perform most non-security administrative tasks:profiles=Audit Review,Printer Management,Cron Management,Device Management,File System Management,Mail Management,Maintenance and Repair,Media Backup,Media Restore,Name Service Management,Network Management,Object Access Management,Process Management,Software Installation,User Management,All;help=RtSysAdmin.html Basic Solaris User:::Automatically assigned rights:auths=solaris.profmgr. read,solaris.jobs.users,solaris.mail.mailq,solaris.admin.usermgr.read,solaris.admin. logsvc.read,solaris.admin.fsmgr.read,solaris.admin.serialmgr.read,solaris.admin. diskmgr.read,solaris.admin.procmgr.user,solaris.compsys.read,solaris.admin.printer. read,solaris.admin.prodreg.read,solaris.admin.dcmgr.read,solaris.snmp.read,solaris. project.read,solaris.admin.patchmgr.read,,solaris.network.hosts.read,solaris.admin. volmgr.read;profiles=All;help=RtDefault.html
Полномочие (в предыдущем издании этой книги мы использовали термин "авторизация", но "полномочие" – более понятный термин, да и по-русски так лучше) представляет собой право, включенное в профиль или данное пользователю, выполнять определенные действия в системе. В Solaris доступны только предопределенные полномочия, добавить новое нельзя. Список полномочий хранится в файле /etc/security/auth_attr:
# # Copyright (c) 2001 by Sun Microsystems, Inc. All rights reserved. # # /etc/security/auth_attr # # authorization attributes. see auth_attr(4) # #pragma ident "@(#)auth_attr 1.1 01/03/19 SMI" # solaris.admin.volmgr.:::Logical Volume Manager:: solaris.admin.volmgr.write:::Manage Logical Volumes::help=AuthVolmgrWrite.html solaris.admin.volmgr.read:::View Logical Volumes::help=AuthVolmgrRead.html solaris.admin.printer.modify:::Update Printer Information::help=AuthPrinter Modify.html solaris.admin.serialmgr.read:::View Serial Ports::help=AuthSerialmgrRead.html solaris.admin.logsvc.:::Log Viewer::help=AuthLogsvcHeader.html solaris.admin.procmgr.user:::Manage Owned Processes::help=AuthProcmgrUser.html solaris.admin.usermgr.read:::View Users and Roles::help=AuthUsermgrRead.html solaris.profmgr.:::Rights::help=ProfmgrHeader.html solaris.admin.procmgr.admin:::Manage All Processes::help=AuthProcmgrAdmin.html solaris.admin.logsvc.write:::Manage Log Settings::help=AuthLogsvcWrite.html solaris.admin.serialmgr.:::Serial Port Manager::help=AuthSerialmgrHeader.html solaris.admin.fsmgr.write:::Mount and Share Files::help=AuthFsmgrWrite.html solaris.admin.dcmgr.read:::View OS Services, Patches and Diskless Clients:: help=AuthDcmgrRead.html solaris.device.cdrw:::CD-R/RW Recording Authorizations::help=DevCDRW.html solaris.admin.usermgr.:::User Accounts::help=AuthUsermgrHeader.html solaris.role.delegate:::Assign Owned Roles::help=AuthRoleDelegate.html solaris.admin.patchmgr.read:::View Patches::help=AuthPatchmgrRead.html solaris.project.read:::View Projects::help=AuthProjmgrRead.html solaris.profmgr.write:::Manage Rights::help=AuthProfmgrWrite.html solaris.system.shutdown:::Shutdown the System::help=SysShutdown.html solaris.device.grant:::Delegate Device Administration::help=DevGrant.html solaris.:::All Solaris Authorizations::help=AllSolAuthsHeader.html solaris.project.write:::Manage Projects::help=AuthProjmgrWrite.html solaris.admin.serialmgr.modify:::Manage Serial Ports::help=AuthSerialmgrModify.html solaris.admin.patchmgr.:::Patch Manager:: solaris.admin.diskmgr.write:::Manage Disks::help=AuthDiskmgrWrite.html solaris.device.revoke:::Revoke or Reclaim Device::help=DevRevoke.html solaris.jobs.grant:::Delegate Cron At Administration::help=JobsGrant.html solaris.dhcpmgr.write:::Modify DHCP Service Configuration::help=DhcpmgrWrite. html solaris.network.hosts.write:::Manage Computers and Networks::help=Network HostsWrite.html solaris.mail.mailq:::Mail Queue::help=MailQueue.html solaris.admin.dcmgr.clients:::Manage Diskless Clients::help=AuthDcmgrClients.html solaris.project.:::Solaris Projects:: solaris.admin.logsvc.read:::View Log Files::help=AuthLogsvcRead.html solaris.admin.fsmgr.read:::View Mounts and Shares::help=AuthFsmgrRead.html solaris.admin.fsmgr.:::Mounts and Shares::help=AuthFsmgrHeader.html solaris.jobs.user:::Manage Owned Jobs::help=AuthJobsUser.html solaris.role.assign:::Assign All Roles::help=AuthRoleAssign.html solaris.network.hosts.:::Computers and Networks::help=NetworkHostsHeader.html solaris.admin.usermgr.write:::Manage Users::help=AuthUsermgrWrite.html solaris.compsys.read:::View Computer System Information::help=AuthCompSys Read.html solaris.audit.:::Audit Management::help=AuditHeader.html solaris.profmgr.read:::View Rights::help=AuthProfmgrRead.html solaris.device.config:::Configure Device Attributes::help=DevConfig.html solaris.profmgr.delegate:::Assign Owned Rights::help=AuthProfmgrDelegate.html solaris.admin.printer.delete:::Delete Printer Information::help=AuthPrinter Delete.html solaris.admin.dcmgr.admin:::Manage OS Services and Patches::help=AuthDcmgrAdmin.html solaris.admin.printer.:::Printer Information::help=AuthPrinterHeader.html solaris.admin.diskmgr.:::Disk Manager::help=AuthDiskmgrHeader.html solaris.role.write:::Manage Roles::help=AuthRoleWrite.html solaris.role.:::Roles::help=RoleHeader.html solaris.admin.patchmgr.write:::Add and Remove Patches::help=AuthPatchmgrWrite.html solaris.mail.:::Mail::help=MailHeader.html solaris.admin.procmgr.:::Process Manager::help=AuthProcmgrHeader.html solaris.device.allocate:::Allocate Device::help=DevAllocate.html solaris.system.:::Machine Administration::help=SysHeader.html solaris.compsys.write:::Manage Computer System Information::help=AuthCompSys Write.html solaris.compsys.:::Computer System Information::help=AuthCompSysHeader.html solaris.network.hosts.read:::View Computers and Networks::help=NetworkHostsRead.html solaris.device.:::Device Allocation::help=DevAllocHeader.html solaris.snmp.:::SNMP Management::help=AuthSnmpHeader.html solaris.admin.dcmgr.:::OS Server Manager::help=AuthDcmgrHeader.html solaris.dhcpmgr.:::DHCP Service Management::help=DhcpmgrHeader.html solaris.login.enable:::Enable Logins::help=LoginEnable.html solaris.admin.logsvc.purge:::Remove Log Files::help=AuthLogsvcPurge.html solaris.audit.read:::Read Audit Trail::help=AuditRead.html solaris.login.remote:::Remote Login::help=LoginRemote.html solaris.system.date:::Set Date Time::help=SysDate.html solaris.admin.serialmgr.delete:::Delete Serial Ports::help=AuthSerialmgrDelete.html solaris.audit.config:::Configure Auditing::help=AuditConfig.html solaris.jobs.admin:::Manage All Jobs::help=AuthJobsAdmin.html solaris.grant:::Grant All Solaris Authorizations::help=PriAdmin.html solaris.jobs.:::Job Scheduler::help=JobHeader.html solaris.profmgr.execattr.write:::Manage Commands::help=AuthProfmgrExecattr Write.html solaris.admin.usermgr.pswd:::Change Password::help=AuthUserMgrPswd.html solaris.login.:::Login Control::help=LoginHeader.html solaris.snmp.write:::Set SNMP Information::help=AuthSnmpWrite.html solaris.admin.printer.read:::View Printer Information::help=AuthPrinterRead. html solaris.profmgr.assign:::Assign All Rights::help=AuthProfmgrAssign.html solaris.snmp.read:::Get SNMP Information::help=AuthSnmpRead.html solaris.admin.diskmgr.read:::View Disks::help=AuthDiskmgrRead.html
Значения полей в этом файле таковы:
name:res1:res2:short_desc:long_desc:attr
name – обязательное поле, имя набора прав (полномочия). Это уникальное имя, которое получается из комбинации префикса и суффикса, где префикс – это часть имени до самой правой точки.
Префикс наборов прав, придуманных компанией Sun, всегда начинается со слова .)
Суффикс – это слово, определяющее детальный смысл авторизации. Слово grant предполагает право собладающего этой авторизацией пользователя делегировать свои наборы прав (авторизации) другим.
Файл /etc/security/exec_attr представляет собой базу данных атрибутов запуска программ, ассоциированных с тем или иным профилем (из prof_attr ).
# execution attributes for profiles. see exec_attr(4) # #pragma ident "@(#)exec_attr 1.1 01/10/23 SMI" # # iPlanet Directory Management:suser:cmd:::/usr/sbin/ directoryserver:uid=0 Software Installation:suser:cmd:::/usr/bin/pkgparam:uid=0 Network Management:suser:cmd:::/usr/sbin/in.named:uid=0 File System Management:suser:cmd:::/usr/sbin/mount:uid=0 FTP Management:suser:cmd:::/usr/sbin/ftprestart:euid=0 Software Installation:suser:cmd:::/usr/bin/pkgtrans:uid=0 Name Service Security:suser:cmd:::/usr/bin/nisaddcred:euid=0 Mail Management:suser:cmd:::/usr/sbin/makemap:euid=0 Software Installation:suser:cmd:::/usr/sbin/install:euid=0 Process Management:suser:cmd:::/usr/bin/crontab:euid=0 Audit Review:suser:cmd:::/usr/sbin/praudit:euid=0 Name Service Security:suser:cmd:::/usr/sbin/ldapclient:uid=0 Media Backup:suser:cmd:::/usr/bin/mt:euid=0
Формат записей в файле /etc/security/exec_attr предполагает обязательное указание имени профиля прав, жестко установленных значений полей policy и cmd, идентификатора и, при необходимости, атрибутов.
name:policy:type:res1:res2:id:attr
name – имя профиля прав (помните, регистр букв в имени важен!).policy – политика, ассоциированная с профилем прав; единственное допустимое значение этого поля в настоящее время – suser.тype – тип объекта, определенного в данной записи; единственное допустимое значение этого поля в настоящее время – cmd.id – строка, которая является cmd этот идентификатор, кроме того, является полным именем файла выполняемой программы или символом звездочка ( * ), который разрешает запустить любую команду. Можно указывать звездочку в конце полного имени файла, что будет означать любую программу в соответствующем каталоге.аttr – атрибуты вида имя=значение, разделенные точкой с запятой; допустимые варианты атрибутоов: euid , uid, egid, and gid.Все компоненты RBAC могут быть использованы как в виде файлов, так и в виде /etc/nsswitch.conf понадобится указать порядок обращения к различным источникам.
Итак, схема назначений прав в системе ролей следующая: определенные программы могут быть запущены не только пользователем root, что традиционно, но и другими пользователями. Для этого существуют полномочия ( authorizations ), которые могут быть даны напрямую пользователям (что нежелательно с организационной точки зрения) или профилям прав. Профиль прав, представляющий собой набор определенных прав, назначается роли. Пользователь может претендовать на то, что он будет играть ту или иную роль, если он знает пароль этой роли и может "перевоплотиться" в нее с помощью команды su. Рис. 9.1 иллюстрирует взаимоотношения компонент RBAC между собой.
(рис 9.1) Отношения между компонентами RBAC
Следующие команды проверяют права (authorizations) пользователя, который пытается их выполнить, и поддерживают систему RBAC. Это значит, что выполнить эти команды может не только root, но и другие пользователи, которые начали играть определенную роль, "переключившись" в нее.
Следующие программы проверяют наборы прав (полномочия), которыми обладает пользователь, пытающийся запустить их:
at, atq, batch, crontab ;allocate, deallocate , list_devices, cdrw.Управление ролями производится путем редактирования файлов в каталоге /etc/security или посредством программ roleadd, rolemod и roledel. Кроме того, управлять ролями и назначением прав в RBAC можно с помощью
Можно, например, добавить роль printmgr с назначением прав по умолчанию:
roleadd printmgr
а с помощью команды
roleadd –D
эти самые права по умолчанию можно увидеть воочию:
roleadd –D group=other,1 project=default,3 basedir=/home skel=/etc/skel shell=/bin/pfsh inactive=0 expire= auths= profiles=All
Для выполнения команд, предполагающих использование ролей, следует воспользоваться специальными командными процессорами, в которых реализована работа с ролями. Имеется набор таких командных процессоров, функционально эквивалентных своим "безролевым" аналогам: /bin/pfsh, /bin/pfcsh, or /bin/pfksh. Эти командные процессоры следует назначать в качестве login shell для ролей.
В root ).
Рис. 9.2 иллюстрирует сказанное: в главном меню
(рис 9.2) Управдение ролями в Solaris Management Console
Одним из самых простых и эффективных средств наблюдения за системой является инструмент bart (Basic Audit and Reporting Tool). С помощью этой программы вы сможете создавать информационную базу контрольных сумм важных файлов. Ежедневное сравнение контрольных сумм файлов поможет обнаружить неожиданную модификацию настроек злоумышленником или ошибочно работающим приложением. Определите периодичность проверок сами, лавируя между чрезмерными накладными расходами на безопасность и приемлемым временем реакции на вторжение в систему – можно запускать проверку даже ежеминутно.
Программа bart проверяет
uid, gid, права доступа, содержимое;Предположим, файл rules в текущем каталоге содержит инструкции программе bart, какие каталоги следует проверять при запуске:
cat ./rules /etc CHECK all
Запустим bart первый раз – для создания начальной информационной базы, которую будем хранить в файле oldManifest (логично выполнить эту команду после установки и начальной настройки системы, а затем повторять после внесения изменений в настройки – т.е. в файлы, которые находятся в /etc ):
find /etc | bart create -I > oldManifest
Теперь, по прошествии некоторого времени, запустим создание новой информационной базы и сравнение – и тут нам пригодится файл rules с инструкциями, который мы заранее создали:
find /etc | bart create -I > newManifest bart compare -r ./rules ./oldManifest ./newManifest
Оказывается, за это время что-то изменилось:
/etc/user_attr: size control:28268 test:23520 acl control:user::rw-,group::rw-,mask:r-x,other:r— test:user::rw-,group::rw-,mask:r-x,other:rwcontents control:28dd3a3af2fcc103f422993de5b162f3 test:28893a3af2fcc103f422993de5b162f3
Теперь нам остается выяснить, было ли это изменение санкционированным, или оно произошло по чьей-то злой воле.
Более подробно об автоматизации проверки целостности файлов с помощью bart можно прочесть в документе по адресу http://www.sun. com/blueprints/0305/819-2259.pdf.
Solaris приспособлен сообщать системному администратору обо всех проблемах, которые возникают при работе системы. Основной источник информации – это файлы протоколов. Во всех версиях Solaris следует наблюдать за сообщениями в файле /var/adm/messages (это аналог /var/log/messages в Linux и FreeBSD) и в файле /var/log/syslog. Кроме этого, в файле /etc/syslog.conf можно определить и другие файлы для протоколирования событий в системе и приложениях.
При подозрениии на неработоспособность какой-либо службы следует дать команду svcs -xv, эта команда выведет список служб, которые должны работать, но по какой-то причине не могут этого делать. Информация о каждой службе будет включать в себя имя ее индивидуального файла протокола.
Изучение файлов протоколов можно выполнять вручную (т.е. с помощью вывода этих файлов на экран – для этого пригодны команды more, less, pg или любой текстовый редактор).
Для анализа файлов протоколов можно приспособить скрипт на том языке, на котором вам комфортнее обрабатывать тексты. Я предпочитаю использовать perl (поставляется в дистрибутиве Solaris 10), но можно использовать также awk, php или любой другой.
В графической среде GNOME для просмотра файлов протоколов можно использовать инструмент gnome-system-log, легко вызываемый из меню All Applications->System Tools (рис. 9.3).
(рис 9.3) Программа просмотра файлов протоколов в GNOME
Хорошим стилем администрирования является не только своевременное обновление системы и установка требуемых заплаток, но и отслеживание новостей, связанных с безопасностью. Уже многие годы в этом помогают рассылки и новости, на которые можно подписаться на специализированных веб-сайтах, например, http://www.cert.org и http://sans.org.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.