Моделирование политики разграничения доступа
Изучение ролевой модели разграничения доступа с ограничением "статическое взаимное исключение ролей". Ролевое управление порядком предоставления прав доступа субъекту в зависимости от сессии его работы и имеющихся или отсутствующих у него ролей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 01.05.2024 |
Размер файла | 1,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
КУРСОВОЙ ПРОЕКТ
Моделирование политики разграничения доступа
СОДЕРЖАНИЕ
- ВВЕДЕНИЕ
- ЦЕЛЬ КУРСОВОГО ПРОЕКТА
- ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
- ПРАКТИЧЕСКАЯ ЧАСТЬ
- ВЫВОД
- СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- ПРИЛОЖЕНИЕ
- ВВЕДЕНИЕ
- Политика разграничения доступа является важным аспектом в области информационной безопасности. В современном цифровом мире, где данные являются ценными активами, эффективное и надежное управление доступом к информации становится основополагающим принципом защиты. Моделирование политики разграничения доступа позволяет оптимизировать систему управления доступом и обеспечить контроль над правами пользователей.
- В данном курсовом проекте мы сосредоточимся на изучении ролевой модели разграничения доступа с ограничением «статическое взаимное исключение ролей».
- ЦЕЛЬ КУРСОВОГО ПРОЕКТА
- Целью выполнения курсового проекта является формирование у обучающихся следующих навыков:
- ? способность корректно применять при решении профессиональных задач соответствующий математический аппарат математической логики, теории алгоритмов, теории информации, в том числе с использованием вычислительной техники;
- ? способность применять языки, системы и инструментальные средства программирования в профессиональной деятельности;
- ? способность разрабатывать научно-техническую документацию, готовить научно-технические отчеты, обзоры, публикации по результатам выполненных работ.
- ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
- Ролевое управление доступом является развитием политики дискреционного управления. Права доступа группируются с учетом специфики их применения, образуя роли. Роль является совокупностью прав доступа к объектам КС (компьютерной системы).
- Правила ролевого управления задают порядок предоставления прав доступа субъекту в зависимости от сессии его работы и имеющихся или отсутствующих у него ролей. Поэтому ролевое управление не является частным случаем дискреционного.
- С другой стороны, правила ролевого управления более гибки, чем мандатного, т.к. отсутствует жестко определенная решетка уровней безопасности.
- Роль - активно действующая в КС абстрактная сущность, обладающая логически взаимосвязанным набором полномочий, необходимых для выполнения определенных функциональных обязанностей пользователями системы
- Введение ролей приводит к двухэтапной организации системы разграничения доступа:
1. Создание ролей и определение их полномочий (прав доступа к объектам)
2. Назначение ролей пользователям системы
Управление доступом в ролевых системах требует разбиения процесса функционирования системы и работы пользователя на сеансы, в каждом из которых, в свою очередь, выделяется две фазы:
1. Авторизация в данном сеансе пользователя с одной или несколькими разрешенными для него ролями
2. Разрешение или запрещение субъектам пользователя доступа к объектам системы в рамках полномочий соответствующих ролей, с которыми авторизован в данном сеансе пользователь
Одним из механизмов модели ролевого управления доступом являются ограничения, накладываемые на множества ролей. Этот механизм обеспечивает большее соответствие используемым в существующих КС технологиям обработки информации.
Так как в моем варианте на ролевую модель накладывается ограничение статического взаимного исключения ролей, остановимся на нем подробнее. Оно подразумевает следующее:
- Множество ролей разбивается на непересекающиеся подмножества(классы), и каждый пользователь обладает не более чем одной ролью каждого класса;
- множество прав доступа разбивается на классы, и каждая роль включает в себя не более чем одно право доступа из каждого класса
Элементы модели ролевого управления доступом с ограничением:
Множества:
- U - множество пользователей;
- R - множество ролей;
- P - множество прав доступа к объектам КС;
- S - множество сессий
- О - множество объектов
- С - множество классов
Функции:
- PA: - задает для каждой роли множество прав доступа
- UA: - задает для каждого пользователя множество ролей
- user: - задает для каждой сессии пользователя, от имени которого она активизирована
- roles: задает для пользователя множество ролей, на которые он авторизован в данной сессии
- - задает для каждого класса набор ролей
- OA: - задает для каждого объекта множество прав доступа к нему
Рисунок 1 - Общая структура элементов модели ролевого управления доступом c взаимоисключающими ролями
Рисунок 2 - Пример отношения пользователь-роль-класс
ПРАКТИЧЕСКАЯ ЧАСТЬ
Задание:
Разработать программную модель политики разграничения доступа для защищенной компьютерной системы.
При разработке механизма идентификации и аутентификации должны быть реализованы следующие функции:
1. Идентификация и аутентификация пользователей;
2. Функции администратора безопасности: заполнение данных учетных записей, внесение изменений в учетные записи, изменение прав разграничения доступа для каждой учетной записи;
3. Контроль попыток доступа субъектов доступа к объектам доступа согласно выбранной политике разграничения доступа.
Разработать необходимые административные меры по разграничению доступа в компьютерной системе согласно выбранной политике разграничения доступа.
Порядок работы:
- Определение и формализация исходных данных для моделирования политики разграничения доступа: перечни субъектов и объектов компьютерной системы, описание процессов, происходящих в компьютерной системе с участием всех пользователей, определение необходимых и возможных прав доступа субъектов к объектам.
- Моделирование политики разграничения доступа: разработка формального описания модели разграничения доступа; разработка общего алгоритма разграничения доступа в компьютерной системе.
- Разработка алгоритма реализации правил разграничения доступа при переходе компьютерной системы в новое состояние согласно варианту.
- Разработка программного средства (на языке программирования С++) на основе построенной алгоритмической модели. Отладка и тестирование программы.
- Разработка административных мер по разграничению доступа в компьютерной системе.
- Составление пояснительной записки к курсовому проекту.
Исходные данные, необходимые для выполнения курсового проекта:
Описание объектов:
- o1 - системное ПО - программное обеспечение, которое предназначено для управления и обеспечения работы компьютерной системы или сети. Системное ПО включает операционные системы, драйверы устройств, вспомогательные утилиты, а также программы для обеспечения безопасности и сетевого взаимодействия. Доступ к данному объекту должен иметь только системный администратор и IT директор, так как они имеют к этому прямое отношение. Остальным доступ к этому объекту ни к чему (драйверы, утилиты)
- о2 -- ИС организации (модификация «1С-Предприятие») -представляет собой информационную систему, основанную на программном продукте "1С-Предприятие". Она предназначена для автоматизации учета, финансового анализа, управления персоналом и других процессов в организации. Доступ к данному объекту должен иметь только системный администратор и IT директор, так как они имеют к этому прямое отношение. Остальным доступ к этому объекту ни к чему
- о3 -- база данных сотрудников организации - собрание информации о сотрудниках, включающее данные о персональных сведениях, подразделениях, должностях, контактных данных и других атрибутах. База данных сотрудников используется для учета персонала, планирования командировок, управления зарплатой и других административных задач. Изменять данный объект может системный администратор, а доступ на чтение этого объекта имеет генеральный директор
- о4 -- полное описание ЛВС организации - отражает структуру и параметры локальной вычислительной сети, включая информацию о топологии сети, использованных сетевых протоколах, оборудовании, серверах, роутерах и других устройствах сети. Описание ЛВС организации позволяет осуществлять планирование, настройку и обслуживание сети. Доступ к данному объекту должен иметь только системный администратор и IT директор, так как они имеют к этому прямое отношение. Остальным доступ к этому объекту ни к чему
- о5 -- годовой балансовый отчет организации - документ, который содержит информацию о финансовом состоянии организации на конец финансового года. Отчет включает данные о активах, пассивах, оборотных средствах, задолженностях, прибыли и убытках. Годовой балансовый отчет используется для анализа финансового положения организации и принятия управленческих решений. Составляется сотрудниками бухгалтерии, подписывается финансовым директором. Остальным доступ к этому объекту ник чему, кроме генерального директора на чтение
- o6 - документ «Стратегия инновационного развития организации» -документ, который определяет цели, задачи и направления инновационного развития организации. Составляется директорами отделов и генеральным директором, подписывается генеральным директором.
- о7 -- документ «Политика информационной безопасности организации» -руководитель и специалисты ИТ-отдела должны иметь более детальный доступ к документации по информационной безопасности, чтобы контролировать выполнение требований и принимать меры по предотвращению нарушений.
- o8 - документ «Приказ о поощрении работников по результатам работы» - устанавливает правила, меры и процедуры, направленные на защиту информации организации от несанкционированного доступа, использования, изменения и распространения. В документе определены политические, организационные и технические меры, способы обнаружения и реагирования на инциденты безопасности, а также ответственность сотрудников в области информационной безопасности. Составляется сотрудником отдела кадров или сотрудником бухгалтерии. Не имеет каких-либо ценностей для организации в большинстве случаев
- o9 - документ «Статистический отчет о выполнении плана по работе» - составляется сотрудниками организации или может быть передан руководителю отдела, также доступ на чтение имеет генеральный директор. Зачастую не содержит в себе защищаемую информацию
Так как в данной работе мы рассматриваем простейшие права доступа, такие как read и write, то второе правило статического взаимного исключения ролей мы не учитываем. Также в моей модели отсутствует множество сессий, добавлено множество объектов. Таким образом моя модель будет выглядеть следующим образом:
- Множество U (субъектов):
- user1 - генеральный директор;
- user3 - финансовый директор;
- user2 - IT-директор;
- user4 - сотрудник отдела кадров;
- user5 - сотрудник бухгалтерии;
- admin - системный администратор;
- Osoba - сотрудник c несколькими ролями для проверки ограничения;
- Множество O (объектов):
- o1 - системное ПО;
- о2 -- ИС организации (модификация «1С-Предприятие»);
- о3 -- база данных сотрудников организации;
- о4 -- полное описание ЛВС организации;
- о5 -- годовой балансовый отчет организации;
- o6 - документ «Стратегия инновационного развития организации»;
- о7 -- документ «Политика информационной безопасности организации»;
- o8 - документ «Приказ о поощрении работников по результатам работы»;
- o9 - документ «Статистический отчет о выполнении плана по работе с клиентами»;
- Множество P (прав доступа субъектов к объектам):
- Read;
- Write;
- Read and Write;
- Множество C (классы):
- GenDir (General director)
- Director department (IT director, AD director)
- Department employee (HR employee, accountanting employee)
- Sisadmin (Admin)
- Множество R (роли):
- General director
- IT director
- AD director
- HR employee
- Accountanting employee
- Admin
Таблица 1 - Таблица разграничения ролей
Роли/Объекты |
o1 |
o2 |
o3 |
o4 |
o5 |
o6 |
o7 |
o8 |
o9 |
|
General director |
- |
- |
r |
- |
r |
wr |
wr |
wr |
r |
|
IT director |
wr |
wr |
- |
wr |
wr |
w |
- |
r |
wr |
|
AD director |
- |
wr |
- |
- |
- |
w |
r |
r |
r |
|
HR employee |
- |
w |
- |
- |
- |
- |
r |
wr |
r |
|
Accountanting employee |
- |
w |
- |
- |
w |
- |
r |
wr |
wr |
|
Admin |
wr |
wr |
wr |
wr |
- |
- |
wr |
r |
r |
Протестируем программную модель. Входим как администратор и смотрим учетные данные пользователя user1
Рисунок 3 - Просмотр учетных данных user1
Далее посмотрим права доступа для его роли
Рисунок 4 - Просмотр прав доступа для роли General director
Теперь заходим как пользователь user1 и пробуем получить доступ на чтение к объекту o1. Так как у роли General director нет такого права доступа к объекту о1, пользователь получает соответствующее сообщение об ошибке доступа
Рисунок 5 - Отказ в доступе на чтение объекта о1 для user1
Выберем объект, к которому у пользователя user1 есть доступ. Это о5. Запросим доступ на чтение и получаем разрешение на данное действие, так как, в соответствии с матрицей доступа, данная роль имеет право на чтение объекта о5
Рисунок 6 - Доступ на чтение объекта о5
Попробуем изменить объект. Выберем объект о7, так у данной роли к нему полный доступ. Запросим доступ на чтение и запись. Получим содержимое объекта и поле для ввода новой информации. Вводим и нажимаем «Enter». Появляется сообщение об успешном добавлении нового содержимого в файл. Далее запросим доступ на чтение этого же объекта и видим, что там появилась новая информация
Рисунок 7 - Добавление нового содержимого в объект о7
Протестируем изменение ролей. Заходим как администратор, вводим необходимые данные и получаем сообщение об изменении права доступа для роли General director
Рисунок 8 - Изменение прав доступа для роли
модель разграничение доступ
Проверим, изменились ли права доступа
Рисунок 9 - Проверка изменений
Права изменились. Теперь зайдем как пользователь user1 и попробуем запросить доступ на чтение объекта о1
Рисунок 10 - Дополнительная проверка изменений
Протестируем удаление роли пользователю Osoba. Смотрим его учетные данные и видим, что он имеет 2 роли. Удаляем одну и снова смотрим учетные данные. Роль удалена
Рисунок 11 - Удаление роли
Протестируем ограничение статического взаимного исключения ролей. У пользователя Osoba есть роль IT director из класса Director department. Попробуем присвоить ему роль из этого же класса.
Рисунок 12 - Проверка ограничения
Мы получили соответствующее сообщение о невозможности добавить несколько ролей из одного класса
Теперь попробуем добавить роль пользователю «Osoba» из другого класса. На данный момент этот пользователь имеет роль «IT director» из класса «Director department». На рисунке приведены разрешения для данной роли.
Рисунок 13 - Текущие разрешения для субъекта
Теперь добавим для пользователя роль «HR employee» из класса «Department employee».
Рисунок 14 - Добавление роли и проверка ее наличия
Теперь проверим, изменились ли разрешения на доступ у этого субъекта к объектам. Например, директор IT отдела (роль «IT director») имеет к объекту o8 доступ только на чтение, а сотрудник отдела кадров (роль «HR employee») имеет доступ и на чтение, и на запись.
Рисунок 15 - Проверка объединения разрешений для ролей
Открываем файл и проверяем на наличие нового содержимого
Рисунок 16 - Проверка нового содержимого
Следовательно, можно сделать вывод, что роль была успешно добавлена и разрешения были объединены.
ВЫВОД
В результате выполнения курсового проекта была изучена модель ролевого управления доступом с ограничением «статическое взаимное исключение ролей», разработана и протестирована программная модель политики разграничения доступа с соответствующими функциями.
Изучив данную модель, можно сделать вывод о ее достоинствах и недостатках:
- Достоинства:
1. Улучшение безопасности: ролевая политика разграничения доступа позволяет предоставлять доступ только тем сотрудникам, которым он необходим, что уменьшает риск несанкционированного доступа и потенциальных угроз безопасности.
2. Удобство администрирования: системный администратор может назначать права доступа на основе ролей, а не индивидуальных пользователей, что упрощает процесс управления.
3. Гибкость: ролевая политика разграничения доступа позволяет быстро и легко изменять права доступа в соответствии с изменением ролей пользователей. Новый сотрудник может быть назначен на определенную роль, и ему будут автоматически назначены соответствующие права доступа.
- Недостатки:
1. Сложность реализации: внедрение ролевой политики разграничения доступа может быть сложным и требовать определенных знаний и навыков. Необходимо определить список ролей и связанных с ними прав доступа, а затем настроить систему для назначения и управления этими ролями.
2. Ограничения: ролевая политика разграничения доступа может быть ограничена в том, как точно она может определить доступ к определенным ресурсам или функциям. В некоторых случаях может потребоваться более тонкое и точное разграничение доступа в зависимости от конкретных требований пользователя.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Корниенко, С. В. Оформление студенческих научных работ [Электронный ресурс]: методические указания / С. В. Корниенко. - Санкт-Петербург, 2021. - 12 с.
ПРИЛОЖЕНИЕ
Листинг программы на языке программирования Phyton:
Файл kyrsovaya:
import json
import time
# Загрузка данных из файла
def load_data():
try:
with open("data.json", "r") as file:
data = json.load(file)
except FileNotFoundError:
data = {"users": []}
return data
def load_data_role():
try:
with open("data_role.json", "r") as file:
data_role = json.load(file)
except FileNotFoundError:
data_role = {"roleClasses": []}
return data_role
# Сохранение данных в файл
def save_data(data):
with open("data.json", "w") as file:
json.dump(data, file)
def save_data_role(data_role):
with open("data_role.json", "w") as file:
json.dump(data_role, file)
# Функция для изменения пароля пользователя
def change_password(data):
username = input("Введите имя пользователя: ")
# Поиск пользователя в базе данных
user = None
for u in data["users"]:
if u["login"] == username:
user = u
break
if user is None:
print("Такой пользователь не найден")
return
# Проверка наличия прав администратора
else:
new_password = create_password()
shifrPassword = shifrovka(new_password)
if user["password"] == shifrPassword:
print("Вы ввели тот же пароль. Поменяйте пароль")
else:
user["password"] = shifrPassword
save_data(data)
print("Пароль пользователя успешно изменен")
# Функция для изменения логина пользователя
def change_login(data):
username = input("Введите имя пользователя: ")
# Поиск пользователя в базе данных
user = None
for u in data["users"]:
if u["login"] == username:
user = u
break
if user is None:
print("Такой пользователь не найден")
return
# Проверка наличия прав администратора
else:
new_login = create_login()
if user["login"] == new_login:
print("Вы ввели тот же пароль. Поменяйте пароль")
else:
user["login"] = new_login
save_data(data)
print("Логин пользователя успешно изменен")
def shifrovka(password):
str1 = password
str2 = ""
c = 0
max = len(str1)
q = -1
arr_en = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '#','!','@','%','$','^','&','*','/','(',')','[',']','+','_','=',':',';',' ','?','>','<','.',',','|','{','}','`']
index = len(str1)//6
r = len(str1)%6
if r!= 0:
c = index+1
else:
c = index;
for k in range(c):
matrica = [[0 for i in range(3)] for j in range(3)]
for i in range(3):
for j in range(3):
matrica[i][j] = arr_en[1]
j=2
while j > -1:
q+=1
if q<max:
matrica[0][j] = str1[q]
j-=1
j1=1
i=1
while i < 3:
if (i+j1 == 2 and q<max-1):
q+=1
matrica[j1][i] = str1[q]
j1+=1
i+=1
i=2
while i > 0:
q+=1
if q<max:
matrica[i][2] = str1[q]
i-=1
for i in range(3):
for j in range(3):
str2+=matrica[i][j]
return str2
# Функция для просмотра учетных записей пользователей доделать
def view_all_users(data):
login = input("Введите логин пользователя, данные которого хотите увидеть: ")
a=0
role_classes_name = []
roles__name =[]
for user in data["users"]:
if user["login"] == login:
user_roles = user["roles"]
for user_role in user_roles: # обращаемся к его списку ролей
role_class_name = user_role["role_class_name"]
role__name = user_role["role_name"]
role_classes_name.append(role_class_name)
roles__name.append(role__name)
for user in data["users"]:
if user["login"] == login:
print(f"Логин: {user['login']}, Пароль: {user['password']}, Класс: {role_classes_name}, Роль: {roles__name} ")
a=1
break
if a == 0:
print("Такого логина не существует")
# Функция для создания пароля
def create_password():
while True:
new_password = input("\nВведите пароль: ")
if len(new_password)>7 and proverkaPassword(new_password) == 1:
return new_password
else:
print("Пароль должен содержать не менее 8 символов, обязательно латинские буквы в нижнем регистре, разделенные '$'")
def proverkaPassword(password): # Функция для проверки пароля на заданное требование
i = 0
count = 0
count2 = 0
b = password[::2]
for i in range(len(b)):
if b[i] == "$":
count = count + 1
else:
pass
if count == len(b):
d = password[1::2]
for i in range(len(d)):
if (d[i].isalpha() == True and d[i].islower() == True):
count2 = count2 + 1
else:
pass
if(count2 == len(d)):
return 1
else:
return 0
else:
count = 0
count2 = 0
b = password[1::2]
for i in range(len(b)):
if b[i] == "$":
count = count + 1
else:
pass
if count == len(b):
d = password[::2]
for i in range(len(d)):
if (d[i].isalpha() == True and d[i].islower() == True):
count2 = count2 + 1
else:
pass
if(count2 == len(d)):
return 1
else:
return 0
else:
return 0
# Функция для создания логина
def create_login():
new_login = input("Введите логин: ")
return new_login
def userMenu(data, data_role, username):
while True:
print("Меню пользователя")
print("1. Работать")
print("0. Выйти в главное меню")
cmd = input("Выберите пункт: ")
if cmd == "0":
break
elif choice == "1":
rabota_s_object(data,data_role, username)
else:
print("Вы ввели неправильное значение")
def adminMenu(data, data_role):
while True:
print("\nМеню администратора:")
print("1. Изменить пароль пользователя")
print("2. Изменить логин пользователя")
print("3. Просмотреть учетные данные определенного пользователя")
print("4. Добавить пользователя")
print("5. Удалить пользователя")
print("6. Добавить роль пользователю")
print("7. Удалить роль пользователю")
print("8. Изменить разрешение для роли")
print("9. Посмотреть разрешения для роли")
print("10. Добавить класс")
print("11. Удалить класс")
print("12. Добавить роль в класс")
print("13. Удалить роль из класса")
print("14. Выйти")
choice = input("Выберите действие: ")
if choice == "1":
change_password(data) and create_password
elif choice == "2":
change_login(data) and create_login
elif choice == "3":
view_all_users(data)
elif choice == "4":
add_user(data)
elif choice == "5":
delete_user(data)
elif choice == "6":
add_role_to_user(data, data_role)
elif choice == "7":
delete_role_to_user(data)
elif choice == "8":
change_permission_for_role(data,data_role)
elif choice == "9":
view_all_permission_for_role(data_role)
elif choice == "10":
add_role_class(data_role)
elif choice == "11":
delete_role_class(data_role)
elif choice == "12":
add_role_to_class(data_role)
elif choice == "13":
delete_role_to_class(data_role)
elif choice == "14":
break
else:
print("Вы ввели неправильное значение")
def add_user(data):
username = input("Введите имя пользователя: ")
for user in data["users"]:
if user["login"] == username:
print("Пользователь с таким именем уже существует")
return
password = create_password()
if username == password:
print("Логин и пароль совпадают")
return
shifrPassword = shifrovka(password)
data["users"].append({"login": username, "password": shifrPassword, "roles": [] })
save_data(data)
print("Пользователь успешно добавлен")
def delete_user(data):
username = input("Введите имя пользователя, которого хотите удалить: ")
for user in data["users"]:
if user["login"] == username:
data["users"].remove(user)
save_data(data)
print("Пользователь успешно удален")
return
print("Пользователь не найден")
def login(attempts):
data = load_data()
data_role = load_data_role()
username = input("Введите имя пользователя: ")
# Поиск пользователя в базе данных
user = None
for u in data["users"]:
if u["login"] == username:
user = u
break
if user is None:
print("Такого логина не существует")
print("Осталось:", 4 - attempts, "попыток!")
return 0
password = input("Введите пароль: ")
shifrPassword = shifrovka(password)
if user["password"]!= shifrPassword:
print("Неверный пароль")
print("Попыток осталось:", 4 - attempts)
return 0
if user.get("admin"):
print("Вы вошли как администратор")
adminMenu(data, data_role)
else:
print("\nДобро пожаловать", u["login"],"!")
userMenu(data, data_role, username)
def add_role_class(data_role):
role_class_name = input("Введите название класса: ")
for role_class in data_role["roleClasses"]:
if role_class["class_name"] == role_class_name:
print("Класс с таким названием уже существует")
return
data_role["roleClasses"].append({"class_name": role_class_name, "roles": []})
save_data_role(data_role)
print("Класс успешно добавлен")
return
def delete_role_class(data_role):
role_class_name = input("Введите класс, который хотите удалить: ")
a=0
for role_class in data_role["roleClasses"]:
if role_class["class_name"] == role_class_name:
data_role["roleClasses"].remove(role_class)
save_data_role(data_role)
a=1
print("Класс успешно удален")
return
if a==0:
print("Такого класса не сущетсвует")
def add_role_to_class(data_role):
class__name = input("Введите название класса: ")
null = None
b=0
for role_class in data_role['roleClasses']:
if role_class["class_name"] == class__name:
b=1
roles = role_class["roles"]
if b==0:
print("Такого класса не существует")
return
role__name = input("Введите роль, которую хотите добавить в класс: ")
for role in roles:
if role["role_name"] == role__name:
print("Роль с таким названием уже существует")
return
for role_class in data_role['roleClasses']:
if role_class["class_name"] == class__name:
roles = role_class["roles"]
roles.append({"role_name": role__name, "objects": [{"object_name": "o1", "permission1": null, "permission2": null}, {"object_name": "o2", "permission1": null, "permission2": null}, {"object_name": "o3", "permission1": null, "permission2": null}, {"object_name": "o4", "permission1": null, "permission2": null}, {"object_name": "o5", "permission1": null, "permission2": null}, {"object_name": "o6", "permission1": null, "permission2": null}, {"object_name": "o7", "permission1": null, "permission2": null}, {"object_name": "o8", "permission1": null, "permission2": null}, {"object_name": "o9", "permission1": null, "permission2": null}]})
save_data_role(data_role)
print("Роль успешно добавлена")
return
def delete_role_to_class(data_role):
a=0
role_class_name = input("Введите название класса: ")
for role_class in data_role["roleClasses"]:
if role_class["class_name"] == role_class_name:
roles = role_class["roles"]
a=1
if a==0:
print("Такого класса не сущетсвует")
return
b=0
role__name = input("Введите роль, которую хотите удалить: ")
for role in roles:
if role["role_name"] == role__name:
b=1
if b==0:
print("Такой роли не сущетсвует")
return
for role_class in data_role["roleClasses"]:
if role_class["class_name"] == role_class_name:
for role in roles:
if role["role_name"] == role__name:
roles.remove(role)
save_data_role(data_role)
print("Роль успешно удалена")
return
def add_role_to_user(data, data_role):
login = input("Введите логин пользователя, которому хотите назначить роль: ")
c=0
for user in data["users"]:
if user["login"] == login:
c=1
if c == 0:
print("Такого логина не существует")
return
a=0
role_class_name = input("Введите название класса: ")
for role_class in data_role["roleClasses"]:
if role_class["class_name"] == role_class_name:
roles = role_class["roles"]
a=1
if a==0:
print("Такого класса не сущетсвует")
return
b=0
role__name = input("Введите роль, которую хотите добавить: ")
for role in roles:
if role["role_name"] == role__name:
b=1
if b==0:
print("Такой роли не сущетсвует")
return
i=0
for user in data["users"]:
if user["login"] == login: # нашли пользователя
user_roles = user["roles"]
for user_role in user_roles:# обращаемся к его списку ролей
if user_role["role_class_name"] == role_class_name:
print("Данная роль принадлежит классу, одна из ролей которого уже есть у данного пользователя")
i=1
return
if i == 0:
user_roles.append({"role_class_name": role_class_name, "role_name": role__name})
save_data(data)
print("Роль назначена успешно!")
return
return
def delete_role_to_user(data):
a=0
login = input("Введите логин пользователя, которому хотите удалить роль: ")
for user in data["users"]:
if user["login"] == login:
a=1
if a == 0:
print("Такого логина не существует")
return
b=0
role__name = input("Введите роль, которую хотите удалить: ")
for user in data["users"]:
if user["login"] == login: # нашли пользователя
user_roles = user["roles"]
for user_role in user_roles:
if user_role["role_name"] == role__name:
b=1
if b==0:
print("Такой роли не сущетсвует")
return
for user in data["users"]:
if user["login"] == login: # нашли пользователя
user_roles = user["roles"]
for user_role in user_roles: # обращаемся к его списку ролей
if user_role["role_name"] == role__name:
user_roles.remove(user_role)
save_data(data)
print("Роль удалена успешно!")
return
return
def change_permission_for_role(data, data_role):
d=0
role_class_name = input("Введите название класса: ")
for role_class in data_role["roleClasses"]:
if role_class["class_name"] == role_class_name:
roles = role_class["roles"]
d=1
if d==0:
print("Такого класса не сущетсвует")
return
b=0
role__name = input("Введите роль, которую хотите изменить: ")
for role in roles:
if role["role_name"] == role__name:
b=1
if b==0:
print("Такой роли не сущетсвует")
return
c=0
object_name = input("Введите объект, который хотите изменить(o1-o9): ")
for role in roles:
if role["role_name"] == role__name:
objects = role["objects"]
for obj in objects:
if obj["object_name"] == object_name:
c=1
if c==0:
print("Такого объекта не сущетсвует")
return
a=0
permission = input("Введите разрешение, которое хотите изменить: ")
if permission == "write" or permission == "read":
a=1
if a==0:
print("Такого разрешения не сущетсвует")
return
print("1. Добавить разрешение")
print("2. Удалить разрешение")
choice = input("Выберите действие: ")
if choice == "1":
for role in roles:
if role["role_name"] == role__name:
objects = role["objects"]
for obj in objects:
if obj["object_name"] == object_name:
if permission == "read":
obj["permission1"] = permission
save_data_role(data_role)
print("Разрешение для роли добавлено!")
return
elif permission == "write":
obj["permission2"] = permission
save_data_role(data_role)
print("Разрешение для роли добавлено!")
return
elif choice == "2":
for role in roles:
if role["role_name"] == role__name:
objects = role["objects"]
for obj in objects:
if obj["object_name"] == object_name:
if permission == "read":
obj["permission1"] = None
save_data_role(data_role)
print("Разрешение для роли удалено!")
return
elif permission == "write":
obj["permission2"] = None
save_data_role(data_role)
print("Разрешение для роли удалено!")
return
else:
print("Вы ввели неправильное значение")
return
def view_all_permission_for_role(data_role):
a=0
b=0
roles = None
objects = None
class__name = input("Введите класс: ")
for role_class in data_role['roleClasses']:
if role_class["class_name"] == class__name:
b=1
roles = role_class["roles"]
if b==0:
print("Такого класса не существует")
return
role__name = input("Введите роль, для которой хотите посмотреть разрешения: ")
for role in roles:
if role["role_name"] == role__name:
objects = role["objects"]
for obj in objects:
object_name = obj["object_name"]
object_permission1 = obj["permission1"]
object_permission2 = obj["permission2"]
print(object_name, object_permission1, object_permission2)
a = 1
if a == 0:
print("Такой роли не существует")
return
return
def rabota_s_object(data,data_role, username):
role_classes_name = []
roles__name = []
c=0
object_name = input("Введите объект, с которым вы хотите взаимодействовать(o1-o10): ")
file_name = object_name+".txt"
for user in data["users"]:
if user["login"] == username:
user_roles = user["roles"]
for user_role in user_roles: # обращаемся к его списку ролей
role_class_name = user_role["role_class_name"]
role__name = user_role["role_name"]
role_classes_name.append(role_class_name)
roles__name.append(role__name)
for role_class in data_role["roleClasses"]:
if role_class["class_name"] == role_class_name:
roles = role_class["roles"]
for role in roles:
if role["role_name"] == role__name:
objects = role["objects"]
for obj in objects:
if obj["object_name"] == object_name:
c=1
if c==0:
print("Такого объекта не сущетсвует")
return
a=0
permission = input("Введите разрешение, c которым хотите взаимодействовать с объектом(read,write или rw): ")
if permission == "write" or permission == "read" or permission == "rw":
a=1
if a==0:
print("Такого разрешения не сущетсвует")
return
object_permissions1 = []
object_permissions2 = []
i=0
for role_class_name in role_classes_name:
for role_class in data_role["roleClasses"]:
if role_class["class_name"] == role_class_name:
roles = role_class["roles"]
for role in roles:
if role["role_name"] == role__name:
objects = role["objects"]
for obj in objects:
if obj["object_name"] == object_name:
object_permissions1.append(obj["permission1"])
object_permissions2.append(obj["permission2"])
for object_permission1 in object_permissions1:
if permission == "read" and object_permission1 == "read":
with open(file_name, 'r',encoding="utf-8") as file:
file_content = file.read()
print("Содержимое файла:")
print(file_content)
return
for object_permission2 in object_permissions2:
if permission == "write" and object_permission2 == "write":
new_content = input("Введите новое содержимое файла: ")
with open(file_name, 'a', encoding="utf-8") as file:
file.write(new_content + "\n") # Добавляем новое содержимое
print("Содержимое успешно добавлено в файл.")
return
if permission == "rw" and "read" in object_permissions1 and "write" in object_permissions2:
with open(file_name, 'r+', encoding="utf-8") as file:
file_content = file.read()
print("Текущее содержимое файла:")
print(file_content)
user_input = input("Введите новый текст для добавления в файл: ")
file.write(user_input + "\n") # Запись нового текста в файл
print("Текст успешно добавлен в файл.")
return
if (permission == "rw" or permission == "read") and "read" not in object_permissions1:
print("Вы не имеете доступ к этому объекту")
return
if (permission == "rw" or permission == "write") and "write" not in object_permissions2:
print("Вы не имеете доступ к этому объекту")
return
return
attempts = 0
while True:
print("\nГлавное меню:")
print("1. Вход")
print("2. Выход")
choice = input("Выберите действие: ")
if choice == "1":
if (attempts!= 5):
if (login(attempts) == 0):
attempts += 1
else:
pass
else:
print("Временная блокировка пользователя")
time.sleep(5)
attempts = 0
elif choice == "2":
break
else:
print("Вы ввели неправильное значение")
# Пароль админа z$x$c$v$
# Пароль user1 a$s$d$f$
# Пароль user2 p$r$i$v$e$t
# Пароль user3 t$y$u$i$o
# Пароль user4 g$h$j$k$
# Пароль user5 q$w$e$r$t$
# Пароль Osoba b$g$c$j$u$
Файл data:
{"users": [{"login": "admin", "password": "x$zb$$bbcb$vbbbbbb", "admin": true, "roles": [{"role_class_name": "Sisadmin", "role_name": "Admin"}]}, {"login": "user5", "password": "w$qb$$bbet$rb$bbbb", "roles": [{"role_class_name": "Department employee", "role_name": "accountanting employee"}]}, {"login": "user1", "password": "s$ab$$bbdb$fbbbbbb", "roles": [{"role_class_name": "GenDir", "role_name": "General director"}]}, {"login": "user2", "password": "r$pb$$bbie$vb$bbbt", "roles": [{"role_class_name": "Director department", "role_name": "IT director"}]}, {"login": "user3", "password": "y$tb$$bbuo$ibbbbbb", "roles": [{"role_class_name": "Director department", "role_name": "AD director"}]}, {"login": "user4", "password": "h$gb$$bbjb$kbbbbbb", "roles": [{"role_class_name": "Department employee", "role_name": "HR employee"}]}, {"login": "Osoba", "password": "g$bb$$bbcu$jb$bbbb", "roles": [{"role_class_name": "Department employee", "role_name": "HR employee"}, {"role_class_name": "Director department", "role_name": "IT director"}]}]}
Файл data_role:
{"roleClasses": [{"class_name": "Director department", "roles": [{"role_name": "IT director", "objects": [{"object_name": "o1", "permission1": "read", "permission2": "write"}, {"object_name": "o2", "permission1": "read", "permission2": "write"}, {"object_name": "o3", "permission1": null, "permission2": null}, {"object_name": "o4", "permission1": "read", "permission2": "write"}, {"object_name": "o5", "permission1": "read", "permission2": "write"}, {"object_name": "o6", "permission1": null, "permission2": "write"}, {"object_name": "o7", "permission1": null, "permission2": null}, {"object_name": "o8", "permission1": "read", "permission2": null}, {"object_name": "o9", "permission1": "read", "permission2": "write"}]}, {"role_name": "AD director", "objects": [{"object_name": "o1", "permission1": null, "permission2": null}, {"object_name": "o2", "permission1": "read", "permission2": "write"}, {"object_name": "o3", "permission1": null, "permission2": null}, {"object_name": "o4", "permission1": null, "permission2": null}, {"object_name": "o5", "permission1": null, "permission2": null}, {"object_name": "o6", "permission1": null, "permission2": "write"}, {"object_name": "o7", "permission1": "read", "permission2": null}, {"object_name": "o8", "permission1": "read", "permission2": null}, {"object_name": "o9", "permission1": "read", "permission2": null}]}]}, {"class_name": "Department employee", "roles": [{"role_name": "accountanting employee", "objects": [{"object_name": "o1", "permission1": null, "permission2": null}, {"object_name": "o2", "permission1": null, "permission2": "write"}, {"object_name": "o3", "permission1": null, "permission2": null}, {"object_name": "o4", "permission1": null, "permission2": null}, {"object_name": "o5", "permission1": null, "permission2": "write"}, {"object_name": "o6", "permission1": null, "permission2": null}, {"object_name": "o7", "permission1": "read", "permission2": null}, {"object_name": "o8", "permission1": "read", "permission2": "write"}, {"object_name": "o9", "permission1": "read", "permission2": "write"}]}, {"role_name": "HR employee", "objects": [{"object_name": "o1", "permission1": null, "permission2": null}, {"object_name": "o2", "permission1": null, "permission2": "write"}, {"object_name": "o3", "permission1": null, "permission2": null}, {"object_name": "o4", "permission1": null, "permission2": null}, {"object_name": "o5", "permission1": null, "permission2": null}, {"object_name": "o6", "permission1": null, "permission2": null}, {"object_name": "o7", "permission1": "read", "permission2": null}, {"object_name": "o8", "permission1": "read", "permission2": "write"}, {"object_name": "o9", "permission1": "read", "permission2": null}]}]}, {"class_name": "GenDir", "roles": [{"role_name": "General director", "objects": [{"object_name": "o1", "permission1": null, "permission2": null}, {"object_name": "o2", "permission1": null, "permission2": null}, {"object_name": "o3", "permission1": "read", "permission2": null}, {"object_name": "o4", "permission1": null, "permission2": null}, {"object_name": "o5", "permission1": "read", "permission2": null}, {"object_name": "o6", "permission1": "read", "permission2": "write"}, {"object_name": "o7", "permission1": "read", "permission2": "write"}, {"object_name": "o8", "permission1": "read", "permission2": "write"}, {"object_name": "o9", "permission1": "read", "permission2": null}]}]}, {"class_name": "Sisadmin", "roles": [{"role_name": "Admin", "objects": [{"object_name": "o1", "permission1": "read", "permission2": "write"}, {"object_name": "o2", "permission1": "read", "permission2": "write"}, {"object_name": "o3", "permission1": "read", "permission2": "write"}, {"object_name": "o4", "permission1": "read", "permission2": "write"}, {"object_name": "o5", "permission1": null, "permission2": null}, {"object_name": "o6", "permission1": null, "permission2": null}, {"object_name": "o7", "permission1": "read", "permission2": "write"}, {"object_name": "o8", "permission1": "read", "permission2": null}, {"object_name": "o9", "permission1": "read", "permission2": null}]}]}]}
Размещено на Allbest.ru
...Подобные документы
Система мандатного разграничения доступа. Разработка функциональной модели и ее уровни. Разработка информационной и динамической модели. Необходимость использования механизмов. Методология IDEFO. Функциональный блок. Анализ идентификационных данных.
курсовая работа [1,9 M], добавлен 24.01.2009Характеристика основных способов защиты от несанкционированного доступа. Разработка политики безопасности системы. Проектирование программного обеспечения применения некоторых средств защиты информации в ОС. Содержание основных разделов реестра.
лабораторная работа [1,9 M], добавлен 17.03.2017Основы программирования на языке PHP. Этапы разработки сайта ФАиС Выбор концепции его дизайна. Построение базы данных в среде СУБД MySQL. Расположение основных блоков web-сайта. Разработка шаблонной страницы и системы разграничения доступа к контенту.
дипломная работа [1,9 M], добавлен 12.12.2013Классификация и характеристика сетей доступа. Технология сетей коллективного доступа. Выбор технологии широкополосного доступа. Факторы, влияющие на параметры качества ADSL. Способы конфигурации абонентского доступа. Основные компоненты DSL соединения.
дипломная работа [1,6 M], добавлен 26.09.2014Характеристика дискретного управления доступом. Особенности модели тип-домен, основанной на концепции минимальных привилегий. Unix-система права доступа файлов. Контролирование администратором доступа в мандатной системе, проблемы ее использования.
реферат [253,2 K], добавлен 09.01.2012Организация доступа в Интернет на основе оптических технологий в сетях доступа. Технологии построения городских сетей Интернет-доступа на основе коммутаторов Ethernet второго и третьего уровня. Основные преимущества оптических технологий в сетях доступа.
презентация [135,5 K], добавлен 14.09.2013Свойства и режимы реализации удаленного доступа. Организация удаленного доступа. Интеграция удаленного доступа в корпоративную интрасеть. Установка клиентских средств удаленного доступа для Windows. Утилита, работающая в архитектуре клиент-сервер.
курсовая работа [28,2 K], добавлен 17.12.2011Сеть доступа как система средств связи между местной станцией и терминалом пользователя с замещением части или всей распределительной сети, типы и функциональные особенности, сферы практического применения. Операционные системы управления сети доступа.
реферат [2,1 M], добавлен 14.02.2012Анализ методов и средств контроля доступа к файлам. Проблемы безопасности работы с файлами, средства контроля доступа ним. Идеология построения интерфейса, требования к архитектуре. Работа классов системы. Оценка себестоимости программного продукта.
дипломная работа [2,5 M], добавлен 21.12.2012Основные задачи защиты операционных систем: идентификация, аутентификация, разграничение доступа пользователей к ресурсам, протоколирование и аудит. Проблема контроля доступа в компьютерную систему. Разработка программы управления матричным принтером.
курсовая работа [118,9 K], добавлен 22.06.2011Методы доступа к сети. Алгоритм ALOHA, используемый для доступа к радиоканалу большого числа независимых узлов. Эффективность алгоритма CSMA/CD. Метод маркерного доступа. Ethernet – самый распространенный в настоящий момент стандарт локальных сетей.
лекция [112,9 K], добавлен 25.10.2013Модель распространения прав доступа Take-Grant, применяемая для систем защиты, использующая дискреционное разграничение доступа. Матрица смежности графа доступов. Возможность получения некоторого права субъектом на объект. Алгоритм работы программы.
лабораторная работа [846,2 K], добавлен 21.01.2014Права доступа к файлам и управление ими и другими атрибутами. Значения прав доступа для файлов и директорий. Набор файловых флагов. Команды управления процессами в операционной системе UNIX. Опции и значения программ архивации и сжатия - tar и gzip.
контрольная работа [234,4 K], добавлен 16.01.2014Выделенный канал. Скорость доступа. Стоимость доступа. Стоимость оборудования и подключения. Использование телефонных линий Dial-Up. Модем или посредник между компьютерами. Использование бытовой электрической сети для доступа в Интернет. Intranet.
контрольная работа [56,8 K], добавлен 25.12.2004Обзор существующих технологий широкополосного доступа (xDSL, PON, беспроводной доступ). Описание особенностей технологии PON. Проект по строительству сети абонентского доступа на технологии пассивной оптической сети. Схема распределительных участков.
дипломная работа [3,9 M], добавлен 28.05.2016Обеспечение непосредственной связи контроллера прямого доступа к памяти (ПДП) и памяти микроЭВМ. Совместное использование шин системного интерфейса процессором и контроллером. Последовательность и алгоритм программирования контроллера прямого доступа.
реферат [122,6 K], добавлен 13.11.2009Администратор источников данных ODBC: его запуск и принципы работы, возможности эксплуатации и управления. Вкладка "Пользовательское DSN", ее содержание и структура. Библиотеки для доступа к ODBC, типы используемых данных. Функция SQLAllocHandle.
презентация [485,0 K], добавлен 06.01.2014Анализ программных средств несанкционированного доступа к информации в сетях ЭВМ и способов защиты. Возможности операционных систем по защите и разграничению доступа к информации и выбор самой защищенной. Планирование сети штаба объединения ВВС и ПВО.
дипломная работа [1,0 M], добавлен 14.09.2010Область использования телекоммуникационной технологии. Целесообразность применения WiMAX как технологии доступа, фиксированный и мобильный вариант. Особенности широкополосного доступа, пользовательское оборудование. Режимы работы, MAC-канальный уровень.
контрольная работа [47,0 K], добавлен 22.11.2011Основная цель и модели сети. Принцип построения ее соединений. Технология клиент-сервер. Характеристика сетевых архитектур Ethernet, Token Ring, ArcNet: метод доступа, среда передачи, топология. Способы защиты информации. Права доступа к ресурсам сети.
презентация [269,0 K], добавлен 26.01.2015