Кто победит в битве браузеров Владимир Брюков Y= -0,0028t^2 - 0,2765t +89,4501 (1) Y= -0,0195t(05)^2 +1,614t(05) +13,604 (2) Y= 0,0212t(08)^2 +0,0973t(08) +2,762 (3) EXPL= -0,862F(IRE)-0,755C(HR) -0,220*t(08) +88,1 (4) ----------------------------------------------------------------------------------------------------------------- Microsoft Exchange 2010. Контроль за действиями администратора Алексей Богомолов Get-CmdletExtentionAgent | ft Name, Priority, Enabled Set-AdminAuditLogConfig –AdminAuditLogEnabled $True Get-AdminAuditLogConfig | fl Set-AdminAuditLogConfig -TestCmdletLoggingEnabled $True Set-AdminAuditLogConfig -AdminAuditLogCmdlets "*-Mailbox" Set-AdminAuditLogConfig –AdminAuditLogMailbox "audit@test.local" Set-AdminAuditLogConfig –AdminAuditLogLimit 180.00:00:00 Write-AdminAuditLog –Comment "Любой текстовый комментарий длиной до 500 символов" Search-AdminAuditLog –UserIds Administrator -IsSuccess $True | FT RunDate, Caller, CmdletName Search-AdminAuditLog -Cmdlets New-Mailbox -StartDate 01/01/2011 -EndDate 01/30/2011 -IsSuccess $true Search-AdminAuditLog | Sort CmdletName | Group CmdletName | FT Count, Name –AutoSize ----------------------------------------------------------------------------------------------------------------- Построение корпоративных VPN. Использование IPSec для связи с аппаратным роутером Рашид Ачилов { exchange_mode main,aggressive; doi ipsec_doi; situation identity_only; nonce_size 16; lifetime time 24 hour; initial_contact on; proposal_check strict; generate_policy unique; ike_frag on; passive on; dpd_delay 0; script "pam_linkup.sh" phase1_up; script "linkdown.sh" phase1_down; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method xauth_psk_server; dh_group 1; lifetime time 28800 sec; } } { exchange_mode main; my_identifier address 212.20.5.1; peers_identifier address 180.80.80.1; verify_identifier on; script "linkup.sh" phase1_up; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 1; lifetime time 28800 sec; } } { pfs_group 1; lifetime time 3600 sec; encryption_algorithm 3des; authentication_algorithm hmac_md5; compression_algorithm deflate; } PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin config="/usr/local/etc/racoon/extnodes.conf" if [ -e $config ]; then . $config fi if [ ! -e $connected_spool ]; then mkdir $connected_spool chmod 0700 $connected_spool fi connfile="$connected_spool/$REMOTE_ADDR" spindownfile="$connected_spool/$REMOTE_ADDR.spindown" spinupfile="$connected_spool/$REMOTE_ADDR.spinup" <внешний_адрес> <внутренний_адрес> <внутренняя_подсеть> static 170.70.70.1 10.87.11.1 10.87.11.0/24 static 180.80.80.1 10.87.10.1 10.87.10.0/24 gate11 dymanic 10.87.11.1 10.87.11.0/24 gate10 dynamic 10.87.10.1 10.87.10.0/24 # Наш внешний сетевой адрес (ESG) esg_address="87.103.172.93" # Наш внутренний сетевой адрес (RNG) rng_address="10.38.5.254" # Наша подсеть и маска в формате CIDR int_network="10.38.5.0/24" # Файл со списком узлов extnodes_file="/usr/local/etc/racoon/extnodes" # Каталог для сохранения данных о подключившихся клиентах connected_spool="/var/spool/racoon" # Имя файла журнала logfile="/var/log/pam_linkup" # Параметры для вывода в журнал в виде facility.priority (см. man syslog.conf) log_priority="local1.info" # Если рабочий каталог racoon еще не существует, создаем его if [ ! -e $connected_spool ]; then mkdir $connected_spool chmod 0700 $connected_spool else while [ -e $spinupfile ] do lockupprintdate=`ls -l -D "%T %d-%m-%Y" $spinupfile` lockupcheckdate=`ls -l -D "%s" $spinupfile` nowcheckdate=`date "+%s"` diffdate=$(($nowcheckdate-$lockupcheckdate)) if [ $diffdate -le 300 ]; then exit fi set $lockupprintdate sleep 1 done while [ -e $spindownfile ] do lockdownprintdate=`ls -l -D "%T %d-%m-%Y" $spinupfile` set $lockdownprintdate sleep 1 done fi touch $spinupfile devline=`cat $extnodes_file | grep $REMOTE_ADDR` if [ ${#devline} -eq 0 ]; then rm -f $spinupfile exit 113 else set $devline _lng=$3 _lns=$4 fi ifconfig gif create > $connfile _iface=`cat $connfile` ifconfig $_iface tunnel $esg_address $REMOTE_ADDR ifconfig $_iface inet $rng_address $_lng netmask 255.255.255.255 mtu 1450 route add -net $_lns $_lng echo $_lns >> $connfile touch $spindownfile if [ -e $spinupfile ]; then rm -f $spinupfile fi cmdfile=`mktemp $connected_spool/$REMOTE_ADDR.XXXXXX` echo "deleteall $esg_address $REMOTE_ADDR esp;" >> $cmdfile echo "deleteall $REMOTE_ADDR $esg_address esp;" >> $cmdfile setkey -f $cmdfile if [ -e $connfile ]; then _iface=`head -n 1 $connfile` _lns=`tail -n +2 $connfile` route delete $_lns ifconfig $_iface down ifconfig $_iface destroy rm -f $connected_spool/$REMOTE_ADDR fi rm -f $spindownfile rm -f $cmdfile auth required pam_permit.so account required pam_exec.so /usr/local/etc/racoon/pam_linkup.sh --- linkup.sh 2011-02-15 23:33:03.000000000 +0600 +++ pam_linkup.sh 2011-02-17 23:15:30.000000000 +0600 @@ -33,13 +33,13 @@ if [ -e $config ]; then . $config fi -connfile="$connected_spool/$REMOTE_ADDR" -spinupfile="$connected_spool/$REMOTE_ADDR.spinup" -spindownfile="$connected_spool/$REMOTE_ADDR.spindown" +connfile="$connected_spool/$PAM_RHOST" +spinupfile="$connected_spool/$PAM_RHOST.spinup" +spindownfile="$connected_spool/$PAM_RHOST.spindown" if [ ! -e $connected_spool ]; then @@ -68,13 +68,13 @@ touch $spinupfile -devline=`cat $extnodes_file | grep $REMOTE_ADDR` +devline=`cat $extnodes_file | grep $PAM_USER` if [ ${#devline} -eq 0 ]; then @@ -89,7 +89,7 @@ _iface=`cat $connfile` -ifconfig $_iface tunnel $esg_address $REMOTE_ADDR +ifconfig $_iface tunnel $esg_address $PAM_RHOST status=$? ----------------------------------------------------------------------------------------------------------------- Безопасный Интернет с помощью Mozilla Firefox Игорь Штомпель nginx/0.6.39 ----------------------------------------------------------------------------------------------------------------- Система мониторинга Zenoss Core Сергей Яремчук deb http://dev.zenoss.org/deb main stable 30 17 * * * /mnt/sdb1/datadir.tar.gz /home/user/datadir $ sudo cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak $ sudo snmpconf $ sudo cp snmpd.conf /etc/snmp/ $ sudo service snmpd restart $ snmpwalk -v2c -c public 127.0.0.1 system $ chmod +x zenoss-stack-3.0.3-linux-x64.bin $ sudo ./zenoss-stack-3.0.3-linux-x64.bin $ sudo dpkg -i ./zenoss-stack-3.0.3_x64.deb $ sudo apt-get update $ sudo apt-get install zenoss-stack # environment variable export OS_USERNAME="zenoss" export OS_UID="1001" export ZENHOME="/usr/local/zenoss/zenoss" export MYSQLHOST="localhost" export MYSQLPORT="3307" export MYSQLROOTUSER="root" export MYSQLROOTPASSWD="myslq_passwd" export MYSQLUSER="zenoss" export MYSQLPASS="zenoss" $ sudo nano /etc/sysctl.conf net.core.rmem_default=1048576 net.core.rmem_max=1048576 net.core.wmem_default=1048576 net.core.wmem_max=1048576 $ netstat -ant | grep 8080 $ sudo service zenoss-stack start $ sudo update-rc.d zenoss-stack enable S msgid "Reports" msgstr "Отчеты" msgfmt -o zenoss.mo zenoss.po ----------------------------------------------------------------------------------------------------------------- Атаки из сети Интернет. Внедряем IDS Snort для защиты корпоративной сети Юрий Денисов inspection type preprocessor dns: ports { 53 } enable_rdata_overflow enable_obsolete_types enable_experimental_types preprocessor SMTP: ports { 25 } inspection_type stateful normalize cmds normalize_cmds { EXPN VRFY RCPT } alt_max_command_line_len 260 { MAIL } alt_max_command_line_len 300 { RCPT } alt_max_command_line_len 500 { HELP HELO ETRN } alt_max_command_line_len 255 { EXPN VRFY } profile preprocessor http_inspect: global iis_unicode_map unicode.map 1252 detect_anomalous_servers preprocessor http_inspect_server: server 1.2.3.4 profile apache ports { 80 } ----------------------------------------------------------------------------------------------------------------- На языке PowerShell. Сценарий регистрации пользователей в сети. Часть 3 Иван Коробко Листинг 1. Функция замены переменных на значения Function Freplace{ # Элементы массива $ArFrom – заменяемые переменные $ArFrom = ('$fio'), ('$domain'), ('$department') # Элементы массива $ArTo – подставляемые значения $ArTo = $fio, $sdomain, $department ForEach ($element in $input) { $temp= New-Object System.Text.StringBuilder For ($i=0; $i –lt ($ArFrom.length); $i++) { if ($element –like ("*"+$ArFrom[$i]+"*")) { $temp=$element $element=$temp.Replace($ArFrom[$i] ,$ArTo[$i]) } } } $element # Возвращаемое значение } $fio = 'Иванов Петр Иванович' $sdomain = 'island' $department = 'Бухгалтерия' $PathToFolder = '\\$domain\$department\$FIO\Персональные данные' $PathToFolder | FReplace $ЗНАЧЕНИЕ=(Get-ChildItem ENV:ПЕРЕМЕННАЯ).Value $ЗНАЧЕНИЕ=(DIR ENV:ПЕРЕМЕННАЯ).Value. Листинг 2. Шаблон поиска объектов в каталоге Active Directory # Определение имени домена в формате RDN $root=[ADSI]'LDAP://RootDSE' $domain = $root.defaultNamingContext # Поиск пользователя по login (поле sAMAccountName) $obj = New-Object DirectoryServices.Directorysearcher("LDAP://"+$domain) $obj.Filter="(&(АТРИБУТ1=ЗНАЧЕНИЕ1)( АТРИБУТ1=ЗНАЧЕНИЕ1)(…))" $Searcher=$Obj.FindOne() # Чтение значение нужного поля $Result=$Searcher.GetDirectoryEntry() $СЧИТАННОЕ_ЗНАЧЕНИE=$Result.Properties.Item("СЧИТЫВАЕМОЕ_СВОЙСТВО").Value Листинг 3. Определение ФИО пользователя # Определение имени (login) текущего пользователя # переменные окружения set $UserLogin=(dir env:username).value # Определение имени домена в формате RDN $root=[ADSI]'LDAP://RootDSE' # Поиск пользователя по login (поле sAMAccountName) $domain = $root.defaultNamingContext $objUser = New-Object DirectoryServices.Directorysearcher("LDAP://"+$domain) $objUser.filter="(&(objectclass=person)(samaccountname="+$UserLogin+"))" $searchUser=$objUser.findone() # Чтение значение нужного поля $ResultUser=$searchUser.getdirectoryentry() $FIO=$ResultUser.properties.item("description").value Листинг 4. Подключение сетевого диска с помощью команды net use … $ConnectPath = $PathToFolder | FReplace $ConnectLetter = $ObjGroup.Properties.Item("description").value Net Use $ConnectLetter":" $ConnectPath Листинг 5. Подключение сетевого диска с помощью COM-объекта … $ConnectPath = $PathToFolder | FReplace $ConnectLetter = $ObjGroup.Properties.Item("description").value $obj = New-Object -ComObject Wscript.Network $obj.MapNetworkDrive($t+":", $path) Листинг 6. Подключение сетевого диска с помощью API-функции … $ConnectPath = ….. $ConnectLetter = $ObjGroup.Properties.Item("description").value # Подключение к компилятору VB.NET $provider = New-Object Microsoft.VisualBasic.VBCodeProvider $params = New-Object System.CodeDom.Compiler.CompilerParameters $params.GenerateInMemory = $True $refs = "System.dll","Microsoft.VisualBasic.dll" $params.ReferencedAssemblies.AddRange($refs) # Листинг API-функции на VB.NET $txtCode = @" Class ConnectNetDisk Public Structure NETRESOURCE Public dwScope As Integer Public dwType As Integer Public dwDisplayType As Integer Public dwUsage As Integer Public LocalName As String Public RemoteName As String Public Comment As String Public Provider As String End Structure Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (ByRef netResource As NETRESOURCE, ByVal password As String, ByVal Username As String, ByVal Flag As Integer) As Integer Function ConnectDisk(a,b) Dim myNetResource As New NETRESOURCE myNetResource.dwScope = 2 'RESOURCE_GLOBALNET myNetResource.dwType = 1 'RESOURCETYPE_DISK myNetResource.dwDisplayType = 3 'RESOURCEDISPLAYTYPE_SHARE myNetResource.dwUsage = 1 'RESOURCEUSAGE_CONNECTABLE myNetResource.LocalName = a myNetResource.RemoteName = b myNetResource.Provider = Nothing Dim ret As Integer = WNetAddConnection2(myNetResource, Nothing, Nothing, 0) ConnectDisk = cstr(ret) + " "+a + " " + b End function End Class "@ # Вызов компилятора $results = $provider.CompileAssemblyFromSource($params, $txtCode) $mAssembly = $results.CompiledAssembly # Вызов VB.NET-функции, использующей API-функцию для подключения диска $i = $mAssembly.CreateInstance("ConnectNetDisk") $result = $i.ConnectDisk([string]($ $ConnectLetter+":"),[string]($ConnectPath)) $result ----------------------------------------------------------------------------------------------------------------- JavaScript глазами PHP-программиста Антон Околелов function Hello() { alert('hello'); } var Hello = function() { alert('hello'); } (function() { alert('hello'); }) (); (function($) { // Здесь могут создаваться переменные, но снаружи они будут не видны })(jQuery); function outer() { var v = 5; function inner() { alert(v); } v = 6; return inner; } var innertest = outer(); innertest(); function changeColorInSecond(elem){ setTimeout(function(){ elem.style.color = "#00ff00"; }, 1000); } x = 5; window.x = 5; function Hello() { this.myprop = 5; } var obj = new Hello; var obj = {myprop: 5, mymethod: function(){alert(‘ok’}}; obj.x = 5; obj.mymethod = function() {} var obj = {}; var obj = new Object; var x = 5; Hello.myvar = 5; myfunc.call(obj, arg1, arg2); myfunc.apply(obj, [arg1, arg2]); function Person() { } Person.prototype = { name: 'Default', sayName: function(){ alert('My name is ' + this.name); } } //Теперь можно делать так var john = new Person(); john.sayName(); // Выведется «My name is Default» john.name = 'John'; john.sayName(); // My name is John Person.prototype.sayName = function(){ alert('Hello! My name is ' + this.name); } john.sayName(); // Hello! My name is John function Person(name){ this.name = name; } Person.prototype.getName = function(){ return this.name; } Person.prototype.averageSpeed = 5; function Man(name){ this.name = name; } // Наследуем Man.prototype = new Person(''); // Переопределяем метод Man.prototype.getName = function(){ return "Mister " + this.name; } // Добавляем новый метод Man.prototype.Hunt = function(){ alert('Hunting....'); } Man.prototype = Person.prototype; function extend(Child, Parent) { var F = function() { } F.prototype = Parent.prototype Child.prototype = new F() Child.prototype.constructor = Child Child.superclass = Parent.prototype } function Woman(name) { // Наследование конструктора, если нужно Person.call(this, name); } // Наследование всего остального extend(Woman, Person); Woman.prototype.getName = function(){ // Переопределение return "missis " + this.name; } // Добавляем новое свойство Women.prototype.likeShopping = true; $.extend(Women.prototype, { getName: function() { … }, likeShopping: true, ... }); ----------------------------------------------------------------------------------------------------------------- Стек: скрытые таланты и возможности Алексей Вторников int a = 5, b = 10; int c = a + b; 17 5 → (DUP) 17 5 5 → (+) 17 10 → (SWAP) 10 17 → (DUP) 10 17 17 → (+) 10 34 → (+) 44 ----------------------------------------------------------------------------------------------------------------- Админы всякие нужны! Константин Кондаков dd if=/var/cfengine/ppkeys/localhost.pub | ssh -l root -i /root/svnroot 67.88.88.88 dd of=/var/cfengine/ppkeys/ root-`cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep IP | awk -F= '{print $2}'`.pub ----------------------------------------------------------------------------------------------------------------- Резервное копирование в Linux. Консольные инструменты на страже данных Игорь Штомпель $ sudo dpkg -i partimage_0.6.7-2ubuntu2_i386.deb tar -jxvf partimage-0.6.9.tar.bz2 ./configure make $ sudo make install $ sudo partimage Vst = Vs + (Md*Td) Td = (Vst-Vs)/Md tar -zcf /mnt/sdb1/datadir.tar.gz /home/user/datadir tar -ztvpf datadir.tar.gz tar -ztvpf gdata-1.3.0.tar.gz | more tar -ztvpf gdata-1.3.0.tar.gz > arch01 tar -zxf etc.tar.gz $ sudo tar -cvfz etc.0.tar.gz -g etc.snar /etc $ sudo tar -cvfz etc.1.tar.gz -g etc.snar /etc $ sudo tar zxvf etc.1.tar.gz dd if=/dev/sda of=boot.mbr bs=512 count=1 sudo dd if=/dev/sda | bzip2 > /media/sdb1/serverf.tar.bz $ sudo partimage /media/***/sda4.gz $ sudo partimage 1. SHELL=/bin/sh 2. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 3. 4. # m h dom mon dow user command 5. 17 * * * * root run-parts /etc/cron.hourly 6. 25 6 * * * root run-parts /etc/cron.daily 7. 47 6 * * 7 root run-parts /etc/cron.weekly 8. 52 6 1 * * root run-parts /etc/cron.monthly crontab -e 30 17 * * * /mnt/sdb1/datadir.tar.gz /home/user/datadir $ sudo restart cron -----------------------------------------------------------------------------------------------------------------