Ролевое управление доступом (RBAC)
Зачем нужно ролевое управление доступом
Слабым местом систем UNIX с давних пор была невозможность делегировать часть полномочий системного администратора другим пользователям. Мы хорошо знаем, как передаются полномочия в системах Windows: существуют предопределенные группы, которым дано право выполнять некоторые определенные администраторские действия (Printer Operator, Backup Operator и т.п.). В UNIX для делегирования части администраторских прав в свое время использовалась программа sudo. Второй выход заключался в том, чтобы установить в правах доступа к некоей административной программе типа useradd бит SUID, чтобы доверенный пользователь мог запустить ее от имени владельца, т.е. пользователя root.
Оба этих решения не являются совершенными: некоторые виды операций трудно выполнить, имея право запуска отдельных программ. Например, управление учетными записями пользователей не ограничивается их добавлением, и разрешения запускать useradd недостаточно для доверенного пользователя, чтобы помогать системному администратору во всем, что связано с управлением пользователями.
В Solaris, начиная с версии 8, была введена новая для UNIX система управления доступом - RBAC (Role-Based Access Control). Основанное на ролях управление доступом имеет такую же функциональность, как разнообразие групп с некоторыми административными правами в Windows. Смысл его в том, что любому пользователю может быть назначена роль. Ответственность и право выполнения части администраторских функций делегированы роли, и пользователь имеет право ее играть.
Что такое роль
Физически роль представляет собой учетную запись специального типа, пользователь не может зайти в систему, указав имя роли, но может "переключиться в роль", дав команду
su имя_роли
Можно сказать, что роль - это псевдопользователь, который обладает правами большими, чем обычный пользователь, но меньшими, чем root. Каждой роли могут быть делегированы те или иные права путем назначения ей профилей прав или авторизаций (наборов прав).
Компоненты RBAC
Рассмотрим все компоненты RBAC последовательно, начиная с пользователей и ролей.
Всего существует пять компонентов: пользователи, роли, профили, авторизации, команды.
Пользователи
Пользователи - это те самые обычные пользователи, о которых рассказывалось в лекциях 1, 2 и 4. Они имеют самые обычные учетные записи. Пользователям может быть дано право играть ту или иную роль, согласно записям в файле /etc/security/user_attr.
Роли
Роли могут быть назначены пользователям. Предопределенных ролей не существует, но можно легко создать новые роли, назначив им один из трех предопределенных профилей. Предполагается, что системный администратор будет самостоятельно создавать роли и назначать их, по мере необходимости, тем или иным пользователям. Соответствие ролей и пользователей (т.е. разрешение конкретному пользователю играть ту или иную роль) описывается файлом /etc/security/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 - описание профиля, в котором указывается смысл данного профиля; это описание должно быть пригодно в качестве пояснения назначения профиля для пользователей приложений высокого уровня (типа Solaris Management Console);
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=RtNameServiceSecure.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.101/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=AuthPrinterModify.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=NetworkHostsWrite.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=AuthCompSysRead.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=AuthPrinterDelete.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=AuthCompSysWrite.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=AuthProfmgrExecattrWrite.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, всегда начинается со слова solaris. Все остальные разработчики должны для соблюдения уникальности имени указывать в качестве начала префикса имя своего домена в Интернете в обратном порядке (например, com.intel.) После имени компании идет дополнительная часть префикса, содержание которой зависит от смысла набора прав. Компоненты дополнительной части разделяются символом "точка"(.)
Суффикс - это слово, определяющее детальный смысл авторизации. Слово 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;
type - тип объекта, определенного в данной записи, единственное допустимое значение этого поля в настоящее время - cmd;
id - строка, являющаяся уникальным идентификатором объекта, описанного в данной записи; для типа cmd этот идентификатор, кроме того, является полным именем файла выполняемой программы или символом звездочка (*), который разрешает запустить любую команду. Можно указывать звездочку в конце полного имени файла, что будет означать любую программу в соответствующем каталоге;
attr - атрибуты вида имя=значение, разделенные точкой с запятой; допустимые варианты атрибутов: euid, uid, egid и gid.
Все компоненты RBAC могут быть использованы как в виде файлов, так и в виде карт NIS или таблиц NIS+. Соответственно, в файле /etc/nsswitch.conf понадобится указать порядок обращения к различным источникам.
Итак, схема назначений прав в системе ролей следующая: определенные программы могут быть запущены не только пользователем root, что традиционно, но и другими пользователями. Для этого существуют права (авторизации, authorizations), которые могут быть назначены напрямую пользователям (что нежелательно с организационной точки зрения) или профилям прав. Профиль прав, представляющий собой набор определенных прав, назначается роли. Пользователь может претендовать на то, что он будет играть ту или иную роль, если он знает пароль этой роли и может "перевоплотиться" в нее с помощью команды su. иллюстрирует взаимоотношения компонентов RBAC между собой.
Команды, поддерживающие роли
Следующие команды проверяют права (authorizations) пользователя, который пытается их выполнить, и поддерживают систему RBAC. Это значит, что выполнить эти команды может не только root, но и другие пользователи, которые начали играть определенную роль, "переключившись" в нее:
все программы, запускаемые внутри как приложения из Solaris Management Console;
- программы запланированного запуска at, atq, batch, crontab;
- команды, связанные с работой физических устройств - allocate, deallocate, list_devices, cdrw.
Команды управления ролями
Управление ролями производится путем редактирования файлов в каталоге /etc/security или посредством программ roleadd, rolemod и roledel. Кроме того, управлять ролями и назначением прав в RBAC можно с помощью Solaris Management Console.
Можно, например, добавить роль 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, или /bin/pfksh. Эти командные процессоры следует назначать в качестве login shell для ролей.
Управление ролями в Solaris Management Console
В Solaris Management Console возможно управление ролями (пункт Administrative Roles) в графическом интерфейсе. Для этого потребуется ввести имя и пароль роли, которая имеет право на такое администрирование (часто это пользователь root).
иллюстрирует сказанное: в главном меню Solaris Management Console следует выбрать Users, а для администрирования ролей в открывшемся окне справа - Administrative Roles.
|