Online video hd

Free video online

Официальный сайт welinux 24/7/365

Смотреть видео бесплатно

Похожие на immortaldayПарольная политика в Linux
m039 03.02.2010 15:20

CodingКопаимся в системе веселья ради - Системеный вызов Welinux


Часть первая. Появление собственного системного вызова.

Сначала, что же такое системный вызов ядра? Хм.. ну скажем так, есть функции С библиотек, они достаточно абстрактны, например функция puts или printf являются оболочкой и используют системные вызов ядра(write), с соответствующими параметрами. А что делает системный вызов.. хм.. их много, и все они достаточно разношерстные, для ознакомления мне нравится вот эта pdf-ка .

Заметка: можете использовать такие команды как ltrace и strace для анализа и удостоверения, что у системного вызова есть номер.

Сам по себе системный вызов это функция, но немного по особому определенная. А так как задача заключается в изменении её, приведу листинг написанный на коленке, который поможет вспомнить синтаксис сишника:
refresh_memory.c:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

static int my_precious = 0;

long welinuxing(int a){
   return my_precious += a;
}

long welinuxing_new(int a){
  return my_precious -= a;
}

long (* welinuxing_current) (int);

int main(){
  welinuxing_current = welinuxing;
  printf("Yeah.. now it is %d\n", welinuxing_current(10));
  welinuxing_current = welinuxing_new;
  printf("Yeah.. now it is %d\n", welinuxing_current(1));
  return 0;
}


Хм.. это.. а всё таки как написать системный вызов? И встроить его в ядро? Гугл ответил вот такой вот пдф-кой . , но в ней также есть информация как скомпилировать ядро под .. ubunty.

Заметка: Хочу посоветовать, что лучше все-таки это безобразие вытворять на виртуальной машине. Там все скомпилируйте. А если используете virtualbox, то советую настроить общие папки(share folders). Но с этими папками не всё гладко, компилировать ядро не получиться в этой папке, потому что оно не понимает что такое символические ссылки. Поэтому можно настроить либо nfs, если хотите что бы файлы компиляции находились на хостовой машине.

Итак, что бы добавить в само ядро новый системный вызов нужно: добавить в таблицу системных вызовов(о ней далее) указатель на новый системный вызов(банально - функцию) и определить где-то этот системный вызов(функцию). А потом все это слинковать. Исправлять файлы в includes не нужно. Хотя если делаем системный вызов Welinux, то не плохобы напомнить всем, что мы зарезервировали себе номер..

Таблица системных вызов, это массив в котором содержится указатели на функции. Открываем lxr и находим эту таблицу по названию sys_call_table

Ой, чуть не забыл, тут уже пошел ассемблер, а не сишник. Немного поясню, ".long <>" это равносильна сишному "long <>". Но сам не до конца всего знаю, поэтому далее интересуюсь, что значит макрос ENTRY , а вот оно:
1
2
3
4
5
6
7
#ifndef ENTRY
#define ENTRY(name) \
  .globl name; \  //  символ станет доступен для линковки вне файла.
  ALIGN; \          // если посмотрите выше , то уведите определение. Это выравнивание по 4 байта (для x86), где свободные места будут заполнены ассемблерной вставкой 0x90(nop - no operation)
  name:
#endif
#endif /* LINKER_SCRIPT */


Для тех, кто делает все в голове получим вот такую штуку в конце манипуляций. Т.е. в конце всех манипуляций будет приведено к виду:
1
2
3
4
5
6
7
 
.globl sys_call_table
.align 4,0x90
sys_call_table:
        .long sys_restart_syscall       /* 0 - old "setup()" system call, used for restarting */
        .long sys_exit
...


Долго искал, что значит 0x90, вроде бы в глаза бросается, что это nop, но до конца не был уверен. Ответ нашел на сайте .

Итак, теперь немного воочию убедились, что есть такая таблица. Осталось добавить свой системный вызов и прилинковать его. Можете для начала поискать в lxr определение системных вызовов, вот например этот sys_getpid вызов не такой уж сложный. Но попробуйте его найти, не заглядывай в спойлер. Я чтот много времени потратил искамши :(
тут


Пишем системы вызов welinux. (Большей частью руководствуясь pdf-кой):
Для это создаем папку в корне исходников линукса.
Помещаем в неё исходники wl.c и Makefile.
wl.c:
1
2
3
4
5
#include &lt;linux/linkage.h&gt;
static int my_precious = 0; // Копилка рейтинга.. 
asmlinkage long sys_welinuxing(int a){
   return my_precious += a; // Возможно надо было сделать "+1", а не "а"
}

Makefile:
1
obj-y := wl.o


Потом изменяем главный Makefile:
Строчку:
1
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ /block

На:
1
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ /block  welinux/


Ох-хо-хох, забыл добавить в таблицу системный вызов. Добавляем в конец файла "arch/x86/kernel/syscall_table_32.S" строчку ".long sys_welinuxing". И главное запоминаем номер под котором он идет! У меня виртуалка 6.26, номер будет 327.
Заметка: есть соглашение по поводу названий, т.е. sys_* предшествует названию системного вызова, но практически можно оставить любое название, которое придет на ум.

Усё, компилируем и запускаем ядро. Первый этап пройден. :)

Часть вторая. Захватываем мир.

Теперь можем поиграться с новым системным вызовом.
Для начало узнаем как прошли дела с компиляцией:
1
grep welinux /boot/System.map

Или:
1
grep welinux /proc/kallsyms


Выдало "c0211db8 T sys_welinuxing", что означает, что адрес нашей функции в ядре 0хc0211db8.

Тестируем вот такой вот исходничек:
1
2
3
4
5
6
7
8
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#define __NR_mycall 327

int main() {
   printf("Мой рейтинг равен %d\n", syscall(__NR_mycall, 1));
   return 0;
}


Ну вы уже должны знать, что должно произойти. Уфф.. на данный момент системный вызов должен работать.

Часть третья. Люто бешено минусуем

Теперь переходим к 3му этапу написанию модуля ядра.
Создаем где угодно папку и помещаем туда 2 файла:
1
2
3
4
5
6
7
8
Makefile
obj-m += w.o

all:
   make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
   make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Первый вариант w.c:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include &lt;linux/module.h&gt;
#include &lt;linux/init.h&gt;
#include &lt;linux/kernel.h&gt;


static int example_init(){
   printk(KERN_ALERT"W: init\n");
   return 0;
}

static void example_exit(){
  printk(KERN_ALERT"W: exit\n");
}

module_init(example_init);

module_exit(example_exit);


После чего убедитесь в том, что система в состоянии скомпилоровать модули. Это я жестко опущу

А теперь вы уже может быть догадались, что у нашей таблицы(sys_call_table) есть свой адрес. Делается той же коммандой:
1
grep call_table /proc/kallsyms

Вывод:
"c042a86c R sys_call_table"

Теперь изменяем наш модуль на вот такой вот:
w.c:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include &lt;linux/module.h&gt;
#include &lt;linux/init.h&gt;
#include &lt;linux/kernel.h&gt;
#include &lt;linux/linkage.h&gt;

long * welinuxing  = 0xc042a86c + 4 * 327;

static int example_init(){
   printk(KERN_ALERT"W: init %lx\n", *welinuxing);
  return 0;
}

static void example_exit(){
  printk(KERN_ALERT"W: exit\n");
}

module_init(example_init);

module_exit(example_exit);


Ну как, тот же адрес вывела на экран, как если бы использовали функцию "grep welinux /proc/kallsyms"?

А теперь попробуем из самого ядра вызвать эту функцию с помощью, этого файла:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include &lt;linux/module.h&gt;
#include &lt;linux/init.h&gt;
#include &lt;linux/kernel.h&gt;
#include &lt;linux/linkage.h&gt;

asmlinkage long (* welinuxing)(int);

static int example_init(){
   welinuxing =  *((long *) (0xc042a86c + 4 * 327));
  printk(KERN_ALERT"W: init %ld\n", welinuxing(10));
  return 0;
}

static void example_exit(){
  printk(KERN_ALERT"W: exit\n");
}

module_init(example_init);

module_exit(example_exit);


А теперь подменим её:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include &lt;linux/module.h&gt;
#include &lt;linux/init.h&gt;
#include &lt;linux/kernel.h&gt;
#include &lt;linux/linkage.h&gt;

#define pWelinux (long *) (0xc042a86c + 4 * 327)

asmlinkage long (* welinuxing_old)(int);

asmlinkage welinuxing(int a){
  return welinuxing_old(-a); // Кто хочет тщеславия, можете заменить на "a * 9000" 
};

static int example_init(){
  welinuxing_old =  *(pWelinux);
  *(pWelinux) = welinuxing;
  printk(KERN_ALERT"W: init\n");
  return 0;
}

static void example_exit(){
  *(pWelinux) = welinuxing_old;
  printk(KERN_ALERT"W: exit\n");
}

module_init(example_init);

module_exit(example_exit);


Теперь вставляя один модуль, мы управляли системным вызовом которым мы сделали.
Уфф.. закончил. На самом деле писать это кажется гораздо дольше чем делать, но думаю что кому-нибудь веселье доставить такой подход.

Из оставшихся вопросов:
Как отследить, то что произошло изменение ядра и старый системный вызов стал уже не тот.
Говорят, что есть динамическое создание системных вызовов.
Научить системный вызов генерировать прерывания, следовательно создать свой обработчик.
Полностью.
+ 8 -
7
m01 26.07.2011 19:58

Есть вопрос!Linux и защита от DDOS атак.

Здравствуйте Товарищи!

подскажите пожалуйста рецепт эфективной защиты "домашнего" web сервера от ddos атак.

Спасибо!
+ 1 -
7
linuxmaster 10.10.2011 14:44

OmskLUGUbuntu Install Fest 11.10 в Омске

В 15.00 2011-10-29 в Омске будет проводиться очередной Ubuntu Install Fest: раздача дистрибутивов Ubuntu Linux и других подобных дистрибутивов, консультирование по установке и использованию Ubuntu для начинающих пользователей. На мероприятии прозвучат доклады о новом в Ubuntu Linux 11.10, о LightDM, об играх в Linux. Мероприятие пройдет в 301 аудитории первого корпуса Омского государственного университета им. Ф.М. Достоевского (г. Омск, пр. Мира, д. 55А).

Анонсы в социальных сетях:

http://www.facebook.com/event.php?eid=249193511798578

http://vkontakte.ru/event30963095

Иногородние, далекие от третьей столицы России, могут посмотреть мероприятие здесь:
http://ustream.tv/channel/omsklug
+ 2 -
6
posixru 14.10.2012 15:20

Slackware и её производныеРелиз Zenwalk 7.2

12 октября 2012 года состоялся релиз Zenwalk 7.2, компактной модификации Slackware Linux с оконной средой XFCE.
Полностью.
+ 1 -
0
dront78 27.07.2013 19:17

Я Фанатег!Linux внезапно спас ;) А у вас так было?

Нет 4
Да 38
+ 1 -
21
linuxmaster 15.09.2014 23:46

OmskLUGSoftware Freedom Day 2014 в Омске

2014-10-04T14:00+0700 OMST (четвёртого октября 2014 года в 2 часа дня после обеда по омскому времени) в 301 аудитории первого корпуса Омского государственного университета им. Ф.М. Достоевского (г. Омск, пр. Мира, д. 55А) будет международный День свободы программного обеспечения (Software Freedom Day 2014).

Доклады:

  • Итоги свободного программного обеспечения в 2014 (Алексей Тараканов)

  • История успеха: Puppet (Александр Рак)

  • BASH tips & tricks (Александр Матюхин)

  • Астериск: фреймворк для построения телефонии (Станислав Емец)



http://bit.ly/sfd2014omsk - регистрация

http://omsklug.com/2014/09/sfd2014announce/ - ссылка на анонс на сайте омских линуксоидов
+ 0 -
0
thebeetlebum 06.02.2012 19:45

Переводы — 20 наилучших способов обеспечения безопасности OpenSSH

Не на каждом сервере есть ftp, samba или какая-либо другая программа, предоставляющая удаленные возможности, однако, на большинстве UNIX хостов мы встретим OpenSSH. OpenSSH предоставляет нам широкие возможности, однако, любые излишние возможности могут дать несколько дверей взломщику. Я же хочу показать как прикрыть некоторые из них, чтобы ваши UNIX хосты были защищены по протоколу SSH. Эта переведенная статья 2009го года, однако даже сегодня она актуальна в полной мере.

Полностью.
+ 11 -
14
Kraplax 26.01.2009 18:01

Есть вопрос!Обмен файлами между домашними машинками

До сих пор мой Еее подстраивался под возможности винды и я как-то кривовато, но имею доступ до обычных расшар через Samba. Но вот подумалось - а целесообразно ли это? Может есть како-нибудь более разумное решение? Ну, хотелось бы нечто более совместимое с обеими платформами, но при этом "родом из *nix".

Сначала решил было попробовать NFS ибо слышал о ней много. Простите, но другого критерия у меня нет. Замучался искать свободную реализацию для винды. Взял бесплатную. Но что-то не успев настроить решил поглядеть еще опции.

Требования - абсолютная прозрачность для пользователя. То есть так же как дрова IFS для Ext3. У пользоватля просто появляется сетевой диск, например, или папка расшаренная. И заходя в нее он получает содержимое другой машины. Причем, желательна настройка из меню свойств папки. В крайнем случае - из центральной утилиты, но никак не конфиг файлов.

У кого какие идеи? Аргументируйте, пожалуйста, ваши предложения.

Погугли насчет 'ХХХ для Windows' - это самый неудачный аргумент! Желательны конкретные программные продукты.
+ -1 -
9
27.03.2009 20:30

h0rr0rr_drag0nQemu, ARM и Linux. Начало.

Недавно я получил задание для практики в универе. Звучало оно так:



Допустим у нас есть сервер на базе embedded linux, работающий на контроллере с процессором ARM, несколько удаленных устройств, работающих в Интернет и автоматизированное работчее место (АРМ) на базе ПК, управляющее всем этим хозяйством. У сервера два сетевых интерфейса. Один подключен к Интернет, другой к локальной сети.

Задачи классические:

- взаимодействие с удаленными устройствами по шифрованному каналу;

- обработка полученных данных;

- прием команд от АРМ, обработка и отправка команд удалённым устройствам;

- Обеспечение Web доступа (https) для управления из локальной сети;

- Функции межсетевого экрана (NAT, фильтрация портов в обе стороны);

- Ведение логов событий.

Если мало, могу еще подкинуть.





Здесь, у себя в блоге, я буду постить о различных интересных вещах, узнанных в процессе выполнения этой работы. Начну же я с эмуляции ARM в Qemu, и с того, как на все это дело ставится Линукс. Статей про это сакральное действо не так уж и много, особенно на русском =((.

Полностью.
+ 7 -
9
Dreams 07.05.2009 23:25

Есть вопрос!Удаление файлов по определённым типам при монтировании USB-Flash



Есть задача, попробовать сделать так, чтоб при монтировании USB-Flash автоматически удалялись или копировались в отдельный каталог для исследования файлы по определённому типу.

Например: *.exe,*.inf,*.vbs,*.js и прочие :)

Хотелось бы знать занимался ли кто нибудь таким вопросом и как его реализовать :)



P.S. можно например ещё сделать ограничение по размеру файла :)
+ 3 -
16
1 2 3 4 5 6 7 8 42 43

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн