Храним учетные записи VPN в связке RADIUS/MySQL Виталий Банковский mysql> create database vpn; mysql> grant all on vpn.* to vpn@'10.10.10.11' identified by 'PASSW905'; mysql> flush privileges; create table users ( username varchar(32), password varchar(64), contact varchar(80), role varchar(80), unique key username (username) ); mysql> insert into users(username,password) values('user1', encrypt('pass1')); mysql> insert into users(username,password) values('user2', encrypt('pass2')); tar -xzvf radius-1.5.tar.gz cd radius-1.5 ./configure –with-mysql make make install # Тип сервера interface mysql # Параметры сервера MySQL server 10.10.10.10 port 3306 login vpn password PASSW905 # Включить авторизацию MySQL doauth yes # Имя базы данных, где находится таблица «users» auth_db vpn # Запрос SQL, который используется для проверки аккредитации пользователя: auth_query SELECT password FROM users WHERE username='%u' #Client Name Key #---------------- ------------------- 10.10.10.12 our_password_key #!/bin/sh # chkconfig: 2345 55 25 # description: radius server PREFIX=/usr/local OPTS= test -x /usr/local/sbin/radiusd || exit 0 case "$1" in start) echo -n "Starting: radius" /usr/local/sbin/radiusd echo "." ;; stop) echo -n "Stopping service: radius" killall radiusd echo "." ;; restart) $0 stop sleep 2 $0 start ;; *) echo "Usage: /etc/init.d/radius ↵ {start|stop|restart}" >&2 exit 1 ;; esac exit 0 chkconfig raddb on aaa-server RADIUS protocol radius aaa-server RADIUS max-failed-attempts 3 aaa-server RADIUS deadtime 10 aaa-server RADIUS (inside) host 10.10.10.11 our_password_key timeout 5 ----------------------------------------------------------------------------------------------------------------- PowerShell: часто задаваемые вопросы Продолжение Василий Гусев PS> "Hello world!" PS> $w = "World" PS> "Hello " + $w + "!" PS> "Hello $w!" PS> $file = Get-Item C:\test.zip PS> "Размер файла $file составляет $file.Length байт" PS> "Размер файла $file составляет $($file.Length) байт" PS> "Размер: $([Math]::Round($file.Length / 1kb)) килобайт" PS> "Размер: {0:n3} мегабайт" -f ($file.Length / 1mb) PS> "{0}\{1:yyyy-MM-dd}.bak" -f $pwd, (Get-Date) PS> "`$pwd = $pwd" PS> "Первая строка`nВторая строка" PS> $hw = "Hello >> World!" >> PS> $SqlCommand = "BACKUP DATABASE [$Base] TO DISK = '$Path' WITH INIT" PS> $var = '$pwd = ' + "'$pwd'" PS> $var PS> 'Первая строка`nВторая строка' PS> 'Одинарная кавычка '' среди собратьев' PS> $MyCode = @' >> $Proc = Get-Process explorer >> $Message = 'Переменная $Proc содержит сведения о процессе >> например, в "$Proc.Path" содержится ' + "'$Path'." >> '@ >> PS> $MyCode PS> Get-EventLog -List | Measure-Object PS> Get-Process | Measure-Object -Property WS -Sum -Average PS> $Shares = Get-WmiObject Win32_Share PS> $shares.Count PS> (Get-WmiObject Win32_Share).count PS> (Get-Process | where {$_.path -like "c:\win*"}).count PS> Get-Help About_Signing PS> Set-Content -Path test.txt -Value "123" -Verbose PS> Get-Help Set-Content -Parameter Path PS> Set-Content test.txt "123" PS> Set-Content -Value "123" -Path test.txt PS> Get-Help Write-Host -Parameter ForegroundColor) PS> Write-Host test -f red -b blue PS> Write-Host test -fore red -back blue PS> Get-Command -n process PS> gp HKCU:\Software\Microsoft\Windows\CurrentVersion\Run PS> cd HKCU:\Software\Microsoft\Windows\CurrentVersion\Run PS> sp -Path . -Name "Моя утилита" -Value "c:\ myutil.exe" PS> gp . "Моя утилита" | Format-List PS> rp . "Моя утилита" Имя,Отчество,Фамилия Иван,Иванович,Иванов Пётр,Петрович,Петров Сидор,Сидорович,Сидоров PS> $fio = Import-Csv fio.csv PS> $fio[0] PS> $fio | foreach {$_.Фамилия} PS> trap {echo "Ошибка: $_"; break}; 1; 2/$null; 3 PS> trap {echo "Ошибка: $_"; continue}; 1; 2/$null; 3 trap {$_ | Export-Clixml Error.xml; stop} PS> $Err = Import-Clixml Error.xml PS> $Err PS> $Err.InvocationInfo ----------------------------------------------------------------------------------------------------------------- Инструменты миграции SharePoint на все случаи жизни Нелли Садретдинова smigrate -w http://server -f backup.fwp smigrate -r -w http://server -f backup.fwp stsadm.exe -o backup -url -filename [-overwrite] stsadm.exe -o backup -directory -backupmethod [-item ] [-percentage ] [-backupthreads ] [-showtree] [-quiet] stsadm -o preparetomove -contentDB stsadm -o deletecontentdb -url –databasename stsadm -o addcontentdb -url -databasename -databaseserver stsadm.exe -o export -url -filename [-overwrite] [-includeusersecurity] [-haltonwarning] [-haltonfatalerror] [-nologfile] [-versions <1-4>] [-cabsize (default: 25)] [-nofilecompression] [-quiet] stsadm.exe -o import -url -filename [-includeusersecurity] [-haltonwarning] [-haltonfatalerror] [-nologfile] [-updateversions <1-3>] [-nofilecompression] [-quiet] using Microsoft.SharePoint; using Microsoft.SharePoint.WebPartPages; using System.Xml; private static void makeXML(SPWeb web) { XmlDocument xml = new XmlDocument(); XmlElement xmlroot = xml.CreateElement("Data"); XmlElement elem_l = xml.CreateElement("Lists"); foreach (SPList list in web.Lists) { XmlElement listElem = xml.CreateElement("List"); ; listElem.SetAttribute("ID", list.ID.ToString().ToUpper()); listElem.SetAttribute("Title", list.Title); elem_l.AppendChild(listElem); } XmlElement elem_wp = xml.CreateElement("WebParts"); foreach (SPFile file in web.Files) { getWebParts(web, xml, file, ref elem_wp); } foreach (SPList list in web.Lists) { foreach (SPListItem item in list.Items) { if (item.File != null && item.File.Url.ToLowerInvariant().EndsWith(".aspx")) { getWebParts(web, xml, item.File, ref elem_wp); } } } xmlroot.AppendChild(elem_l); xmlroot.AppendChild(elem_wp); xml.AppendChild(xmlroot); //сохраняем xml-документ } private static void getWebParts (SPWeb web, XmlDocument xml, SPFile file, ref XmlElement elem) { SPLimitedWebPartManager wpColl; wpColl = web.GetLimitedWebPartManager(file.Url, System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared); foreach (WebPart wp in wpColl.WebParts) { XmlElement wpElem = xml.CreateElement("WebPart"); ; wpElem.SetAttribute("ID", wp.ID.ToString()); wpElem.SetAttribute("Title", wp.Title); wpElem.SetAttribute("Page", file.Url); elem.AppendChild(wpElem); } } -o gl-replacewebpartcontent -url -searchstring -replacestring -scope Web stsadm –o installfeature –filename stsadm –o activatefeature –filename -url ----------------------------------------------------------------------------------------------------------------- Дистрибутивный диск с FreeBSD собственной сборки Рашид Ачилов > cd ISO-IMAGES-i386/6.3/ > ls -la # ncftp ftp.freebsd.org # /usr/sbin/mtree -deU -f /etc/mtree/BSD.var.dist -p /var/tmp/image/var # du -s rescue # cd /resque && ls -il | awk '{print $1}' | sort | uniq ----------------------------------------------------------------------------------------------------------------- Клонирование разделов диска в FreeBSD Владимир Ляшко # df -h -t ufs # mount_smbfs //turbina/dump /mnt # dump -0uL -f /mnt/dump.root / # dump -0uL -f /mnt/dump.var /var # dump -0uL -f /mnt/dump.tmp /tmp # dump -0uL -f /mnt/dump.usr /usr # dump -0uaL -f /mnt/dump.var /dev/ad0s1e #fdisk –B ad0 # fsck /dev/ad0s1a # fsck /dev/ad0s1d # fsck /dev/ad0s1e # fsck /dev/ad0s1f # ifconfig rl0 inet 192.168.1.161/24 # mount_smbfs //turbina/dump /mnt/smb # mkdir /home/restore # mount -t ufs /dev/ad0s1a /home/restore # cd /home/restore # restore -vrf /mnt/smb/dump.root # mount -t ufs /dev/ad0s1d /home/restore/tmp # cd /home/restore/tmp # restore -vrf /mnt/smb/dump.tmp # mount -t ufs /dev/ad0s1d /home/restore/var # cd /home/restore/var # restore -vrf /mnt/smb/dump.var # mount -t ufs /dev/ad0s1d /home/restore/usr # cd /home/restore/usr # restore -vrf /mnt/smb/dump.usr # umount /home/restore/usr # umount /home/restore/var # umount /home/restore/tmp # umount /home/restore # umount /mnt/smb ----------------------------------------------------------------------------------------------------------------- Проект Asterisk Management System Николай Шестаков [billing] billing_enable=1 tables_in_memory=1 ; 0-используются обычные таблицы, 1- необходимые для работы ; биллинга таблицы копируются в память, что позволяет ; ускорить время выборки примерно на 30%. Необходимо помнить, ; что в этом случае требуется перезагрузить конфигурацию ; Asterisk после внесения изменений в тарифы или тарифные ; планы для того, чтобы эти изменения вошли в силу extensions.conf exten => 100,1,Set(CDR(accountcode)=test) ; Этот звонок будет соответствовать тарифному плану Test Plan exten => 200,1,Set(CDR(accountcode)=test-123) ; Этот тоже extensions.conf ; Для входящих звонков exten => _X.,1,Gosub(call-monitor,${EXTEN},1) exten => _X.,2,..... ; Для исходящих звонков exten => _X.,1,Gosub(call-monitor,${EXTEN},outgoing) exten => _X.,2,..... [call-monitor] exten => _X.,1,Set(CALLDIRECTION=i) exten => _X.,n,Goto(m1) exten => _X.,n(outgoing),Set(CALLDIRECTION=o) exten => _X.,n(m1),Set(TZONE=YEKT) exten => _X.,n,Set(RECCALLERID=${CALLERID(number)}) exten => _X.,n,GotoIf(${RECCALLERID}?m2) exten => _X.,n,Set(RECCALLERID=000) exten => _X.,n(m2),Set(RTIME=${STRFTIME(|${TZONE}|%F-%H:%M:%S)}) exten => _X.,n,Set(RECDIR=${RTIME:0:10}/${RTIME:11:2}) exten => _X.,n,Set(RECNAME=${RTIME}-${RECCALLERID}-${EXTEN}-${CALLDIRECTION}-${UNIQUEID}.WAV) exten => _X.,n,Set(TMPFILE=/tmp/monitor/${RECNAME}) exten => _X.,n,System(/bin/mkdir /var/spool/asterisk/monitor/${RECDIR} -p -m 0757) exten => _X.,n,MixMonitor(${TMPFILE}|b|/bin/mv ${TMPFILE} /var/spool/asterisk/monitor/${RECDIR}) exten => _X.,n,Return() ; Для входящих звонков exten => _X.,1,CMonitor(i) exten => _X.,2,..... ; Для исходящих звонков exten => _X.,1,CMonitor(o) exten => _X.,2,..... [cmonitor] use_rules=1 ; 0 - пишутся все звонки, 1- пишутся звонки, соответствующие заданным правилам tmp_dir=/tmp/monitor ; Директория, в которую пишется файл до момента окончания звонка tables_in_memory=1 ; Параметр имеет смысл, когда use_rules=1, ; 0 - используются обычные таблицы, ; 1- таблица с правилами записи копируется в память, что позволяет ускорить время выборки extensions.conf [fax-in] exten => _X.,1,Answer exten => _X.,n,Wait(1) exten => _X.,n,Gosub(set-fax-vars,${EXTEN},1) exten => _X.,n,Set(EMAILADDR=${DB(fax/${EXTEN})}) exten => _X.,n,GotoIf(${EMAILADDR}?getfax) exten => _X.,n,Set(EMAILADDR=default@address.com) exten => _X.,n(getfax),rxfax(${FAXFILE}) exten => h,1,System(/usr/local/bin/mail ${FAXFILE} ${EMAILADDR} ${DATETIME} ${CALLERID(number)} ${REMOTESTATIONID} ${FAXPAGES} ${FAXBITRATE} ${FAXRESOLUTION}) [set-fax-vars] exten => _X.,1,Set(TZONE=YEKT) exten => _X.,n,Set(FAXCALLERID=${CALLERID(number)}) exten => _X.,n,GotoIf(${FAXCALLERID}?m1) exten => _X.,n,Set(FAXCALLERID=000) exten => _X.,n(m1),Set(FTIME=${STRFTIME(,${TZONE},%F-%H:%M:%S)}) exten => _X.,n,Set(FAXDIR=${FTIME:0:10}/${FTIME:11:2}) exten => _X.,n,Set(FAXFILE=/var/spool/asterisk/faxes/${FAXDIR}/${FTIME}-${FAXCALLERID}-${EXTEN}-${UNIQUEID}.tif) exten => _X.,n,System(/bin/mkdir /var/spool/asterisk/faxes/${FAXDIR} -p -m 0757) exten => _X.,n,Return shell> chown -R nobody:nobody /var/lib/asterisk ----------------------------------------------------------------------------------------------------------------- Жучки в электронных письмах Крис Касперски http://nezumi.org.ru/souriz/temp/love.gif ----------------------------------------------------------------------------------------------------------------- Мультисервисная сеть: качество обслуживания и мультикаст Антон Кустов config ospf ipif System area 0.0.0.0 priority 1 hello_interval 10 dead_interval 40 config ospf ipif System authentication none metric 1 state enable active config ospf router_id 10.255.255.170 enable ospf sh ospf neighbour disable gvrp config gvrp 25-28 state disable ingress_checking enable acceptable_frame admit_all pvid 1 config vlan default delete 1-28 config vlan default advertisement enable create vlan 20-mik9jan-1 tag 20 config vlan 20-mik9jan-1 add tagged 26 config vlan 20-mik9jan-1 advertisement disable enable igmp_snooping config igmp_snooping all state enable config igmp all state enable enable pim config pim all state enable create pim crp group 224.0.0.0/4 rp System DES-3800:admin#show igmp DES-3800:admin#show pim neighbor DES-3800:admin#sh igmp group DES-3800:admin#sh ipmc cache // Создаем правило create access_profile ip vlan profile_id 3 config access_profile profile_id 3 add access_id 1 ip vlan 3-manage port 1 permit priority 7 replace_priority // для 3-manage vlan задаем 7 приоритет на 1 порту ... config access_profile profile_id 3 add access_id 1 ip vlan 3-manage port 28 permit priority 7 replace_priority create access_profile ip source_ip_mask 255.255.255.255 profile_id 4 config access_profile profile_id 4 add access_id 29 ip source_ip 192.168.149.1 port 1 permit priority 6 replace_priority ... config access_profile profile_id 4 add access_id 29 ip source_ip 192.168.149.1 port 28 permit priority 6 replace_priority create access_profile ip destination_ip_mask 240.0.0.0 profile_id 6 config access_profile profile_id 6 add access_id 1 ip destination_ip 224.0.0.0 port 1 permit priority 5 replace_priority ... config access_profile profile_id 6 add access_id 1 ip destination_ip 224.0.0.0 port 28 permit priority 5 replace_priority config scheduling 0 max_packet 1 config scheduling 1 max_packet 2 config scheduling 2 max_packet 3 config scheduling 3 max_packet 4 config scheduling 4 max_packet 5 config scheduling 5 max_packet 6 config scheduling 6 max_packet 7 config scheduling 7 max_packet 8 ----------------------------------------------------------------------------------------------------------------- По следам Sun Tech Days: Java FX Кирилл Сухов // Используется библиотека Swing import javax.swing.*; public class HelloWorldSwing { public static void main(String[] args) { JFrame frame = new JFrame("HelloWorldSwing"); final JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } } // Используется JavaFX Script import javafx.ui.*; Frame { title: "Hello World JavaFX" width: 200 height: 50 content: Label { text: "Hello World" } visible: true } ----------------------------------------------------------------------------------------------------------------- XML native-базы данных на примере Sedna Александр Календарев >se_gov >se_cdb <имя БД > >se_sm auction >se_term <имя БД> LOAD <имя документа> <путь к XML-файлу данных> >se_term -file <имя БД > >se_stop /var/lib/sedna 1500 5050 5151 auction 1600 10 100 10 SYSTEM MANAGER SYSTEM DBA PUBLIC CREATE USER "user-name" WITH PASSWORD "user-password" akalend 12345 SYSTEM DROP USER "user-name" ALTER USER "user-name" WITH PASSWORD "new-password" CREATE ROLE "role-name" GRANT "privilege" | ALL ON [DOCUMENT|COLLECTION] "database-object-name" TO "user-name|role-name" | PUBLIC GRANT ALL ON "auction" TO "akalend" ALL auction SYSTEM REVOKE "privilege" | ALL ON [DOCUMENT|COLLECTION] "database-object-name" FROM "user-name|role-name" | PUBLIC -----------------------------------------------------------------------------------------------------------------