Сможет ли PC-BSD конкурировать с Linux-дистрибутивами? Сергей Супрунов # cvsup /root/ports-supfile ----------------------------------------------------------------------------------------------------------------- Asterisk и Linux: миссия IP-телефония Действие 3 Михаил Платов context="office" # modpobe ztdummy # lsmod |grep ztdummy [rooms] conf=> 400 [confs] exten => 400 , 1, Meetme, 400 [office] include=> confs [confs-dynamic] exten => 500, 1,MeetMe(|MD) [office] include => confs-dynamic server=127.0.0.1 port=5038 username=webmm secret=webmmpw [general] enabled = yes port = 5038 bindaddr = 127.0.0.1 [webmm] secret = webmmpw permit=127.0.0.1 read = system,call,log,verbose,command,agent,user write = system,call,log,verbose,command,agent,user getpost_ifset(array('confno')); getpost_ifset(array('action')); getpost_ifset(array('user_id')); [fop_user] secret = superfopsecret deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.0 read = system,call,log,verbose,command,agent,user write = system,call,log,verbose,command,agent,user manager_host=127.0.0.1 manager_user=fop_user manager_secret=superfopsecret flash_dir=/var/www/html/fop web_hostname=ast-test security_code=fop_pwd poll_voice_mail=1 conference_context=confs barge_rooms=400 barge_muted=1 [SIP/200] ; имя абонента Position=1 ; номер кнопки на консоли Label="Vasya" ; надпись на кнопке Extension=200 ; номер абонента Context=office ; контекст, в котором определен абонент Mailbox=200@office ; ящик голосовой почты пользователя Icon=1 ; номер иконки для данного пользователя (то 1 до 6) [_SIP/.*] Position=n ; использовать следующий незанятый номер Label="SIP Users" Extension=-1 ; на эту кнопку перенаправлять звонки нельзя Context=generic_inc Icon=2 [PARK701] Position=n Icon=3 Extension=700 Label="Park 701" [400] Position=n Label="Meetme 400" Extension=400 Context=confs Icon=6 [Zap/1] Position=10 Label="External 1" Extension=-1 Icon=2 # perl -MCPAN -e "install Net::Telnet" # perl -MCPAN -e "install IPC::Signal" # perl -MCPAN -e "install Proc::WaitStat" # cd /usr/src # wget http://citkit.dl.sourceforge.net/sourceforge/amportal/AMP-1.10.008.tar.gz # tar xfz ./AMP-1.10.008.tar # mysqladmin create asterisk -p # mysql-u root asterisk -p < usr/src/AMP/SQL/newinstall.sql # mysql -u root -p # mysqladmin create asteriskcdrdb –p # mysql -u root asterisk -p < usr/src/AMP/SQL/cdr_mysql_table.sql # wget http://www.asterisk.org/html/downloads/asterisk-addons-1.0.9.tar.gz # tar xfz ./asterisk-addons-1.0.9.tar.gz # cd ./asterisk-addons-1.0.9 CFLAGS+=DMYSQL_LOGUNIQUEID # make && make install # groupadd asterisk # useradd -c "asterisk PBX" -d /var/lib/asterisk -u 5060 -g asterisk asterisk Userasterisk Groupasterisk # /usr/src/AMP/install_amp /usr/sbin/asterisk -U asterisk ----------------------------------------------------------------------------------------------------------------- Создаём систему учета исходящих телефонных звонков Денис Соколов # sudo useradd -d /var/gdklog -s /bin/sh gdk # sudo passwd gdk # sudo mkdir /var/gdklog # sudo chown gdk:gdk /var/gdklog # sudo chown root:gdk /dev/ttyS1 # sudo chmod 640 /dev/ttyS1 # createuser -U postgres -A -D gdk # createdb -U postgres -O gdk pbxbilling # vi gdklog.sql CREATE TABLE gdklog ( "d_time" timestamp, "station" int2, "line" int2, "t_call" time, "c_number" numeric (30, 0) ); REVOKE ALL on "gdklog" from PUBLIC; GRANT ALL on "gdklog" to "gdk"; # psql -U gdk -d pbxbilling < gdklog.sql my $ttys = "/dev/ttyS1"; # Количество строк журнала, кэшируемых в памяти my $m_cache = 50; system ("/bin/stty -F $ttys 9600 cs8 -parenb -cstopb"); # Читаем данные из последовательного порта open (TTYS, "< $ttys") or die "Can’t open $ttys!"; while () { parse_log; } sub parse_log { # Если массив log содержит m_cache строк, то заносим данные в БД if (@log >= $m_cache) { push_to_db; } # Отбираем строки фиксирующие исходящие звонки if (/O\d+/) { # Удаляем символы *, #, O s/[\*,O,\#]+//g; # Сохраняем полученную строку в массив log push (@log, $_); } print; } if (/^(\d{4}\-\d{2}\-\d{2})\s+(\d{2}\-\d{2}\-\d{2})\s+(\d{2})\s+(\d+)\s+(\d{2}\:\d{2}\:\d{2})\s+ { push (@log, "00 $6 $3 $5 $1 $2 $4"); } # $d_time // Дата и время # $station // Внутренний номер # $line // Внешняя линия # $t_call // Продолжительность вызова # $date // Дата # $time // Время # $c_number // Вызванный номер my ($d_time, $station, $line, $t_call, $date, $time, $c_number, @log); # Параметры соединения с базой данных my $base = "pbxbilling"; my $user = "gdk"; my $pass = ""; sub push_to_db { # Подготовка соединения my $dbh=DBI->connect("DBI:Pg:dbname=$base", "$user", "$pass", {PrintError => 0, RaiseError => 0} ) or return 2; # Подготовка запроса my $ins = $dbh->prepare(q{ INSERT INTO gdklog (d_time , station, line, t_call, c_number) VALUES (?, ?, ?, ?, ?) }); # Перебираем в цикле все сохраненные строки foreach my $log (@log) { # Разбираем строку (undef, $station, $line, $t_call, $date, $time, $c_number) = split (/\s+/, $log); if (length ($t_call) < 6) { $t_call="00:$t_call"; } $d_time = "$date $time"; # Выполняем INSERT $ins->execute($d_time, $station, $line, $t_call, $c_number) or return 2; } # Очистим массив undef (@log); $dbh->disconnect(); return 0; } # В режиме демона в этот файл перенаправляем все сообщения об ошибках my $err_file = "/var/gdklog/gdklogd.err"; # PID-файл my $pid_file = "/var/gdklog/gdklogd.pid"; sub begin_daemon { # Делаем fork my $pid = fork; exit if $pid; die "Couldn’t fork: $!" unless defined($pid); # Сохраняем PID в файл open (F_PID, ">$pid_file") or die "Can’t open $pid_file: $!"; print F_PID "$$\n"; close F_PID; # Перенаправляем вывод STDERR в файл open (*STDERR, ">> $err_file") or die "Can’t reopen *STDERR to $err_file: $!"; # Перенаправляем STDIN и STDOUT в /dev/null for my $handle (*STDIN, *STDOUT) { open ($handle, "> /dev/null") or die "Can’t reopen $handle to /dev/null: $!"; } # Установка sid процесса POSIX::setsid() or die "Can’t start a new session: $!"; } $SIG{INT} = $SIG{TERM} = sub { dump_to_file if push_to_db; exit }; $SIG{HUP} = sub { dump_to_file if push_to_db }; # sudo chown root:gdk /usr/local/sbin/gdklogd # sudo chmod 750 /usr/local/sbin/gdklogd # vi /etc/init.d/gdklogd #!/bin/sh DAEMON=/usr/local/sbin/gdklogd DAEMONFLAGS="-D" KILL=/bin/kill PID=/var/gdklog/gdklogd.pid CAT=/bin/cat SU=/bin/su start () { echo -n $"Starting $DAEMON: " # Запуск с правами непривилегированного пользователя $SU -c "$DAEMON $DAEMONFLAGS" gdk 2>/dev/null 1>&2 } stop () { echo -n $"Stopping $DAEMON: " $KILL `$CAT $PID` 2>/dev/null 1>&2 } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac # sudo chown root:root /etc/init.d/gdklogd # sudo chmod 700 /etc/init.d/gdklogd # sudo /etc/init.d/gdklogd start # sudo kill –HUP `cat /var/gdklog/gdklogd.pid` # psql -c 'SELECT * FROM gdklog;' -U gdk pbxbilling ----------------------------------------------------------------------------------------------------------------- Настраиваем DSPAM – ваш личный спам-фильтр Сергей Супрунов P= S / (S + G) (1) S = p(w1)*p(w2)*…*p(wn) (2) G = (1 – p(w1))*(1 – p(w2))*…*(1 – p(wn)) p('Привет') = 35 / (35 + 64) = 0,35 p('Купи') = 187 / (187 + 19) = 0,91 p('меня') = 9 / (9 + 11) = 0,45 S= 0,35 * 0,91 * 0,45 = 0,14 G= (1 – 0,35) * (1 – 0,91) * (1 – 0,45) = 0,03 P= 0,14 / (0,14 + 0,03) = 0,82 f(w) = (0,5 + n(w) * p(w)) / (1 + n(w)) (3) # cd /usr/ports/mail/dspam # vi Makefile # make # make install DSPAM_MODE?= 4510 DSPAM_OWNER?= root DSPAM_GROUP?= mail DSPAM_HOME?= ${_VAR_DIR}/db/dspam #DSPAM_HOME_OWNER?= ${DSPAM_OWNER} DSPAM_HOME_OWNER?= dspam DSPAM_HOME_GROUP?= ${DSPAM_GROUP} DSPAM_HOME_MODE?= # /usr/local/etc/rc.d/dspam.sh start PgSQLServer 127.0.0.1 PgSQLPort 5432 PgSQLUser dspam PgSQLPass wj30sh3hs32 PgSQLDb dspam # Most operating system defaults: #TrustedDeliveryAgent "/usr/bin/procmail" # Linux #TrustedDeliveryAgent "/usr/bin/mail" # Solaris TrustedDeliveryAgent "/usr/libexec/mail.local" # FreeBSD #TrustedDeliveryAgent "/usr/bin/procmail" # Cygwin # # Other popular configurations: #TrustedDeliveryAgent "/usr/cyrus/bin/deliver" # Cyrus #TrustedDeliveryAgent "/bin/maildrop" # Maildrop #TrustedDeliveryAgent "/usr/local/sbin/exim -oMr spam-scanned" # Exim Trust root #Trust mail #Trust mailnull Trust smmsp # на моей системе от имени этого пользователя работает sendmail Trust daemon Trust dspam Featurechained Featurewhitelist # 'quarantine' or 'tag' Preference "spamAction=quarantine" # 'message' or 'headers' Preference "signatureLocation=message" Preference "showFactors=off" Preference "spamSubject=SPAM" AllowOverridetrainingMode AllowOverride whitelistThreshold # cd /usr/local/share/examples/dspam/pgsql # psql -U pgsql template1 # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust define('LOCAL_MAILER_PATH', `/usr/local/bin/dspam')dnl define('LOCAL_MAILER_ARGS', `dspam "--deliver=innocent,spam" --user $u -d %u')dnl # tar –xvzf pop3filter-0.5.5.tar.gz # cd pop3filter-0.5.5 #./configure # make serg$ diff src/main.c.old src/main.c 117,126c117,123 < {/*00*/ {"help", OPT_NORMAL, 0, OPT_T_FUNCT, (void *) help }, < /*01*/ {"h", OPT_NORMAL, 1, OPT_T_FUNCT, (void *) help }, < /*02*/ {"version", OPT_NORMAL, 0, OPT_T_FUNCT, (void *) version}, < /*03*/ {"V", OPT_NORMAL, 1, OPT_T_FUNCT, (void *) version}, < /*04*/ {"fork", OPT_NORMAL, 0, OPT_T_FLAG, NULL }, < /*05*/ {"f", OPT_NORMAL, 1, OPT_T_FLAG, NULL }, < /*06*/ {"e", OPT_NORMAL, 1, OPT_T_GENER, NULL }, < /*07*/ {"listen", OPT_NORMAL, 0, OPT_T_GENER, NULL }, < /*08*/ {"user", OPT_NORMAL, 0, OPT_T_GENER, NULL }, < /*09*/ {"group", OPT_NORMAL, 0, OPT_T_GENER, NULL }, --- > { > /*04-0*/ {"fork", OPT_NORMAL, 0, OPT_T_FLAG, NULL }, > /*05-1*/ {"f", OPT_NORMAL, 1, OPT_T_FLAG, NULL }, > /*06-2*/ {"e", OPT_NORMAL, 1, OPT_T_GENER, NULL }, > /*07-3*/ {"listen", OPT_NORMAL, 0, OPT_T_GENER, NULL }, > /*08-4*/ {"user", OPT_NORMAL, 0, OPT_T_GENER, NULL }, > /*09-5*/ {"group", OPT_NORMAL, 0, OPT_T_GENER, NULL }, 128,132c125,129 < }; lopt[4].data = lopt[5].data = (void *) &(opt->fork); < lopt[6].data = (void *) &(opt->fstderr); < lopt[7].data = &(opt->listen_addr); < lopt[8].data = &(opt->username); < lopt[9].data = &(opt->groupname); --- > }; lopt[0].data = lopt[1].data = (void *) &(opt->fork); > lopt[2].data = (void *) &(opt->fstderr); > lopt[3].data = &(opt->listen_addr); > lopt[4].data = &(opt->username); > lopt[5].data = &(opt->groupname); serg$ diff lib/newopt.c.old lib/newopt.c 463,465c463,465 < case OPT_T_FUNCT: < (*(callbackT)table->data); < break; --- > /* case OPT_T_FUNCT: > (*table->data); # make install # pop3filter --fork 127.0.0.1 110 7110 "dspam --user \$pop3_USERNAME --stdout --deliver=innocement,spam " ServerDomainSocketPath "/var/run/dspam.sock" ClientHost "/var/run/dspam.sock" #ServerPort 24 #ServerPass.Relay1 "secret" #ServerPass.Relay2 "password" #ClientHost 127.0.0.1 #ClientPort 24 #ClientIdent "secret@Relay1" # ps -ax |grep dspam # /usr/local/sbin/httpd -l NameVirtualHost 10.10.10.80 ServerName dspam.test.ru DocumentRoot /usr/local/www/vhosts/dspam User dspam Group dspam Options Indexes FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all DirectoryIndex index.html AddHandler cgi-script .cgi PerlSendHeader On AddHandler perl-script .cgi PerlHandler Apache::Registry # cat /usr/local/www/vhosts/dspam/.htaccess AuthName dspam.test.ru AuthType Basic AuthUserFile /usr/local/etc/apache/passwd require valid-user order deny,allow allow from all order deny,allow deny from all # dspam_corpus --addspam sergei /var/db/dspam/data/gorod/gorod.mbox command: '/usr/local/bin/dspam' --class=spam --source=corpus --user 'sergei' --mode=teft --feature=chained,noise /usr/local/bin/dspam_corpus: 3 messages, 00:00:57 elapsed, 0.05 msgs./sec. # DSPAM aliases spam-gorod: "|/usr/local/bin/dspam --user gorod --class=spam --source=error" inoc-gorod: "|/usr/local/bin/dspam --user gorod --class=spam --source=inoculation" group1:shared:user1,user2,user3 group2:inoculation:user4,user5,user6 # dspam_admin # dspam_admin change preference gorod enableWhitelist off # dspam_clean –s7 # dspam_clean –p0 gorod # dspam_stats serg gorod alex # dspam_stats -H gorod 0 0 * * * dspam_logrotate -a 30 /var/db/dspam/system.log `find /var/db/dspam/data -name "*.log"` # dspam_dump gorod # dspam_2sql # dspam_crc "viagra" ----------------------------------------------------------------------------------------------------------------- WrSpy – cчитаем и контролируем трафик почтовых и прокси-серверов Роман Марков @echo off ; переходим в рабочую папку программы cd /D c:\wrspy ; запускаем программу с параметром "2" - указание номера ; режима wrspy.exe 2 rar.exe a -m5 -os -ow -dh -ep1 -r -ag_dd-mm-yyyy D:\BackUp\Report.rar E:\WrSpy\Report\*.* ----------------------------------------------------------------------------------------------------------------- Знакомимся с HPC-кластером OpenMosix Антон Борисов wget http://citkit.dl.sourceforge.net/sourceforge/openmosix/openmosix-kernel-source-2.4.26-openmosix1.i386.rpm wget http://citkit.dl.sourceforge.net/sourceforge/openmosix/openMosix-2.4.26-1.bz2 # rpm -ih --nodeps openmosix-kernel-source-2.4.26-openmosix1.i386.rpm # cd /usr/src/linux-2.4.26-openmosix1/ # make xconfig # makedep&& make && make bzImage && make modules # make modules_install image = /boot/mosix-bzImage root = /dev/sda1 label = om.Linux read-only # /sbin/lilo -v wget http://citkit.dl.sourceforge.net/sourceforge/openmosix/openmosix-tools-0.3.6-2.tar.gz # tar xzvf openmosix-tools-0.3.6-2.tar.gz # cd openmosix-tools-0.3.6-2 # ./configure --prefix=/opt/OpenMosix --with-kerneldir=/usr/src/linux-2.4.26-openmosix1 # make && make install # MOSIX-# IP number-of-nodes # ============================ 1 10.0.0.1 1 100 0.0.0.100 1 1 10.0.0.1 5 /opt/OpenMosix/sbin/omdiscd -i eth0 si:S:sysinit:/etc/rc.d/rc.S si:S:sysinit:/bin/mosrun -h /etc/rc.d/rc.S ca::ctrlaltdel:/sbin/shutdown -t5 -r now ca::ctrlaltdel:/bin/mosrun -h /sbin/shutdown -t5 -r now #!/bin/sh NODE1=/proc/hpc/nodes/573 NODE2=/proc/hpc/nodes/574 NODE3=/proc/hpc/nodes/575 FILENAME=hpc_load.txt i=0 while true do DateStr='date +%H-%M-%S' Load1='cat $NODE1/load' Load2='cat $NODE2/load' Load3='cat $NODE3/load' echo "$DateStr ($i): $Load1, $Load2, $Load3" >> $FILENAME echo "Time: $DateStr ($i). Load: $Load1, $Load2, $Load3"; i='expr $i + 1'; sleep 1s; done # wget MPlayer # tar xzvf MPlayer # cd MPlayer # ./configure # time make dep # time make # wget openmosixview-1.5.tar.gz # tar xzvf openmosixview-1.5.tar.gz # cd openmosixview-1.5 static material_struct whiteMaterials = { {1.0, 1.0, 1.0, 1.0}, {0.0, 0.0, 0.0, 1.0}, {1.0, 1.0, 1.0, 1.0}, {20.0} }; static material_struct whiteMaterials = { {1.0, 1.0, 1.0, 1.0}, {0.0, 0.0, 0.0, 1.0}, {1.0, 1.0, 1.0, 1.0}, 20.0 }; gcc -I/usr/src/linux-2.4.26-openmosix1/include/ -I/usr/local/openmosix-tools/include/ -o mosstatd -L/usr/local/openmosix-tools/lib/ -lmos mosstatd.c # 3dmosmon localhost # cd openmosixview # make # ./openmosixview # mosctl --help # moslimit --help # migrate --help root@node0:~# ompsinfo root@node0:~# showmap omdiscd-i eth0 ----------------------------------------------------------------------------------------------------------------- Управляем удаленными базами AIDE Рашид Ачилов /dev/acd1 /cd-rw cd9660 ro,noauto,noexec 0 0 /dev/da0s1 /mnt/umass msdos rw,noauto,-l,-Wkoi2dos 0 0 # Generic USB Flash drive (umass0) device "USB Flash Drive" devname "umass[0-9]+" vendor 0x058f product 0x9380 release 0x0100 attach "/sbin/mount /mnt/umass" # usbd -dv # killall usbd # usbd device umass device scbus device da device pass device cd device atapicam device ata remote1 10.87.2.60 remote2 10.87.2.254 remote3 10.87.2.120 master 127.0.0.1 // запустит скрипт с параметрами по умолчанию # aidecontrol // запустит скрипт с параметрами из конфигурационного файла /tmp/abcd.conf # aidecontrol -c /tmp/abcd.conf // запустит скрипт со списком узлов из файла /tmp/nodes.lst и чистым RW-носителем. # aidecontrol -l /tmp/nodes.lst -b wtools="bzip2 burniso" for tool in $tools do # Вот это список программ, без которых работа невозможна (не считая SSH) locator=`which $tool` # Если which вернул пустую строку (а это происходит тогда, когда программа не найдена – ее физически нет # или каталог не включен в PATH), то выдать сообщение и прекратить работу if [ -z $locator ]; then logline="Your system does not include $tool utility"; safe_logger exit fi done IFS=" " shiftfiles() { # Получаем список файлов в каталоге lfiles=`ls -1` # Обрабатываем по одному элементу списка до тех пор, пока он не пуст for lfile in $lfiles do # Выбираем номер поколения (указываем awk, что разделителем полей является точка, и печатаем второе поле) gener=`echo $lfile | awk 'BEGIN {FS="."} {print $2}'` # Дополнительная защита – если в качестве номера поколения выбрали «bz2», значит в каталоге находится файл filename.bz2, # который не переименован из-за какой-либо ошибки. Корректируем эту ситуацию, подразумевая нулевое (самое последнее) поколение if [ $gener = "bz2" ]; then logline="Invalid database file name $lfile, assumed zero generation"; safe_logger gener=0 mv $adbnam.bz2 $adbnam.$gener.bz2 fi # Если номер поколения равен максимально хранимому поколению, этот файл удаляется. Иначе вычисляется # следующий номер и файл переименовывается. if [ $gener -eq $abmax ]; then rm -f $adbnam.$gener.bz2 else ngener=$(($gener+1)) mv $adbnam.$gener.bz2 $adbnam.$ngener.bz2 fi done } if [ $blank = "no" ]; then shiftfiles fi cp $ringdir/$hostname/$adbnam.bz2 ./$adbnam.0.bz2 # camcontrol devlist attach "sh -c '/usr/local/bin/mountflash /mount/point'" # /dev/da0s1 mpdev=`mount | grep -e "$usbdevmp " | awk '{print substr($1,6,3)}'` # Размонтировать Flash umount $usbdevmp status=$? # Проверить статус размонтирования и выдать сообщение, если неудачно if [ $status -ne 0 ]; then logline="USB Flashdrive unmounting on device $usbdev failed, return code is $status"; safe_logger else logline="USB Flashdrive was succesfully unmounted after updating content"; safe_logger # Найти устройство, на которое смонтировалась Flash. Устройство находится поиском в выводе команды # camcontrol devlist строки «(<имя_устройства», например «(da0» umdrive=`camcontrol devlist | grep -e "($mpdev"` # Выбрать BUS. Ищется строка «scbusX», потом берется подстрока с шестого символа от места, где найдена строка umbus=`echo $umdrive | awk '{print substr($0,index($0,"scbus"),6)}'` umdig=`echo $umbus | awk '{print substr($1,6)}'` # Так же ищется target и lun. target берется через 7 ("target ") символов от строки, lun берется через 4 ("lun ") символа от строки umtarget=`echo $umdrive | awk '{print substr($0,index($0,"target") + 7,1)}'` umlun=`echo $umdrive | awk '{print substr($0,index($0,"lun") + 4,1)}'` # Выдать команду останова устройства (она погасит индикатор готовности на Flash, за исключением USB 1.1) camcontrol eject $umdig:$umtarget:$umlun fi # su aide > ssh remotebox ----------------------------------------------------------------------------------------------------------------- Проводим аудит системы с помощью SNARE Сергей Яремчук # cd /usr/src; wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.11.tar.gz # tar xzfv linux-2.6.11.tar.gz # wget -c http://www.intersectalliance.com/projects/Snare/Download/snare-0.9.7-2.6.11.7.diff # cd linux-2.6.11 # patch -p0 < snare-0.9.7-2.6.11.7.diff # make menuconfig # tar -xzvf snare-core-0.9.7.tar.gz # cd snare-core-0.9.7 # make clean # make # make install # /etc/init.d/snare start # snare-gui-0.9.6.tar.gz # cd snare-gui-0.9.6 # ./autogen.sh # make # make install # cp snare-icon.png /usr/share/pixmaps # cp snare.desktop /usr/share/gnome/apps/System # cp snare.desktop /usr/share/gnome/ximian/Programs/Utilities/ # cp Snare.kdelnk /usr/share/applnk/System/ criticality=4 event=open(.*),mkdir,mknod,link,symlink return=Success user!=root match=^/etc/shadow$ criticality=2 event=open(.*),mkdir,mknod,link,symlink return=Failure user!=root match=^/etc/shadow$ myguisystem# ssh auditedsystem .. auditedsystem# /bin/su - [password] auditedsystem# export DISPLAY=myguisystem:80 auditedsystem# snare & #cat /var/log/audit/20050821-host.com.LinuxAudit | ./extract.pl ----------------------------------------------------------------------------------------------------------------- CD, не подвластный копированию Крис Касперски Листинг 1. Макет программы sf.c для снятия топологий //-[чтение сектора с диска]--------------------------------- // ARG: // CD указатель на строку с именем привода (например, "TEAC"), адрес на ASPI-шине (например, "1.1") // или имя диска("\\.\G:"); первые два варианта работают через ASPI, последний через SPTI; // // buf указатель на буфер SECROR_SIZE*2 // // sector номер сектора в LBA-формате // // RETURN: // 0 успешно // -1 ошибка read_from_cd(char *CD, unsigned char *buf, long sector) { int stat; stat=cd_raw_sector_read(CD, buf, SECTOR_SIZE, sector, ONE_SECTOR, W_USER_DATA); if (stat == SCSI_OK) return 0; return -1; } //-[чтение TSC-счетчика]------------------------------------ unsigned int A() { __asm{ _emit 0xF ; RDTSC _emit 0x31 } } #define argCD v[1] // КОНФИГУРАЦИЯ //----------------------------------------------------------- // номер первой точки измерения (LBA-адрес) // данная утилита измеряет топологию только по одной/ точке, что не есть хорошо, т.к. легко подобрать похожий // диск, для уверенности следует выбрать несколько точек: в начале, середине и конце диска #define _CFG_BGN_SEC_ 17699 // количество секторов для измерения // должно быть не меньше утроенного количества секторов на виток в данной точке измерения (см. _CFG_BGN_SEC_) // число витков спирали N с поперечной плотностью D витков/мм от радиуса R1 до радиуса R2 определяется формулой: N = (R2- R1) * D #define _CFG_LEN_SEC_ 0x669 // максимальный шаг приращения // в принципе должен быть равен удвоенному количеству секторов на данном витке спирали, что увеличивает // точность измерений, но можно использовать и значение // _CFG_LEN_SEC_ #define _CFG_LEN_DEL_ _CFG_LEN_SEC_ // начальный шаг приращения (должен быть по возможности мал) #define _CFG_BGN_DEL_ 0x2 // приблизительное количество секторов на данном витке спирали (в данной версии программы это значение мало на что влияет) #define _CFG_xWHELL_ 27 // конечный сектор для проверки #define _END_SEC_ (_CFG_BGN_SEC_+_CFG_LEN_SEC_) // конечный шаг #define _END_DEL_ (_CFG_BGN_DEL_+_CFG_LEN_DEL_) // приращение шага #define FB(b) (##b = (##b + 1) % _END_DEL_); // шапка цикла #define FH(a,b) for (##a=_END_SEC_, ##b=_CFG_BGN_DEL_; ##a > _CFG_BGN_SEC_; ##a-=##b) main(int c, char** v) { int a, b; int x=0; int i=0; int A1, A2; unsigned char buf[SECTOR_SIZE]; // проверка аргументов командной строки if (c < 2) { fprintf(stderr,"USAGE:sf.exe CD\n\n"); printf( " SCSI_INQUITY via ASPI32\n"\ "-------------------------------------\n"); read_from_cd("?.?", buf,0); return 0; } // этап первый //---------------------------------------------------- // читаем случайные сектора для разгона привода fprintf(stderr,"%s\n",_TEXT_SPINEUP_); for (a = 0; a < 0x69; a++) { read_from_cd(argCD, buf,rand()%_END_SEC_); fprintf(stderr,"\r%02d%%",a*100/0x69); } // этап второй //---------------------------------------------------- // определяем количество секторов на дорожке и стабильность вращения привода, алгоритм // определения количества секторов: читаем сектора задом наперед, с циклически увеличивающимся // шагом, наименьшее значение шага, при котором время чтения секторов будет минимальным, и будет // равно количеству секторов на данном витке спирали (в данной версии не реализовано, поскольку // слишком громоздко и не наглядно) // // алгоритм определения стабильности: читаем сектора с шагом, равным количеству секторов на данном // витке спирали, и оцениваем разброс; если разброс будет слишком большим (превышает 10%-15%), // следует уменьшить скорость привода (как это сделать, показано в CD.snail.c) fprintf(stderr,»\r%s\n»,_TEXT_TEST_); for (a = _END_SEC_; a > _CFG_BGN_SEC_; a-=_CFG_xWHELL_) { A1=A(&c);read_from_cd(argCD, buf,a);A2=A(&c); fprintf(stderr,"\r%02d%%",(_END_SEC_-a)*100/_CFG_LEN_SEC_); } // этап третий (важнейший!) //---------------------------------------------------- // производим, собственно, измерения (внимание: сюда еще необходимо добавить «сглаживание» полученных данных) fprintf(stderr,"\r%s\n",_TEXT_ANGLE_); // выводим шапку таблицы printf("delta:"); FH(a,b) { printf("\t%d",a); FB(b); } printf("\ntime:"); // измеряем и тут же выводим результаты FH(a,b) { A1=A(&c); read_from_cd("TEAC", buf,a); A2=A(&c); printf("\t%d",(A2-A1)/100); fprintf(stderr,"\r%02d%%",(_END_SEC_-a)*100/_CFG_LEN_SEC_); FB(b); } printf("\n"); // всему конец fprintf(stderr,"\r%s\n",_TEXT_END_); return 0; } Листинг 2. Результат запуска программы без ключей >sf.exe Листинг 3. Определение версии VMWare mov eax, 564D5868h ; VMWARE_MAGIC mov ecx, 0Ah ; Get VMware version mov edx, 5658h ; VMWARE_PORT in eax, dx ----------------------------------------------------------------------------------------------------------------- Контролируем и ограничиваем системные вызовы с помощью systrace Александр Байрак #include void proc1(); int main() { printf("just a message\n"); mkdir(«test»); proc1(); } void proc1() { printf("just a dumb procedure\n"); } #gcc -o proga proga.c #systrace -A /path/to/program/proga [системный вызов] [условие] [действие] #systrace -a /home/01mer/labs/systr/proga #objdump -d proga > proga.lst execve("/bin/sh/",0,0); xorl %eax,%eax pushl %eax pushl $0x68732f2f pushl $0x6e69622f movl %esp,%ebx pushl %eax pushl %esp pushl %ebx pushl %eax movb $0x3b,%al int $0x80 31 c0 50 68 6e 2f 73 68 68 2f 2f 62 69 89 e3 50 54 53 50 b0 3b cd 80 # home/01mer/labs/systr/proga #systrace -a /home/01mer/labs/systr/proga # systrace -t /home/01mer/labs/systr/newproga netbsd-fsread: filename eq "/lib/libc.so.12.114.1" then permit log netbsd-fswrite: filename eq "/some/where/file" then deny[EIO] ----------------------------------------------------------------------------------------------------------------- Используем LinuxBIOS на системах VIA EPIA-M Антон Борисов wget http://secure.netroedge.com/~lm78/archive/i2c-2.9.1.tar.gz tar xzvf i2c-2.9.1.tar.gz cd i2c-2.9.1 su make && make install wget http://secure.netroedge.com/~lm78/archive/lm_sensors-2.9.1.tar.gz tar xzvf lm_sensors-2.9.1.tar.gz cd lm_sensors-2.9.1 su make && make install # I2C adapter drivers modprobe i2c-viapro modprobe i2c-isa # I2C chip drivers modprobe eeprom modprobe vt1211 /usr/local/bin/sensors -s # /usr/local/bin/sensors wget http://www.guzu.net/linux/hddtemp-0.3-beta12.tar.bz2 tar xjvf hddtemp-0.3-beta12.tar.bz2 cd hddtemp-0.3-beta12 ./configure --with-db-path=/etc/hddtemp.db --prefix=/usr/local/hddtemp make && make install /usr/local/hddtemp/sbin/hddtemp -d -q /dev/hda # telnet 127.0.0.1 7634 wget http://te.to/~ts1/filo/filo-0.4.2.tar.bz tar xjvf filo-0.4.2.tar.bz cd filo-0.4.2 make AUTOBOOT_FILE = "hda3:/boot/vmlinuz oot=/dev/hda3 console=tty0 console=ttyS0,115200" make cp filo.elf ~/src/payloads/filo.m2.elf wget http://snapshop.linuxbios.org/freebios--devel--1.0--base-0.tar.bz2 tar xjvf freebios--devel--1.0--base-0.tar.bz2 cd freebios su dd if=/dev/mem of=vgabios.bin skip=1536 count=128 # # LinuxBIOS config file for: VIA epia-m mini-itx # target /home/anthony/epia-m # via epia mainboard via/epia-m # Enable Serial Console for debugging option SERIAL_CONSOLE=1 #option SERIAL_POST=1 option TTYS0_BAUD=115200 # for VGA support (optional) option HAVE_FRAMEBUFFER=0 option CONFIG_VGABIOS=1 option CONFIG_REALMODE_IDT=1 dir src/bioscall option CONFIG_PCIBIOS=1 option VGABIOS_START=0xfffe0000 addaction romimage dd if=./vgabios.bin of=romimage bs=65536 seek=2 conv=sync conv=notrunc # end VGA support option CONFIG_EPIAMVERSIONSTRING="5.0.0E-" __DATE__ " " __TIME__ target /home/anthony/src/epia-m/freebios/ option DEFAULT_CONSOLE_LOGLEVEL=9 option DEBUG=1 # Use 256KB Standard Flash as Normal BIOS option RAMTEST=1 option USE_GENERIC_ROM=1 option STD_FLASH=1 option ROM_SIZE=262144 # payload size = 192KB option PAYLOAD_SIZE=196608 # use ELF Loader to load Etherboot option USE_ELF_BOOT=1 # Use FILO as our payload payload /home/anthony/src/payloads/filo.m2.elf python /home/anthony/src/freebios/util/config/NLBConfig.py config1 /home/anthony/src/freebios cd ~/src/epia-m/freebios make cd ~/src/freebios/util/flash_and_burn make ./flash_rom --h su ./flash_rom romimage # ssh -l anthony -C via