Заглянем в будущее PHP6 Кирилл Сухов   class ....... { function ... ......           { ... } function !..$ ....)          { ... } function ..........                { ... } } $..... = array(); $.....[‘הָנָשׁ ַחוּלויְערַ’] = new .......();         list($a, $b)) { } ?>       -----------------------------------------------------------------------------------------------------------------   Greylisting: панацея от спама или «мыльный пузырь»? Сергей Супрунов   root# cd /usr/ports/mail/milter-greylist root# make install     acl whitelist domain donpac.ru acl whitelist domain rostel.ru acl whitelist domain mail.ru acl whitelist domain rambler.ru acl whitelist domain yandex.ru acl whitelist domain freebsd.org        miltergreylist_enable="YES"     INPUT_MAIL_FILTER(`miltergreylist', `S=local:/var/milter-greylist/milter-greylist.sock, F=, T=S:4m;R:4m')dnl   -----------------------------------------------------------------------------------------------------------------   Roaring Penguin CanIt: ведём борьбу со спамом Сергей Яремчук   #./os-specific/fedora-core-1/prepare-system     # id smmsp     # /usr/sbin/useradd -c "Sendmail user" -r -M -d /var/spool/clientmqueue -s /bin/false smmsp     # id defang   # mkdir -p /var/spool/MIMEDefang # /usr/sbin/useradd -c "MIMEDefang user" -r -M -d /var/spool/MD-Bayes defang # chmod 700 /var/spool/MIMEDefang # chown defang.defang /var/spool/MIMEDefang # mkdir -p /var/spool/MD-Bayes # chmod 700 /var/spool/MD-Bayes # chown defang.defang /var/spool/MD-Bayes # mkdir -p /var/spool/MD-Quarantine     # chmod 700 /var/spool/MD-Quarantine     # chown defang.defang /var/spool/MD-Quarantine     none /var/spool/MIMEDefang tmpfs mode=700,size=128M, uid=defang,gid=defang 0 0     # fgrep -v INPUT_MAIL_FILTER < | fgrep -v 'DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA' > /etc/mail/sendmail.mc.NEW   #  cat <<'EOF' >> /etc/mail/sendmail.mc.NEW INPUT_MAIL_FILTER(`mimedefang', `S=unix:/var/spool/MIMEDefang/mimedefang.sock, F=T, T=S:15m;R:15m;E:15m') EOF     # mv -f /etc/mail/sendmail.mc /etc/mail/sendmail.mc.ORIG # mv -f /etc/mail/sendmail.mc.NEW /etc/mail/sendmail.mc # make -C /etc/mail     # chkconfig sendmail on # chkconfig postgresql on # chkconfig httpd on     # ln -s /etc/mail/canit/mimedefang-ctrl /etc/init.d/canit # ln -s /etc/mail/canit/ticker-ctrl /etc/init.d/canit-ticker     # ln -s /etc/init.d/canit /etc/rc3.d/S86canit # ln -s /etc/init.d/canit-ticker /etc/rc3.d/S87canit-ticker     # ln -s /etc/init.d/canit-ticker /etc/rc0.d/K13canit-ticker # ln -s /etc/init.d/canit-ticker /etc/rc1.d/K13canit-ticker # ln -s /etc/init.d/canit-ticker /etc/rc6.d/K13canit-ticker # ln -s /etc/init.d/canit /etc/rc0.d/K14canit # ln -s /etc/init.d/canit /etc/rc1.d/K14canit # ln -s /etc/init.d/canit /etc/rc6.d/K14canit     local all all trust     local all trust     LoadModule php4_module modules/libphp4.so AddModule mod_php4.c DirectoryIndex index.html index.php AddType application/x-httpd-php .php4 .php .phtml     safe_mode = Off     # /etc/init.d/httpd start # /etc/init.d/postgresql start     # id smmsp     # ./install.sh --webroot=/var/www/html/rr     # ./init-database     # http://www.clamav.net/ $Features{'Virus:CLAMD'} = '/usr/sbin/clamd'; # Внимание clamd должен работать от имени пользователя «defang»  $ClamdSock = '/var/spool/MIMEDefang/clamd.sock';     # Раскомментируйте если для проверки будет использоваться clamscan # $Features{'Virus:CLAMAV'} = '/usr/bin/clamscan';     # ln -s /etc/mail/canit/clamav-ctrl /etc/init.d/clamd # chkconfig clamd on     # crontab -e 0 6 * * * /bin/sh /etc/mail/canit/canit.cron 0 6 * * * /bin/sh /etc/mail/canit/freshclam.cron     # /etc/mail/canit/ticker-ctrl start   # /etc/mail/canit/mimedefang-ctrl start     # /etc/mail/canit/ticker-ctrl start     $ telnet localhost 25     $ ps waux | grep defang   -----------------------------------------------------------------------------------------------------------------   Как работает Sendmail? Полезные подробности Часть 3: Вопросы администрирования Сергей Супрунов   define(`confRUN_AS_USER',`mailnull')dnl define(`confFORWARD_PATH', `')dnl     root# chown -R mailnull /var/spool/mqueue root# chown mailnull aliases aliases.db access access.db     root# chmod 4555 /usr/libexec/mail.local     root# cd /etc/mail; make install restart     serg$ ps -axouser,command | grep sendmail     root# mailstats -P     define(`confHOST_STATUS_DIRECTORY', `.hoststat')dnl     root# hoststat | grep timed     FEATURE(nocanonify)     FEATURE(nodns)     define(`confQUEUE_SORT_ORDER', `Priority')dnl     Приоритет = Размер_сообщения_в_байтах –             (ClassFactor * Класс_сообщения) +             (RecipientFactor * Кол-во_получателей) +             (RetryFactor * Кол-во_попыток_отправки)     Pbulk=-60 Pfirst-class=0 Pjunk=-100 Pspecial-delivery=100     define(`confMIN_QUEUE_AGE', `30m')     serg$ telnet smtp.nekiyhost.ru 113     FEATURE(`queuegroup') QUEUE_GROUP(`mails', `P=/var/spool/mqueue/mails, F=f')     QGRP:mail.ru            mails QGRP:yandex.ru          mails QGRP:rambler.ru         mails   -----------------------------------------------------------------------------------------------------------------   Ведём статистику прокси-сервера Squid Павел Малахов   # cat /var/log/squid/access.log | grep 10.0.0.15 > /tmp/10.0.0.15.txt     /var/log/squid/access.log {     daily     rotate 6     copytruncate     nocompress     notifempty     missingok } … # далее описана ротация cache.log и  store.log     # ./configure     # ./configure --enable-sysconfdir='/etc/sarg' # make # make install     # mkdir -p /var/www/html/reports/     language Russian_koi8 access_log /var/log/squid/access.log.1  # вчерашний журнал title "Squid report for proxy1" output_dir /var/www/html/reports/sarg date_format e charset Koi8-r www_document_root /var/www/html     # sarg     # оставить в отчёте только нескольких пользователей include_users "petrov:ivanov:secretar" # не учитывать записи журнала, содержащие подстроки exclude_string "подстрока1:подстрока2"  # не учитывать обращения к перечисленным доменам exclude_hosts /etc/sarg/hosts.txt  # сколько файлов отчётов нужно хранить в директории, # самый старый убирается lastlog  30 # создавать отчёт только для указанных дней недели, # воскресенью соответствует 0 weekdays 1-5 #создавать отчёт только для определённых часов hours   8-18     # tar -xzvf /path/to/calamaris-2.59.tgz     # mkdir -p /etc/calamaris /var/www/html/reports/calamaris     $requester_report = -1; $status_report = 1; $type_report = -1; $hostname = 'lookup'; $output_format = 'html,graph'; $output_path = '/var/www/html/reports/calamaris'; $output_file = 'index.html'; $show_reports = '0,2,5,6,8,10,11,13,14';     #!/bin/bash # Скрипт для Calamaris 3. Создаёт отчёты по логам Squid # Использование: calam_rep.sh [today|yesterday|week|month] # Pavel Malakhov 28.03.05   CALAM_DIR='/etc/calamaris';       # Каталог программы SQUID_LOG_DIR='/var/log/squid';   # Каталог логов Squid # Корневой каталог отчётов, остальные создадутся REP_PATH_PREFIX='/var/www/html/reports/squid'; # Каталог, где будем хранить недельные кэш-файлы CACHE_DIR='/etc/calamaris/cache'; # Так как отчёт делаем за вчерашний день, то название отчёта # должно это отражать. Определим для этого переменные. # Для наглядности предположим, что сегодня 1 февраля 2006, # среда, тогда вчера было 31 января, вторник # Вчерашнее число, т.е. YESTD=31 YESTD=`date -d yesterday +%d`; YESTW=`date -d yesterday +%V`;    # Номер недели # Для нашего примера номер недели не изменился и YESTW=5. # Номер и название месяца, т.е. YESTM=01_January YESTM=`date -d yesterday +%m_%B`; # Существует проблема с обработкой не английских букв, # если используется кодировка en_US.UTF-8. # Поэтому переназначим переменную LANG. Если используется # другая кодировка или проблем нет, то закомментируйте # нижеследующие 2 строки LANG=en_US export $LANG   # --- Нижеследующий код изменять не нужно --------------- # ---- [но исследование приветствуется!] ---------------- # Если параметр отсутствует, то прерываем выполнение скрипта if [ "$1" = "" ]; then  echo "Usage: calam_rep.sh [today|yesterday|week|month]"  exit 1 fi # Если каталог для отчётов не существует, то создаём function checkdir {  if [ ! -e "$REPPATH" ];then  echo -n `date +%c` "Dir \"$REPPATH\" is absent. Creating..";  mkdir -p $REPPATH;  echo "Done.";  fi; } # Если каталог для кэша не существует, то создаём if [ ! -e "$CACHE_DIR" ];then  echo -n `date +%c` "Cache dir \"$CACHE_DIR\" is absent. Creating... ";  mkdir -p $CACHE_DIR;  echo "Done."; fi; case "$1" in  "today" )  REPPATH=$REP_PATH_PREFIX'/today';  checkdir;  cd $CALAM_DIR;  echo -n `date +%c` "Processing data for today... ";  cat $SQUID_LOG_DIR/access.log | ./calamaris.pl --config-file ./calamaris.conf --output-path $REPPATH;  ;;  "yesterday" )  REPPATH=$REP_PATH_PREFIX'/days/'$YESTD;  checkdir;  cd $CALAM_DIR;  echo -n `date +%c` "Processing data for yesterday... ";  cat $SQUID_LOG_DIR/access.log.0 | ./calamaris.pl --config-file ./calamaris.conf --output-path $REPPATH --cache-output-file $CACHE_DIR/day.$YESTD;  ;;  "week" )  REPPATH=$REP_PATH_PREFIX'/weeks/'$YESTW;  checkdir;  cd $SQUID_LOG_DIR;  echo -n `date +%c` "Processing data for week... ";  cat access.log.6 access.log.5 access.log.4 access.log.3 access.log.2 access.log.1 access.log.0 | $CALAM_DIR/calamaris.pl --config-file $CALAM_DIR/calamaris.conf --output-path $REPPATH --cache-output-file $CACHE_DIR/week.$YESTW;  ;;  "month" )  REPPATH=$REP_PATH_PREFIX'/months/'$YESTM;  checkdir;  cd $CACHE_DIR;  CACHEFILES="";  for ((i=1; i<=31; i++)); do  FILE='day.'$i;  if [ -e "$FILE" ]; then  if ["$CACHEFILES" = ""]; then  CACHEFILES=$FILE;  else  CACHEFILES=$CACHEFILES':'$FILE;  fi  fi  done  echo 'files to process '$CACHEFILES;  echo -n `date +%c` "Processing data for month... ";  $CALAM_DIR/calamaris.pl --config-file $CALAM_DIR/calamaris.conf --cache-input-file $CACHEFILES --no-input --output-path $REPPATH;  echo "Done";  # Очищаем кэш в начале месяца.  # Удаляем только записи для дней, для недель оставляем  DD=`date +%d`;  if [ "$DD" = "01" ]; then  echo -n `date +%c` "Cleaning up cache dir... ";  rm -f $CACHE_DIR/day.*;  fi  ;; esac echo "Done"; echo `date +%c` "---Everything is done" exit 0     # chmod +x /etc/calamaris/calam_rep.sh     # ./calam_rep.sh yesterday     # touch /var/log/calam_rep.log     # tar -zxvf ./lightsquid-1.6-beta.tgz     # mkdir -p /var/www/html/reports/lightsquid     # chown -R root.webmaster /var/www/html/reports/lightsquid # cd /var/www/html/reports/lightsquid # chmod +x *.cgi # chmod +x *.pl     # пути к настроечным файлам $tplpath     ="/var/www/html/reports/lightsquid/tpl"; $langpath    ="/var/www/html/reports/lightsquid/lang"; $reportpath  ="/var/www/html/reports/lightsquid/report"; $ip2namepath ="/var/www/html/reports/lightsquid/ip2name"; # путь к журналам Squid $logpath     ="/var/log/squid/"; # какие сайты не учитывать в отчётах $skipurl       = "zdd.com|192\.168\.1\.|cnn.com"; # язык отчётов $lang          = "ru"; # определяем размер «большого файла» в 2 Мб $bigfilelimit        = 2*1024*1024; # показывать отчёт о пользователях, превысивших квоту $showoversizelink    = 1; # устанавливаем квоту 10 Мб (одна для всех) $perusertrafficlimit = 10*1024*1024;     # ./ check-setup.pl     # ./lightparser.pl     192.168.10.1    01     Sysadmin 192.168.10.9    02     Managers 192.168.10.14   02     Operators 192.168.10.30   02     Operators 192.168.10.74   03     Managers     $ip2name       = "list"; $showgrouplink = 1; $userealname   = 1;     sub StartUser() {  my $ipfile = "/var/www/html/reports/lightsquid/users.txt";     192.168.10.1   Myself 192.168.10.9   Bond 192.168.10.14  Bart 192.168.10.30  Ivan 192.168.10.74  Petrov     Myself  sysadmin Bart    Bart Simpson Ivan    Ivan Ivanov Petrov  Petrov Semen Semenovich Bond    James Bond     # Генерируем отчёты прокси сервера Squid 0/20 * * * * root /var/www/html/reports/lightsquid/lightparser.pl today 5    0 * * * root /usr/sbin/sarg 30   0 * * * root /etc/calamaris/calam_rep.sh yesterday >> /var/log/calam_rep.log 35   0 * * 6 root /etc/calamaris/calam_rep.sh week >> /var/log/calam_rep.log 45   0 1 * * root /etc/calamaris/calam_rep.sh month >> /var/log/calam_rep.log     Options +Indexes Order deny,allow Deny from all Allow from 192.168.100.11 Allow from 192.168.100.17   -----------------------------------------------------------------------------------------------------------------   Frenzy 1.0 – дитя мечты Сергей Можайский   # Device     Mountpoint   Fstype   Options   Dump   Pass# /dev/ad0s1a  /            ufs      rw        1      1     ntfsmount /dev/ad0s3 /mnt/ntfs -o force   -----------------------------------------------------------------------------------------------------------------   Автоматизируем тестирование железа с помощью StressLinux Дмитрий Волков   default stress prompt 1 timeout 600 display loader.msg F1 loader.msg   label stress      # Stresslinux   kernel ../_stresslinux/boot/vmlinuz   append rw video=vesafb:640x480-32@75,nomtrr,ywrap root=/dev/nfs nfsroot=192.168.12.191:/tftpboot/X86PC/_stresslinuxip=dhcp hda=scsi hdb=scsi hdc=scsi hdd=scsi     Welcome to StressLinux Boot Server!   0fTo start the stresslinux distribution enter press ?       .07   Available boot options:     stress        - Boot Stresslinux via PXE with initrd     09F1:0f Stresslinux     Subnet 192.168.12.0 netmask 255.255.255.0 {       option subnet-mask 255.255.255.0;       default-lease-time 21600;       max-lease-time 43200;       host some_host{             # Указываю MAC-адрес VMWare             hardware ethernet 00:0C::29:50:84:D7;             fixed-adress 192.168.12.242;             option vendor-class-identifier "PXEClient"       } }     # in.tftpd –v –l –s /tftpboot     /tftpboot/X86PC/_stresslinux 192.168.12.0/255.255.255.0 (rw,insecure,sync,no_root_squash)     /tftpboot/X86PC/pxelinux/pxelinux.cfg/default: label  my   # Stresslinux (my kernel)   kernel ../_stresslinux/boot/vmlinuz-<номер версии ядра>   append initrd= rw video=vesafb:640x480-32@75,nomtrr,ywrap root=/dev/nfs nfsroot=192.168.12.191:/tftpboot/X86PC/_stresslinux ip=dhcp hda=scsi hdb=scsi hdc=scsi hdd=scsi     #!/bin/bash   // Получаем IP-адрес узла IP=`ifconfig|grep inet|perl -nle @ar=split(/\s+/,$_);@ar2=split(/\:/,\\$ar[2]); print \\$ar2[1]`   // Создаем каталог, если такого еще не существует if[ ! -d /home/result/$IP ] then echo Making results dir /home/result/$IP   /bin/mkdir -p result/$IP fi // все результаты тестирования будем записывать сюда cd /home/result/$IP     VAL=`/sbin/lsmod | grep i2c-isa` if [ x$VAL  == x  ] then echo trying insert module i2c-isa   modprobe i2c-isa fi     echo Collecting information   # собираем информацию о PCI-устройствах /sbin/lspci | tee lspci sleep5 # собираем информацию о процессорах /usr/bin/x86info | tee x86info sleep5 # собираем расширенную информацию о системе /usr/bin/lshw | tee lshw sleep5     TM=20 # Таймер echo Starting 1st test  | tee stress1 echo Spanning 10 workers spinning on sqrt() | tee -a stress1 echo waiting for $TM seconds | tee -a stress1 /usr/bin/stress -v -c 10 -t $TM | tee -a stress1 &     sens "Spanning 10 workers spinning on sqrt() stress1" "$TM" SENSORS=`/usr/bin/sensors | grep 'No sensors found'` sens() {     if [ "x$SENSORS" == "x" ]     then       for((i=1;i<=$2;i++))         do                 /usr/bin/clear                 /usr/bin/sensors                 echo "Time limit $2 s"                 echo "seconds $i $1"                 sleep1         done     fi }   -----------------------------------------------------------------------------------------------------------------   OpenVPN: доступ повышенной проходимости Алексей Коршунов   # USE='ssl examples' emerge openvpn     # echo net-misc/openvpn >> /etc/portage/package.keywords # USE="ssl example" emerge openvpn     # cd /etc/openvpn/easy-rsa # source ./vars # ./clean-all # ./build-ca # ./build-key-pkcs12 --server server # ./build-dh # ./build-key-pkcs12 –-pkcs12 client1     local Х.Х.Х.Х port 443     proto tcp     proto udp     pkcs12 /etc/openvpn/easy-rsa/keys/server.p12 dh /etc/openvpn/easy-rsa/keys/dh1024.pem     server 192.168.4.0 255.255.255.0     server-bridge 192.168.1.73 255.255.255.0 192.168.1.61 192.168.1.63     ifconfig-pool-persist /etc/openvpn/ipp.txt     push "route 192.168.1.0 255.255.255.0" push "route Х.Х.Х.Х 255.255.255.255"     push "dhcp-option DNS 192.168.1.1" client-to-client     ip route 192.168.4.0 255.255.255.0 192.168.1.73     # route add -net 192.168.4.0/24 gw 192.168.1.73     # /etc/init.d/openvpn start     client dev tun proto tcp remote openvpn.domain.ru 443     ca.crt, client1.crt, client1.key     ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/client1.crt key /etc/openvpn/easy-rsa/keys/client1.key     # openvpn /etc/openvpn/client.conf     cryptoapicert "THUMB:ed 38 ac 63 …" ca ca.crt     # emerge httptunnel     # hts --forward-port Х.Х.Х.Х:443 80     # netstat -napl |grep 80     C:\httptunnel\htc.exe -F 443 -P 192.168.1.1:3128 X.X.X.X:80   -----------------------------------------------------------------------------------------------------------------   Возможности MS Windows SharePoint Services Часть 2 Иван Хрипунов                                                                               -----------------------------------------------------------------------------------------------------------------   Управляем зонами DNS Рашид Ачилов   logging {         channel named_log {             syslog local7;             severity info;         };         category default { named_log; default_debug; };         category general { named_log; default_debug; };         category unmatched {named_log; default_debug; }; };     acl me-white { 212.20.5.0/24; }; acl grayteeth { 10.87.1.0/24; };     view "internal" {         match-clients { grayteeth; me-white;};         recursion yes;             zone "." {                 type hint;                 file "named.root";         };             zone "0.0.127.IN-ADDR.ARPA" {                 type master;                 notify no;                 file "localhost.rev";                 allow-update { none; };                 allow-transfer { none; };         };             zone "krokodil.ru" {                 type master;                 file "direct-krokodil-ru.int";                 allow-update { none; };                 allow-query { me-white; grayteeth; };         };             zone "2.87.10.in-addr.arpa" {                 type master;                 file "zone10.rev";                 allow-update { none; };                 allow-query { me-white; grayteeth; };         }; };     view "external" {         match-clients { any; };         recursion no;             zone "krokodil.ru" {                 type master;                 file "direct-ru.ext";                 allow-update { none; };         };             zone "5.20.212.in-addr.arpa" {                 type master;                 file "zone212.rev";                 allow-update { none; };         }; };     named_enable="YES"     named_flags="-c /etc/namedb/named.conf -4 -u bind" named_chrootdir=""     named_flags="-4 -u bind"     # diff -ub dnswalk.old dnswalk --- dnswalk.old Fri May 12 18:47:16 2006 +++ dnswalk     Mon Apr 24 19:55:00 2006 @@ -93,6 +93,11 @@         }         @subdoms=undef;          foreach $rr (@zone) { + +# Inspired by Shelton to save zone file +           $rr->print; +# To here +              if ($rr->type eq "NS") {                 $subdom = $rr->name;                  $subdom =~ tr/A-Z/a-z/;     # whois -i freebsd.org     # whois -c ru samag.ru     # whois -r 212.20.5.0/24     # whois -r RNA1-RIPE   -----------------------------------------------------------------------------------------------------------------   Как увеличить безопасность процессов с помощью chroot и jail Василий Озеров   # ldd /bin/sh     #include #include #include   int main(void) {     char line[255]=""; /* Переменная для названия файла */       chdir("/");   /* Перемещаемся в корень */     printf("Enter filename to create: ");     scanf("%s", &line);       if((fopen(line,"w+") == NULL)) /* Создаем файл */     {       perror("Error");  /* Выводим сообщение об ошибке */       exit(1);          /* И выходим, если создать файл не удалось */     }       return 0; }     # gcc prog.c -o prog # ls -la prog     # ls -la /chr00t     # ./prog     # ls -la /chr00t     # rm -f /chr00t     # mkdir -p /usr/chroot/{lib,libexec}     # cp ./prog /usr/chroot/     # ldd /usr/chroot/prog     # cp /lib/libc.so.6 /usr/chroot/lib/     # cp /libexec/ld-elf.so.1 /usr/chroot/libexec/     # ls -la /chr00t   # ls -la /usr/chroot/chr00t     # chroot /usr/chroot/ /prog     # ls -al /usr/chroot/chr00t   # ls -la /chr00t     mkdir("tmp", 0755);    /* Создаем временную директорию */ dir_fd = open(".", O_RDONLY); /* Открываем текущую директорию */   chroot("tmp"); /* Меняем корневую директорию для процесса*/   fchdir(dir_fd); /* Частично выходим из chroot, поднимаясь на уровень вверх */ close(dir_fd); /* Закрываем дескриптор директории */   for(n = 0; n < 1024; n++) {       chdir(".."); /* Поднимаемся на уровень выше */ }   chroot("."); /* Меняем корневой каталог процесса на настоящий */     # ls -la /chr00t     # mkdir -p /usr/chroot/usr/{lib,libexec}     # gcc break_chroot.c -o /usr/chroot/break_chroot     # cp /usr/lib/libc.so.4 /usr/chroot/usr/lib/ # cp /usr/libexec/ld-elf.so.1 /usr/chroot/usr/libexec/     # chroot /usr/chroot/ /break_chroot     # ls -la /chr00t     # mkdir /usr/chroot/{bin,sbin,lib,libexec,usr} # mkdir /usr/chroot/usr/{bin,sbin,lib,libexec}     # cp /bin/* /usr/chroot/bin/ # cp /sbin/* /usr/chroot/sbin/ # cp /usr/sbin/* /usr/chroot/usr/sbin/ # cp /usr/bin/* /usr/chroot/usr/bin/     # cp -r /lib/* /usr/chroot/lib/ # cp /libexec/* /usr/chroot/libexec/ # cp -r /usr/lib/* /usr/chroot/usr/lib/ # cp -r /usr/libexec/* /usr/chroot/usr/libexec/     # chroot /usr/chroot/ /bin/sh     # ls -la   # pwd     satdevil# mkdir /usr/local/evil     satdevil# cd /usr/src satdevil# make world DESTDIR=/usr/local/evil     satdevil# make distribution DESTDIR=/usr/local/evil     // jail <путь_к_новому_корню> <команда>     satdevil# jail /usr/local/evil evil 172.16.0.199 /bin/tcsh     evil# touch /etc/fstab     evil# echo rpcbind_enable="NO" > /etc/rc.conf     evil# echo network_interfaces="" >> /etc/rc.conf     evil# echo sshd_enable="YES" >> /etc/rc.conf     evil# echo domain Unix > /etc/resolv.conf evil# echo nameserver 172.16.0.1 >> /etc/resolv.conf     evil# newaliases     evil# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime     evil# passwd     evil# pw useradd fr33man -s /bin/tcsh -m -d /home/fr33man/     evil# passwd fr33man     evil# exit     satdevil# ifconfig rl0 inet alias 172.16.0.199/32     satdevil# mount -t procfs proc /usr/local/evil/proc     // Включаем jail jail_enable="YES"   // Список «тюрьм», находящихся на данной машине. // Если тюрьм несколько, то перечисление их идет через пробел jail_list="evil"   // Запрещаем смену hostnam в jail jail_set_hostname_allow="NO"   // Разрешаем использовать процессам только домены // PF_LOCAL, PF_INET, PF_ROUTE jail_socket_unixiproute_only="YES"   // Далее идет описание конкретной «тюрьмы», в нашем случае это evil   // Задаем корневой каталог jail_evil_rootdir="/usr/local/evil/"   // Указываем имя запускаемой виртуальной машины jail_evil_hostname="evil.unix"   // Указываем IP-адрес виртуальной машины jail_evil_ip="172.16.0.199"   // Указываем, что именно запустить в «тюрьме». // Команда /bin/sh /etc/rc приведет к инициализации и запуску системы jail_evil_exec="/bin/sh /etc/rc"   // Разрешаем использование файлов устройств jail_evil_devfs_enable="YES"     satdevil# /etc/rc.d/jail start     $ ssh evil.unix -l fr33man   -----------------------------------------------------------------------------------------------------------------