Skip to content

Instantly share code, notes, and snippets.

@spellancer
Last active August 29, 2015 13:58
Show Gist options
  • Save spellancer/9929196 to your computer and use it in GitHub Desktop.
Save spellancer/9929196 to your computer and use it in GitHub Desktop.
lab2.last infsecure
# -*- coding: utf-8 -*-
# Нанян Саркис АК5-81
# Вариант 11, 5 субъектов 3 объекта
import random
# print random.randint(0,7)
# Функция вывода списка файлов с правами
def sprint(sb,ss=-1):
print '------------------------------------------------------------------------------------'
print "\nСписок файлов для пользователя %s: " % subjects[sb]
si = 0
while si<3:
#si = objects.index(i)
if ss !=-1:
si = ss
if matrix[sb][si] == 7:
print '\n Идентификатор объекта: ',si, ';', 'Объект: ', objects[si] ,'; ', 'Права: read, write, grant'
elif matrix[sb][si] == 6:
print '\n Идентификатор объекта: ',si, ';', 'Объект: ', objects[si] ,'; ', 'Права: read, write, --'
elif matrix[sb][si] == 5:
print '\n Идентификатор объекта: ',si, ';', 'Объект: ', objects[si] ,'; ', 'Права: read, -- , grant'
elif matrix[sb][si] == 4:
print '\n Идентификатор объекта: ',si, ';','Объект: ', objects[si] ,'; ', 'Права: read, -- , --'
elif matrix[sb][si] == 3:
print '\n Идентификатор объекта: ',si, ';', 'Объект: ', objects[si] ,'; ', 'Права: -- , write, grant'
elif matrix[sb][si] == 2:
print '\n Идентификатор объекта: ',si, ';','Объект: ', objects[si] ,'; ', 'Права: -- , write, --'
elif matrix[sb][si] == 1:
print '\n Идентификатор объекта: ',si, ';','Объект: ', objects[si] ,'; ', 'Права: -- , -- , grant'
elif matrix[sb][si] == 0:
print '\n Идентификатор объекта: ',si, ';','Объект: ', objects[si] ,'; ', 'Права: -- , -- , --'
if ss != -1:
si = 3
else:
si +=1
print '------------------------------------------------------------------------------------'
#def rw():
def grant(k,sb,idf):
if k:
print "\nПопытка назначить права для файла %s " % idf
#print "Введите идентификатор файла для изменения прав: "
#idf = input("0-2: ")
idf = objects.index(idf)
if matrix[sb][idf] % 2 !=0:
usern = raw_input("Введите имя пользователя, которому необходимо назначить права: ")
sbi = subjects.index(usern)
adk = False
if sbi == 0:
adk = True
if usern in subjects and not adk:
sprint(sbi,idf)
print "\nВведите необходимые права для назначения, разделяя их пробелами"
newpr = raw_input("read/write/grant: ")
newpr = newpr.split()
akeys = actions.keys()
# Новое значение для матрицы доступа
nvalue = 0
for j in newpr:
if j in akeys:
nvalue += actions[j]
matrix[sbi][idf] = nvalue
print "Вывести обновленный список файлов и прав?"
ch = raw_input ('yes/no: ')
if ch == 'yes':
sprint(sbi,idf)
elif usern not in subjects and not adk:
print "Неверное имя пользователя!"
else:
print "Нельзя изменить права доступа администратора!"
else:
print "Вы не можете изменять права для данного файла!"
else:
print "Вы не можете назначать права"
def read(sb, arg):
arg = objects.index(arg)
check = [4,5,6,7]
if matrix[sb][arg] in check:
print "Операция выполнена успешно!"
else:
print "Permission denied"
def write(sb,arg):
arg = objects.index(arg)
check = [2,3,6,7]
if matrix[sb][arg] in check:
print "Операция выполнена успешно!"
else:
print "Permission denied"
# Массив пользователей системы
subjects = ['Admin', 'Gabriel', 'Raphael', 'Uriel','Salaphiel']
# Массив объектов системы
objects = ['top_secret.doc', 'annual_report.doc', 'config.txt']
actions = {'read':4, 'write':2, 'grant':1}
# матрица доступа
matrix = [[7,7,7], [6,7,4], [4,7,5], [5,0,0], [0,4,0]]
for i in range(1,5):
for j in range(1,3):
matrix[i][j] = random.randint(0,7)
#print matrix
auth = False
while not auth:
username = raw_input('Введите идентификатор пользователя: ')
if username in subjects:
print "Вход выполнен! %s, добро пожаловать в систему!" % username
auth = True
else:
print "Пользователь не найден! Попробуйте еще раз."
auth = False
# Вывод матрицы доступа:
"""
print ' ', objects[0], ' ', objects[1] , ' ', objects[2]
for i in subjects:
print '\n', i, ' ', matrix[subjects.index(i)][0], ' ', matrix[subjects.index(i)][1], ' ', matrix[subjects.index(i)] [2]
"""
#sb --идентификатор текущего пользователя
sb = subjects.index(username)
if auth:
sprint(sb)
k = False
for i in matrix[sb]:
if i % 2 != 0:
k = True
print "\nВведите комманду: (read/write/grant or exit для выхода и имя файла, разделитель - пробел)"
exk = False
while not exk:
command = raw_input ('%s:~$ ' % username)
command = command.split()
argk = False
try:
arg = command[1]
argk = True
except:
print "Укажите аргумент для команды %s" % command[0]
command = command[0]
if argk:
#"""
ak = actions.keys()
if command in ak:
if arg in objects:
if command=='grant':
grant(k,sb,arg)
elif command == 'read':
read(sb,arg)
elif command == 'write':
write(sb,arg)
else:
print "Аргумент не верен"
elif command =='exit' and arg=='now':
print "Выход из системы"
exk = True
else:
print "Команда не найдена! Попробуйте еще раз! "
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment