|
Безопасный запуск p2p клиентских программ в Linux
Я, конечно не открою Америку сказав, что доля p2p софта, который пишется, скачивается и запускается на ваших десктопах, неуклонно растет. В этой рассказке речь пойдет о некоторых приемах по настройке p2p клиентов, которые могут улучшить такой параметр вашего компьютера как security. Я рассмотрю две программы, eDonkey и BitTorrent, которые будут установлены одновременно на ваш компьютер.
Замечания общего характера Linux Kernel. Ну тут нет нужды говорить, что последнее из 2.4 или 2.6 - must have. Но этого недостаточно! Идем на Openwall, скачиваем patch для того что у нас установлено, выставляем все галочки в security при перекомпиляции ядра, смотрим: # cd /usr/src/linux # cat .config | grep CONFIG_HARDEN_ CONFIG_HARDEN_STACK=y CONFIG_HARDEN_LINK=y CONFIG_HARDEN_FIFO=y CONFIG_HARDEN_PROC=y CONFIG_HARDEN_RLIMIT_NPROC=y CONFIG_HARDEN_SHM=yОтлично, компилим, перезагружаемся.
Далее нужно сделать безопасную песочницу aka chroot, в которую
поместим потом наших p2p клиентов. Если и произойдет нечто
непредвиденное, то весь ущерб будет локализован лишь в отведенном
месте. # gcc -o chroot-shell chroot-shell.c -DCHROOT_DIR="\"/opt/chroot\"" # cp chroot-shell /usr/local/bin # strip /usr/local/bin/chroot-shell # chmod 4111 /usr/local/bin/chroot-shellТеперь заводим 'ослиного' пользователя: # mkdir -p /opt/chroot/home # groupadd osel # adduser -g osel -d /opt/chroot/home/osel -s /usr/local/bin/chroot-shell osel # passwd osel ********Копируем либы и прочую лабуду в нашу песочницу:
# mkdir -p /opt/chroot/{bin,lib,usr,dev,etc,tmp,opt}
# chmod 1777 /opt/chroot/tmp
# cp /lib/* /opt/chroot/lib
# cp /usr/lib/* /opt/chroot/lib
# chmod 555 /opt/chroot/lib/*
# cp /etc/{protocols,localtime,resolv.conf,services} /opt/chroot/etc
# cp /bin/* /opt/chroot/bin
# chmod 555 /opt/chroot/bin/*
Далее запускаем screen и в нем говорим:
# su - osel # Password: ********Песочница готова!
eDonkey # touch /opt/chroot/tmp/donkey.stopа после этого уже жать 'q' в ослином терминале. Из конфигурации нужно обязательно выбрать нестандартный порт, скажем 47890 и указать username/password для GUI login.
BitTorrent Для более удобного запуска пишем вот такой скрипт. Таким способом получаем автоматически новый свободный порт всякий раз при запуске нового торрента. Поскольку из песочницы не узнать ничего о происходящем снаружи, нужно добавить следующие строки в /etc/xinetd.conf:
service freeport
{
type = UNLISTED
socket_type = stream
wait = no
bind = 127.0.0.1
protocol = tcp
port = 1800
user = root
server = /usr/local/sbin/freeport.plx
instances = 3
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 17
}
Теперь список занятых портов будет запрашиваться скриптом через порт.
Доводку и шлифовку я оставляю вам в качестве домашнего задания ;-) |
| Copyright (c) 1999-2008 Alexey Semenoff |