Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Asm для Linux/Unix > уровни привилегий в *NIX |
Автор: ksili 1.10.2007, 04:29 |
Ни UNIX, ни Linux не пользовал никогда, поэтому не пинайте сильно... Общеизвестно, что процессоры семейства x86 поддерживают 4 уровня привилегий для организации механизма защиты. Эти уровни используются и в селекторах сегментов, и в дескрипторах сегментов, и для защиты ввода/вывода. Известно также, что Windows из 4-х уровней использует только 2 крайних - 0 и 3. И мне стало интересно, как здесь дела обстоят с UNIX и Linux. Используют ли они этот механизм по полной, или там вообще все в этом смысле равны? Или ещё как-то? |
Автор: bilbobagginz 1.10.2007, 06:32 |
а вы знаете что значат эти "4 уровня привилегий" ? |
Автор: ksili 1.10.2007, 07:02 |
знаю. а вы ответ на мой вопрос знаете? |
Автор: bilbobagginz 1.10.2007, 07:46 |
не знаю о "UNIX", т.к. есть несколько ОС на подходящих под этот "формат". Линукс работает в только в 2-х режимах: ядра и пользователя. т.е. когда происходит системный вызов, программа из режима "пользователя" ( ring3 ) передает данные каким-то там системным библиотекам в форме загружаемого модуля, и эти библиотеки бегут в режиме "ядра", т.е. ring0. я полагаю, что один из оставшихся режимов используется при работе SMI прерываний, но этого линукс не "чувствует". и еще в последнее время Xen бежит в режиме ring0, и соответственно ядро в ring1, a приложения в ring3. короче ответ: линукс в стандартной ( пока ) конфигурации использует только 2 режима, как и винда. |
Автор: ksili 1.10.2007, 07:50 |
Спасибо |
Автор: bilbobagginz 1.10.2007, 10:29 | ||||
ну не совсем я понятный, когда пишу что-то в 7:46 ( до того как лег спать ) ![]()
hm... это только терминология. но суть - код, бегущий в защищенном режиме бежит не в контексте пользователя, а в контексте ядра. какая инструкция ассембли это реализует и как я не упоминаю.
это значит следующее: в любом более защищенном режиме, жем незащищенный ring3 процессор может выполнять больше инструкций и реагировать на больше прерываний, и "быстрее". значит, теоритически ядро, находясь в таком режиме должно быть с т.з. безопасности в "kernel space", и запускать в это время код ядра. Фактически же (правда это еще не смогли использовать не поназначению, ПОКА) в режим SMM процессор приходит каждое прерывание SMI. и теоритически существует возможность выполнения в это время пользовательского кода. тут есть статья: http://www.securityfocus.com/columnists/402 |
Автор: ksili 1.10.2007, 11:24 | ||
Я посмотрел статью и у меня возникли вопросы ![]() 1) SMM-режим и нереальный режим - это одно и то же? 2)
Как его можно выполнять в этом режиме? В статье сказано вроде, что этот режим прозрачен для операционной системы и тем более для пользоательских программ. Они просто не замечают как проц переходит из защищённого в SMM и обратно. 3) В статье сказано, что проц может работать в четырёх режимах, там упоминаются SMM и защищёный. Ещё один - реальный. А чётвёртый? Virtual Mode 8086? Или ещё какой-то? |
Автор: bilbobagginz 1.10.2007, 11:45 |
1. имхо - да. 2. если бы я знал ответ, то этот дядя уже наверное изучил это дело. 3. их проще нумеровать. насколько я понял "имена" - это семантика оперативной системы. и полная разница немного может отличаться от реализации к реализации... надо RTFM делать. |
Автор: ksili 1.10.2007, 12:21 |
не понял. так что ли каждый режим соответствует кольцу? По-моему режим это нечто более широкое, чем просто уровень привилегий... там же адресное пространство, наборы команд, и т.д. |
Автор: bilbobagginz 1.10.2007, 12:28 | ||
"концепция" - простая: чем выше индекс "кольца", тем меньше привилегий, больше ограничений (включая "запрещенные" иструкции, запрещенные адреса, и адресации, короче ресурсы ) но точный круг что можно а что нет - не всегда одинаковый на всех архитектурах, надо мануалы копать. |
Автор: MAKCim 1.10.2007, 12:28 | ||||||
bilbobagginz, отдохнуть бы тебе (не обижайся, просто посты у тебя какие-то сумбурные и трудночитаемые) ![]() по теме
большее число инструкций - да однако, реагирование процессором на прерывания не зависит от режима его работы теперь по поводу SMM SMRAM не доступен пользователю в виду следующих ограничений: 1. Защита на уровне чипсета 2. (в случае отсутствия п. 1) Эта область все-равно защищена, поскольку по-умолчанию в качестве SMBASE используется адрес < 1MB, а ядро не выделяет страницы памяти из диапозона 0-0xFFFFF (точнее выделять то и нечего, поскольку они все используются) нет, не одно и то же
да, Virtual 8086
если стоит аппаратная защита на SMRAM, тогда никто кроме BIOS не может эту область использовать (а тем более изменять) если защиты нет, теоретическая возможность существует, но это уже серьезная дыра в ОС |
Автор: bilbobagginz 1.10.2007, 12:32 | ||
100% прав. скоро уже, лет через 70-80 пойду на отдых. надеюсь заслуженный ![]() |
Автор: MAKCim 1.10.2007, 12:34 | ||
естественно в защищенном режиме, например, предусмотрена 4-х уровневая модель защиты, в виртуальном - лишь 2-х уровневая (CPL = 3, CPL = 0) в реальном режиме (как и в SMM) вообще нет понятия уровня привилегий |
Автор: ryzubexx 6.3.2009, 20:01 |
А я вобще их не использую. Слишком они сложные. |