от Н. Антонов(3-12-2004)

рейтинг (10)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Имаме поотделно две множества - множество от обекти О и множество от субекти S. Под обекти ще разбираме всякакви ресурси на системата като файлове, директории, позволена за заделяне памет, pipe файлове и файлове устройства. Субектите са потребителите, които пускат и използват тези ресурси. Субектите се опитват да получат достъп до обектите, а системата за защита на достъпа им позволява или отказва желания достъп. В мандатния модел на защита са необходими критерии, на базата на които да се извършва позволяването или отказът на достъп до даден ресурс.

На всеки обект и на всеки субект се назначава мандатен маркер - ниво на достъп, чило L и категориално множество M. Последното ще представим във вид на множество от 64 елемента, където всеки елемент е 0 или 1. Ще приемем, че категориалното множество M1 се явява подмножество на категориалното множество M2, ако за всяка единица i в множеството M1 съществува единица i в множеството M2. В противен случай ще казваме, че множеството M1 и M2 не се пресичат. Да разгледаме множество от мандатни маркери, т.е. {Li,Mi} и да ги поставим като съотношения. А именно, ще считаме, че маркер {Li, Mi} доминира над маркер {Lj,Mj} и ще ги опозначим съответно {Li,Mi} > {Lj,Mj}, ако Li > Lj и Mi е надмножество на Mj.

Необходимо ни е да имаме също така и т. нар. матрица на достъпа D, където при пресичането на i и j се посочва какви права на достъп има субектът i спрямо обекта j. Можем да имаме например права за четене, стартиране, промяна и стартиране. Дадената матрица носи наименованието Дискретизационен модел на достъп и в RSBAC се поражда от стандартните файлови права в Unix с оглед името на потребителя и неговата група.

И така, в модела се въвеждат следните правила:

  • (ss-property) Ако субектът има право на запис или четене спрямо обекта, то се приема, че мандатният маркер на субекта доминира над мандатния маркер на обекта (ds-property).
  • (ds-property) Правата за достъп на субекта спрямо обекта се взимат от матрицата за достъп D и само оттам. Това правила твърдо скрепява връзката на матрицата за достъп с целия модел.
  • (*-proprerty) Ако възникне ситуация, когато субектът отваря един обект за запис, а втори за четене, при което маркерът на втория обект доминира над маркера на първия, субектът получава отказ за достъп. Даденото правило позволява да се изключи ситуация, при която данни от защитен обект се прехвърлят към незащитен. Решението за достъп е положително, ако мандатният маркер за достъп на субекта доминира над мандатния маркер на обекта.

Както сигурно сте успели да забележите, даденият модел натрупва много сериозни ограничения. Работата с него не е така лесна и програми, които на се съобразени с него, почти винаги със сигурност ще получат отказ за достъп. Сега ще разгледаме какви параметрии за файлове и потребители управляват този модел.

Да създадем един файл ~/mactest. Отново пускаме в директорията, в която се намира този файл централната програма за адимнистриране rsbac_menu. Всички настройки правим като secoff - отговорник по сигурността.

Модулът MAC притежава следните параметри:

  • MAC security level - Ниво на секретност на файла. Да го установим примерно на 2.
  • MAC categories - Категориално множество на файла. Няма да го пипаме.
  • MAC trusted for user - Тук можем да кажем доверяваме ли се на други потребители или не. Довереният потребител може формално да няма достъп, но при задаване на доверие към него спрямо файла, той ще получи достъп до него. Тук също няма да променяме нищо.

И така, файлът е засекретен и ако сега се опитаме да го отворим, нищо няма да стане, дори и стандартните UNIX права да ни позволяват да го сторим.

В програмата rsbac_menu отиваме в менюто за управление на потребители ("User Attributes: Go to user attribute menu") и с немалко удивление откриваме, че за потребителя имаме не по-малко параметри отколокото за файла. Сега ни интересуват тези:

  • Security Level - Ниво на секретност на потребителя. Потребителят може да чете документи с ниво не по-голямо от неговото.
  • MAC Categories - Категориално множество на потребителя.

Избираме потребителя, в домашната директория на когото създадохме нашия файл mactest и да му зададем ниво не секретнст 2. Сега, след като този потребител влезе следващия път в системата, вече ще може да отваря този файл.

Важен момент: Модулът MAC позволява да се извършва промяна на UID на потребителя, само ако нивото на секретност на текущия потребител не е по-ниско от нивото на секретност на новия. Основният проблем е в това, че администраторът (root) винаги има максимално ниво на секретност.

Упражнение за разработчици:
Разрешете проблеми с максималната секретност на root. Един от възможните подходи може стане чрез добавяне на нов атрибут "Enforced MAC security level" аналогично на атрибута "RC enforced role".

Модулът ACL

Мандатният достъп е хубав, но имаме нужда от нещо повече. Имаме нужда да контролираме правата за достъп до файла с точност до милиметър, с точност до потребител или до група от потребители.

С тази цел можем да включим модула ACL, който добавя към стандартните права списъци за контрол на достъпа.

Да създадем директория ~/acltest. Стартираме програма rsbac_menu и избираме в менюто за управление на правата на този файл, след което посочваме "ACL Menu: Go to ACL menu". Там, за разлика от предишните случаи, няма да видим никакво изобилие от права, но цъкнете ли на "Change Mask" ще видите дълъг списък с възможности. Ето и някои от тях, от които може да се добие представа за какъв тотален контрол на достъпа може да се установи върху всички видове ресурси на системата:

  • CHANGE_GROUP - Смяна на групата.
  • CHANGE_OWNER - Смяна на собственика.
  • CHDIR- Смяна на директория.
  • CREATE - Създаване.
  • DELETE - Изтриване.
  • EXECUTE - Стартиране.
  • LINK_HARD - Създаване на твърда връзка.
  • MODIFY_ACCESS_DATA - Промяна на информацията за достъп до файла.
  • MODIFY_ATTRIBUTE - Промяна на rsbac атрибут.
  • MODIFY_PERMISSIONS_DATA - Промяна на Unix правата.
  • MODIFY_SYSTEM_DATA - Промяна на системни данни.
  • MOUNT - Извършване на монтиране.
  • READ_OPEN - Отваряне за четене.
  • READ_WRITE_OPEN - Отваряне за четене/запис.
  • RENAME - Преименуване.
  • SEARCH - Извършване на търсене.
  • SEND_SIGNAL - Изпращане на сигнал до друг процес.
  • SHUTDOWN - Спиране/рестартиране не системата.

Да изключим за директорията ~/acltest атрибута CHDIR. Сега вече никой не може да влезе в тази директория, независимо кой е. Дайте да го направим по-интересно: да речем, да направим така, че потребителят test все пак да влиза в тази директория. Връщаме се отново в основното меню на модула ACL и избираме "Add ACL Entry: Add group, role or user entry". Ще бъдем попитани какво искаме да добавим. Отговаряме, че искаме да добавим потребител от списъка. Включваме всички атрибути (в това число и CHDIR, отключен в основната маска) и се убеждаваме, че само test може да влиза в тази директория.

По подобен начин можем да добавим и група от потребители.

Освен това, когато овладеете и ролевия механизъм RC, можете да задавате индивидуални настройка на избраните от вас роли.

Упражнение:
ACL притежава интересна възможност за онаследяване. Всички обекти имат ACL маски по подразбиране (:DEFAULT:). Опитайте се да ги промените. Бъдете внимателни, защоот ако махнете някои права от маската на отговорника по сигурността, губите всякакъв шанс да промените повторно нещо в модула ACL, а оттам и за цялата система.

Следва...



<< Въведение в RSBAC, част IV | Въведение в RSBAC, част II >>