Отправляет email-рассылки с помощью сервиса Sendsay

KirovLUG: пользователи Linux в Вятке

FreeBSD System Calls (кому всё ещё интересно)

Здравствуйте,

К вопросу о системных вызовах во freebsd:
есть во "FreeBSD Developers' Handbook"
соответствующая статья - "16.3 System Calls".

В ней кратко рассказывается о сходствах и различиях в реализации
системных вызовов в Linux и FreeBSD.

16.3.1 Соглашения о вызовах по умолчанию

По умолчанию, ядро FreeBSD использует соглашения о вызовах языка С.
Кроме того, хотя доступ к ядру осуществляется посредством int 80h,
предполагается, что вместо того, чтобы вызывать ядро непосредственно,
программа будет вызывать функцию, которая исполняет int 80h.

Это соглашение очень удобно, и намного удобней соглашений о вызовах
Microsoft MS-DOS. Почему? Потому что соглашение UNIX позволяет получить
доступ к ядру любой программе написанной на любом языке.

То же самое может делать и программа на ассемблере. Например, мы можем
открыть файл:

kernel:
int 80h ; Call kernel
ret

open:
push dword mode
push dword flags
push dword path
mov eax, 5
call kernel
add esp, byte 12
ret

Это очень ясный и портируемый стиль программирования. Если вы хотите
портировать код в систему UNIX, использующую другое прерывание, или
другой способ передачи параметров, всё что требуется - изменить
процедуру kernel.

Но программисты на ассемблере любят оптимизировать количество
выполняемых кодом тактов. Пример выше требует комбинации call/ret. Мы
можем её исключить, поместив в стек дополнительное двойное слово:

open:
push dword mode
push dword flags
push dword path
mov eax, 5
push eax ; Or any other dword
int 80h
add esp, byte 16

Число 5, которое мы поместили в EAX, определяет функцию ядра, в данном
случае - open.

16.3.2 Альтернативные соглашения о вызовах

FreeBSD - чрезвычайно гибкая система. Она предоставляет другие способы
вызова ядра. Хотя, для этого должна быть установлена эмуляция Linux.

Linux - UNIX-подобная система. Не смотря на это, её ядро использует то
же соглашение о системных вызовах, что и MS-DOS. По правилам UNIX, номер
функции помещается в регистр EAX. Параметры передаются не через стек, а
в регистрах EBX, ECX, EDX, ESI, EDI и EBP:

open:
mov eax, 5
mov ebx, path
mov ecx, flags
mov edx, mode
int 80h

Это соглашение намного хуже по сравнению со стилем UNIX, по крайней
мере, если брать в расчёт программирование на ассемблере: каждый раз
когда вы делаете вызов ядра, вы должны поместить регистры в стек, а
позже извлечь их. Это делает ваш код более громоздким и медленным. Тем
не менее, FreeBSD предоставляет вам выбор.

Если вы выбираете соглашения Linux, вы должны дать знать системе об
этом. После того, как ваша программа ассемблирована и собрана, требуется
пометить исполняемый файл:

% brandelf -f Linux filename

16.3.3 Какие соглашения следует использовать Вам?

Если вы программируете исключительно для FreeBSD, вы всегда должны
использовать соглашения UNIX: они быстрее, вы можете хранить глобальные
переменные в регистрах, вам не требуется помечать исполняемый файл, и
вам не навязывается установка на целевой машине пакета эмуляции Linux.

Если вы хотите создавать портируемый код, который cможет работать также
и в Linux, вы возможно всё ещё захотите дать пользователям FreeBSD код,
эффективный, насколько это возможно.

Ответить   Mon, 02 May 2005 14:49:48 +0400 (#360363)

 

Ответы:

Hello all.

Работал ли кто с Radius сервером, желательно freeradius+Cisco :)
Возникли несколько вопросов:
1)Где можно взять дополнительные словари с АВпарами (на сайте cisco их
указано гораздо больше, чем в стандартной поставке сервера, и
кое-какие хотелось бы использовать );
2)Задача - есть модемый пул на маршрутизаторе, необходимо
авторизовывать пользователей и в зависимости от логина/пароля
предоставлять различный сервис, от телнета и ppp, до командной строки
на маршрутизаторе, с дополнительными параметрами, такими как время
соединения, трафик и т.д. Как сделать это с помощью tacacs нашел, но
вот как к радиусу перейти не знаю :( .
Подскажите - куда рыть (и где в плане документаци).

Ответить   Tue, 3 May 2005 20:51:26 +0400 (#360958)

 

alex wrote:

Насколько я понял из http://linux.ru/articles/lanbilling/radius/ radius
это делать не умеет в отличии от tacacs ...

Ответить   asu tec-1 Thu, 05 May 2005 14:03:56 +0400 (#362088)

 

Hello asu,

Thursday, May 5, 2005, 2:03:56 PM, you wrote:

мда :(
но вот что забавно, открываем rfc 2865, ищем Service-Type, возможные
параметры
Login, Framed (A Framed Protocol should be started for the
User, such as PPP or SLIP), Administrative (пользователь получает доступ к
административному интерфейсу NAS с привилегированными исполняемыми
командами... м.б. я не правильно перевел.. оригинал
The user should be granted access to the administrative interface to the NAS
from which
privileged commands can be executed.),
NAS Prompt (тоже но с непривилегированными) .. далее еще несколько,
мне не интересных :) (callback и т.д.)
далее
Session-Timeout - атрибут устанавливает максимальное количество
секунд, которые пройдут до окончания сессии сервиса
Idle--Timeout ... количество секунд до
обрыва idle соединения вообще.
Дальше еще веселее :)
Изучая в конфиги freeradius, точнее sql скрипты, которыми он в базу
пишет, наткнулся на Crypt-Password, позволяет в базе хранить не
открый пароль, а хэш. Ни в одном rfc не нашел, но реально - работает.
Вот и интересует, какие еще есть фишки, которые отличаются от
стандарта.

Ответить   Thu, 5 May 2005 20:05:23 +0400 (#362347)

 

alex wrote:

В общем сам я этим никогда не занимался, но у меня есть знакомый у
которого в конторе все было сделано раньше на radius-е и они перешли
потом на tacacs. Конфиги рабочие у него от radiusa остались, я их у него
попросил, но он куда-то пропал :( Правда он сказал что управления
сервисами у него не было.

Ответить   asu tec-1 Fri, 06 May 2005 12:26:56 +0400 (#362763)