Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Спасибо

Автор: MAKCim 1.10.2007, 09:00
Цитата(bilbobagginz @  1.10.2007,  07:46 Найти цитируемый пост)
т.е. когда происходит системный вызов, программа из режима "пользователя" ( ring3 ) передает данные каким-то там системным библиотекам в форме загружаемого модуля, и эти библиотеки бегут в режиме "ядра", т.е. ring0.

выделенную фразу не понял
данные передаются через регистры, для перехода используются 
int 0x80 / sysenter (X86)
syscall (X64)
также, о каких библиотеках идет речь?
есть функции, выполняющиеся в режиме ядра, но не более того
Цитата(bilbobagginz @  1.10.2007,  07:46 Найти цитируемый пост)
я полагаю, что один из оставшихся режимов используется при работе SMI прерываний, но этого линукс не "чувствует".

опять не понял
вообще говоря SMI# переводит CPU в нереальный режим (unreal mode), где нет понятия об уровнях привилегий

Автор: bilbobagginz 1.10.2007, 10:29
ну не совсем я понятный, когда пишу что-то в 7:46 ( до того как лег спать ) smile
Цитата

выделенную фразу не понял

hm... это только терминология.  но суть - код, бегущий в защищенном режиме бежит не в контексте пользователя, а в контексте ядра.
какая инструкция ассембли это реализует и как я не упоминаю.
Цитата

опять не понял

это значит следующее:  в любом более защищенном режиме, жем незащищенный ring3 процессор может выполнять больше инструкций и реагировать на больше прерываний, и "быстрее". значит, теоритически ядро, находясь в таком режиме должно быть с т.з. безопасности в "kernel space", и запускать в это время код ядра.
Фактически же (правда это еще не смогли использовать не поназначению, ПОКА) в режим SMM процессор приходит каждое прерывание SMI.
и теоритически существует возможность выполнения в это время пользовательского кода.  тут есть статья: http://www.securityfocus.com/columnists/402




Автор: ksili 1.10.2007, 11:24
Я посмотрел статью и у меня возникли вопросы  smile .
1) SMM-режим и нереальный режим  - это одно и то же?
2) 
Цитата(bilbobagginz @  1.10.2007,  15:29 Найти цитируемый пост)
теоритически существует возможность выполнения в это время пользовательского кода

Как его можно выполнять в этом режиме? В статье сказано вроде, что этот режим прозрачен для операционной системы и тем более для пользоательских программ. Они просто не замечают как проц переходит из защищённого в 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,  16:45 Найти цитируемый пост)
их проще нумеровать

не понял. так что ли каждый режим соответствует кольцу? По-моему режим это нечто более широкое, чем просто уровень привилегий... там же адресное пространство, наборы команд, и т.д.

Автор: bilbobagginz 1.10.2007, 12:28
Цитата

не понял. так что ли каждый режим соответствует кольцу? По-моему режим это нечто более широкое, чем просто уровень привилегий... там же адресное пространство, наборы команд, и т.д.

"концепция" - простая: чем выше индекс "кольца", тем меньше привилегий, больше ограничений (включая "запрещенные" иструкции, запрещенные адреса, и адресации, короче ресурсы )
но точный круг что можно а что нет - не всегда одинаковый на всех архитектурах, надо мануалы копать.


Автор: MAKCim 1.10.2007, 12:28
bilbobagginz
отдохнуть бы тебе (не обижайся, просто посты у тебя какие-то сумбурные и трудночитаемые)  smile 
по теме
Цитата(bilbobagginz @  1.10.2007,  10:29 Найти цитируемый пост)
это значит следующее:  в любом более защищенном режиме, жем незащищенный ring3 процессор может выполнять больше инструкций и реагировать на больше прерываний

большее число инструкций - да
однако, реагирование процессором на прерывания не зависит от режима его работы
теперь по поводу SMM
SMRAM не доступен пользователю в виду следующих ограничений:
1. Защита на уровне чипсета
2. (в случае отсутствия п. 1) Эта область все-равно защищена, поскольку по-умолчанию в качестве SMBASE используется 
адрес < 1MB, а ядро не выделяет страницы памяти из диапозона 0-0xFFFFF (точнее выделять то и нечего, поскольку они все используются)
Цитата(ksili @  1.10.2007,  11:24 Найти цитируемый пост)
1) SMM-режим и нереальный режим  - это одно и то же?

нет, не одно и то же
Цитата(ksili @  1.10.2007,  11:24 Найти цитируемый пост)
3) В статье сказано, что проц может работать в четырёх режимах, там упоминаются SMM и защищёный. Ещё один - реальный. А чётвёртый? Virtual Mode 8086? Или ещё какой-то? 

да, Virtual 8086
Цитата(ksili @  1.10.2007,  11:24 Найти цитируемый пост)
Как его можно выполнять в этом режиме? В статье сказано вроде, что этот режим прозрачен для операционной системы и тем более для пользоательских программ. Они просто не замечают как проц переходит из защищённого в SMM и обратно.

если стоит аппаратная защита на SMRAM, тогда никто кроме BIOS не может эту область использовать (а тем более изменять)
если защиты нет, теоретическая возможность существует, но это уже серьезная дыра в ОС

Автор: bilbobagginz 1.10.2007, 12:32
Цитата

отдохнуть бы тебе (не обижайся, просто посты у тебя какие-то сумбурные и трудночитаемые) 

100% прав. скоро уже, лет через 70-80 пойду на отдых. надеюсь заслуженный smile

Автор: MAKCim 1.10.2007, 12:34
Цитата(ksili @  1.10.2007,  12:21 Найти цитируемый пост)
не понял. так что ли каждый режим соответствует кольцу? По-моему режим это нечто более широкое, чем просто уровень привилегий... там же адресное пространство, наборы команд, и т.д. 

естественно
в защищенном режиме, например, предусмотрена 4-х уровневая модель защиты, в виртуальном - лишь 2-х уровневая (CPL = 3, CPL = 0)
в реальном режиме (как и в SMM) вообще нет понятия уровня привилегий

Автор: ryzubexx 6.3.2009, 20:01
А я вобще их не использую. Слишком они сложные.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)