ÔõÑùÉèÖÃÇ¿ÖÆ»á¼û¿ØÖÆÒÔÏÞÖÆÓû§¶ÔÎļþºÍĿ¼µÄȨÏÞ
ÔõÑùÉèÖÃÇ¿ÖÆ»á¼û¿ØÖÆÒÔÏÞÖÆÓû§¶ÔÎļþºÍĿ¼µÄȨÏÞ
ÔÚ²Ù×÷ϵͳÖУ¬Ç¿ÖÆ»á¼û¿ØÖÆ£¨Mandatory Access Control£¬MAC£©ÊÇÒ»ÖÖÇå¾²»úÖÆ£¬ÓÃÓÚÏÞÖÆÓû§¶ÔÎļþºÍĿ¼µÄ»á¼ûȨÏÞ¡£Ïà±ÈͨË׵Ļá¼û¿ØÖÆ»úÖÆ£¬Èç×ÔÖ÷»á¼û¿ØÖÆ£¨Discretionary Access Control£¬DAC£©£¬Ç¿ÖÆ»á¼û¿ØÖÆÌṩÁ˸üÑÏ¿áµÄ»á¼û¿ØÖÆÕ½ÂÔ£¬È·±£Ö»Óо߱¸ÏìӦȨÏÞµÄÓû§¿ÉÒÔ»á¼ûÎļþºÍĿ¼¡£
ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«ÏÈÈÝÔõÑùʹÓÃÒ»ÖÖ³£¼ûµÄÇ¿ÖÆ»á¼û¿ØÖÆÒªÁ졪¡ª»ùÓÚ±êÇ©µÄ»á¼û¿ØÖÆ£¨Label-based Access Control£¬LBAC£©À´ÊµÏÖ¶ÔÎļþºÍĿ¼µÄ»á¼û¿ØÖÆ¡£ÏÂÃæÊÇÒ»¸öʾÀý´úÂ룬ÑÝʾÁËÔõÑùͨ¹ýÉèÖñêÇ©À´ÏÞÖÆÓû§¶ÔÎļþµÄ»á¼ûȨÏÞ¡£
Ê×ÏÈ£¬ÎÒÃÇÐèÒª½¨ÉèÒ»¸ö±êǩϵͳ£¬ÓÃÀ´¸øÎļþºÍÓû§·ÖÅÉÏìÓ¦µÄ±êÇ©¡£±êǩͨ³£°üÀ¨Á½¸ö²¿·Ö£º¹¤¾ß±êÇ©ºÍÖ÷Ìå±êÇ©£¬»®·ÖÌåÏÖÎļþºÍÓû§µÄÇå¾²¼¶±ð¡£ÔÚ±¾Ê¾ÀýÖУ¬ÎÒÃÇʹÓÔLOW”¡¢”MEDIUM”ºÍ”HIGH”Èý¸ö²î±ðµÄÇå¾²¼¶±ð¡£
class LabelSystem: def __init__(self): self.labels = {} def assign_label(self, obj, label): self.labels[obj] = label def get_label(self, obj): return self.labels.get(obj) def check_permission(self, user_label, obj_label): if user_label <= obj_label: return True else: return False
µÇ¼ºó¸´ÖÆ
½ÓÏÂÀ´£¬ÎÒÃǽ¨ÉèÒ»¸öÏêϸµÄÎļþϵͳ£¬ÊµÏÖÁ˶ÔÎļþºÍĿ¼µÄÇ¿ÖÆ»á¼û¿ØÖÆ¡£ÔÚÕâ¸öÎļþϵͳÖУ¬Ã¿¸öÎļþºÍĿ¼¶¼ÓÐÒ»¸öΨһµÄ±êʶ·ûºÍÏìÓ¦µÄ±êÇ©¡£
class FileSystem: def __init__(self): self.files = {} def create_file(self, name): file = File(name) self.files[file] = Label("LOW") def create_directory(self, name): directory = Directory(name) self.files[directory] = Label("LOW") def get_file(self, name): for file in self.files: if file.name == name: return file return None def set_label(self, obj, label): if obj in self.files: self.files[obj] = Label(label) def get_label(self, obj): return self.files.get(obj) def check_permission(self, user, obj): user_label = self.get_label(user) obj_label = self.get_label(obj) if user_label and obj_label: return LabelSystem().check_permission(user_label, obj_label) else: return False class File: def __init__(self, name): self.name = name class Directory: def __init__(self, name): self.name = name class Label: def __init__(self, level): self.level = level
µÇ¼ºó¸´ÖÆ
×îºó£¬ÎÒÃÇ¿ÉÒÔʹÓÃÉÏÊö´úÂ뽨ÉèÒ»¸öÎļþϵͳ£¬²¢ÉèÖÃÏìÓ¦µÄÎļþºÍĿ¼µÄ±êÇ©¡£È»ºó£¬¿ÉÒÔƾ֤Óû§µÄ±êÇ©ºÍÎļþµÄ±êÇ©À´ÅжÏÓû§ÊÇ·ñÓÐȨÏÞ»á¼û¸ÃÎļþ¡£
if __name__ == "__main__": file_system = FileSystem() # ½¨ÉèÎļþºÍĿ¼ file_system.create_file("file1.txt") file_system.create_directory("dir1") # ÉèÖÃÎļþºÍĿ¼µÄ±êÇ© file_system.set_label(file_system.get_file("file1.txt"), "MEDIUM") file_system.set_label(file_system.get_file("dir1"), "HIGH") # ÅжÏÓû§È¨ÏÞ user_label = Label("LOW") print(file_system.check_permission(user_label, file_system.get_file("file1.txt"))) # True print(file_system.check_permission(user_label, file_system.get_file("dir1"))) # False
µÇ¼ºó¸´ÖÆ
ͨ¹ýÉÏÊöµÄʾÀý´úÂ룬ÎÒÃÇ¿ÉÒÔ¿´µ½ÔõÑùʹÓûùÓÚ±êÇ©µÄÇ¿ÖÆ»á¼û¿ØÖÆÀ´ÏÞÖÆÓû§¶ÔÎļþºÍĿ¼µÄ»á¼ûȨÏÞ¡£Í¨¹ýÉ趨²î±ðµÄÇå¾²¼¶±ð±êÇ©£¬¿ÉÒÔʵÏÖÔ½·¢Ï¸Á£¶ÈµÄ»á¼û¿ØÖÆ£¬´Ó¶ø±£»¤Ãô¸ÐÊý¾ÝµÄÇå¾²ÐÔ¡£Ç¿ÖÆ»á¼û¿ØÖÆ×÷ΪһÖָ߼¶µÄÇå¾²»úÖÆ£¬ÔÚÏÖʵӦÓÃÖпÉÒÔ×ÊÖúÎÒÃǹ¹½¨Ô½·¢Çå¾²µÄϵͳ¡£
ÒÔÉϾÍÊÇÔõÑùÉèÖÃÇ¿ÖÆ»á¼û¿ØÖÆÒÔÏÞÖÆÓû§¶ÔÎļþºÍĿ¼µÄȨÏÞµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡