Учет оборудования с OCS Inventory NG и GLPI Сергей Яремчук $ sudo apt-cache search ocsinventory $ sudo apt-cache show ocsinventory-server | grep -i version $ sudo apt-cache show ocsinventory-agent | grep -i version $ sudo apt-cache depends ocsinventory-server $ sudo apt-get install mysql-server $ sudo apt-get build-dep ocsinventory-server $ sudo apt-get install libapache2-mod-perl2 libdbi-perl libapache-dbi-perl libdbd-mysql-perl libsoap-lite-perl libxml-simple-perl libnet-ip-perl libcompress-zlib-perl php5-gd $ tar xzfv OCSNG_UNIX_SERVER-1.02.tar.gz $ cd ./OCSNG_UNIX_SERVER-1.02/ $ sudo ./setup.sh $ sudo cpan -i XML::Entities $ cat ocsinventory-reports.conf | grep -i alias # Alias used to put Administration Server static page (typically PHP) outside Alias /ocsreports /usr/share/ocsinventory-reports/ocsreports # Alias to put Deployement package files outside Apache document root directory Alias /download /var/lib/ocsinventory-reports/download $ cat /etc/logrotate.d/ocsinventory-server # Rotate OCS Inventory NG Communication server logs daily # Save 7 days old logs in compressed mode /var/log/ocsinventory-server/*.log { daily rotate 7 compress missingok } php_value post_max_size 10m php_value upload_max_filesize 10m $ mysql -uroot -prootsecret mysql> UPDATE mysql.user SET Password = PASSWORD('ocspasswd') WHERE User = 'ocs'; mysql> FLUSH PRIVILEGES; mysql> exit $_SESSION["PSWD_BASE"]="ocspasswd" PerlSetVar OCS_DB_PWD ocspasswd $ file russian.txt $ file english.txt $ head -n 1 russian.txt $ sudo chown root:www-data russian.txt // 0 For non utf8 database, 1 for utf8 define("UTF8_DEGREE", 1 ); echo "$td3".htmlentities(textDecode($item->PUBLISHER))." $td3".htmlentities(textDecode($item->NAME))." $td3".textDecode($item->VERSION)." $td3".(htmlentities(textDecode($item->COMMENTS))? ?htmlentities(textDecode($item->COMMENTS)): "N/A")." "; echo "$td3".textDecode($item->PUBLISHER)." $td3".textDecode($item->NAME)." $td3".textDecode($item->VERSION)." $td3".(htmlentities(textDecode($item->COMMENTS))? textDecode($item->COMMENTS):"N/A")." "; $ sudo apt-get install libcompress-zlib-perl libnet-ip-perl libnet-ssleay-perl libwww-perl libxml-simple-perl po-debconf ucf dmidecode pciutils $ tar xzvf OCSNG_UNIX_AGENT-1.02.tar.gz $ cd Ocsinventory-Agent-1.0.1 $ perl Makefile.PL $ make $ sudo make install $ cat /var/lib/ocsinventory-agent/http\:__localhost_ocsinventory/ocsinv.adm TAG Ubuntu $ ocsinventory-agent -l /tmp –debug --server http://localhost/ocsinventory $ dmesg | grep -i processor Miscellaneous=/SERVER:192.168.0.10 /PNUM:80 /DEBUG > "C:\Program Files\OCS Inventory Agent\OCSInventory.exe" /SERVER:ocsng_server /PNUM:80 /NOW $ ls /var/lib/ocsinventory-reports/download/ $ ls 1241722723 $ sudo apt-cache search glpi $ sudo apt-cache show glpi | grep -i version $ sudo tar xzvf glpi-0.71.5.tar.gz -C /var/www $ cd /var/www/glpi $ sudo chown www-data:www-data config files files/* inc $ grep -i memory_limit /etc/php5/apache2/php.ini memory_limit = 128M $ sudo crontab -u www-data -e */5 * * * * /usr/bin/php5 /var/www/glpi/front/cron.php &>/dev/null $LANG["setup"][18]="Имя пользователя"; $ sudo perl -p -i -e 's/utf8_decode/utf8_decode_cyr/g' export.function.php inc/export.function.php: function utf8_decode_cyr($value){ return iconv("UTF-8","Windows-1251",$value); } $ cat export.function.php | grep -i selectFont $pdf->selectFont(GLPI_ROOT."/lib/ezpdf/fonts/Helvetica.afm"); $ sudo apt-get install ttf2pt1 $ ttf2pt1 -l cyrillic -A Helvetica.ttf Helvetica $ sudo cp -v Helvetica* /var/www/glpi/lib/ezpdf/fonts/ ----------------------------------------------------------------------------------------------------------------- Мониторинг Cisco IDS/IPS на примере модуля IDSM2 c помощью MRTG Андрей Дугин #apt-get install mrtg sensor1#configure terminal sensor1(config)#service notification sensor1(config-not)#enable-set-get true sensor1(config-not)#read-only-community DlY@_$en$ora sensor1(config-not)#read-write-community Dly@_@dm1n@_$en$ora sensor1(config-not)#exit sensor1(config)#exit # cfgmaker read-only-community@sensor.address > /etc/mrtg.cfg # cfgmaker --no-down read-only-community@sensor.address > /etc/mrtg.cfg # chmod 640 /etc/mrtg.cfg Options[_]: growright, bits MaxBytes[sensor1_5]: 125000000 Max Speed: 125.0 MBytes/s # Created by # /usr/bin/cfgmaker DlY@_$en$ora@sensor1 ### Global Config Options # for UNIX # WorkDir: /home/http/mrtg # for Debian WorkDir: /var/www/mrtg # or for NT # WorkDir: c:\mrtgdata ### Global Defaults # to get bits instead of bytes and graphs growing to the right Options[_]: growright, bits EnableIPv6: no ######################################################### # System: sensor1 # Description: Linux sensor1 2.4.30-IDS-smp-bigphys #2 SMP # Sat Jul 12 04:12:55 UTC 2008 i686 # Contact: dugin # Location: sensor1 ######################################################### ### Interface 2 >> Descr: 'ge0_7' | Name: 'ge0_7' | Ip: | Eth: ### # Target[sensor1_2]: 2:DlY@_$en$ora@sensor1: SetEnv[sensor1_2]: MRTG_INT_IP="" MRTG_INT_DESCR="ge0_7" MaxBytes[sensor1_2]: 125000000 Title[sensor1_2]: Traffic Analysis for SPAN -- sensor1 PageTop[sensor1_2]:

Traffic Analysis for SPAN -- sensor1

System: sensor1 in sensor1
Maintainer: dugin
Description: ge0_7
ifType: ethernetCsmacd (6)
ifName: ge0_7
Max Speed: 125.0 MBytes/s
### Interface 5 >> Descr: 'ge0_2' | Name: 'ge0_2' | Ip: | Eth: '00-03-e4-72-38-0c' ### Target[sensor1_5]: 5:DlY@_$en$ora@sensor1: SetEnv[sensor1_5]: MRTG_INT_IP="" MRTG_INT_DESCR="ge0_2" MaxBytes[sensor1_5]: 125000000 Title[sensor1_5]: Traffic Analysis for MGMT -- sensor1 PageTop[sensor1_5]:

Traffic Analysis for MGMT -- sensor1

System: sensor1 in sensor1
Maintainer: dugin
Description: ge0_2
ifType: ethernetCsmacd (6)
ifName: ge0_2
Max Speed: 125.0 MBytes/s
# cfgmaker --no-down new_sensor_ro_community@new_sensor_address >> /etc/mrtg.cfg # indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html # for Debian WorkDir: /var/www/mrtg sensor1# packet display gigabitEthernet0/7 sensor1# reset ----------------------------------------------------------------------------------------------------------------- Настраиваем хранение логов в базе данных MySQL Сергей Крутилин #mkdir /usr/Distr # cd /usr/Distr/ #wget http://www.rsyslog.com/Downloads-req-viewsdownload-sid-1.phtml # tar -zxf rsyslog-3.20.5 #cd rsyslog-3.20.5 ./configure CFLAGS="-I/usr/local/include/" LDFLAGS="-L/usr/local/lib" --enable-mysql #make #make install # /usr/local/bin/mysql --user=root --password=password < /usr/Distr/rsyslog-3.20.5/plugins/ommysql/createDB.sql # /usr/local/bin/mysql --user=root --password=password mysql>create user 'samaglog'@'localhost' identified by 'samagpassword'; mysql>GRANT ALL PRIVILEGES ON Syslog.* TO 'samaglog'@'localhost'; mysql>quit; $ModLoad ommysql.so *.* >servername,dbname,user,password rsyslogd -c3 -4 -f /etc/rsyslog.conf # mkdir /var/www/samaglogs/ && cd /var/www/samaglogs/ # wget http://www.phplogcon.org/Downloads-req-getit-lid-54.phtml # tar -zxf phplogcon-2.6.2.tar.gz # cp -R phplogcon-2.6.2/src/* . # rm -r phplogcon* # touch /var/www/samaglogs/config.php # chmod 666 /var/www/samaglogs/config.php $CFG['Sources']['Source1']['DBTableName'] = 'SystemEvents'; CREATE DATABASE Maillog; USE Maillog; # /usr/local/bin/mysql --user=root --password=password < /usr/Distr/rsyslog-3.20.5/plugins/ommysql/createDB.sql # /usr/local/bin/mysql --user=root --password=password mysql>GRANT ALL PRIVILEGES ON Maillog.* TO 'samaglog'@'localhost'; mysql>quit; mail.* >127.0.0.1,maillog,samaglog,samagpassword rsyslogd -c3 -4 -f /etc/ rsyslogmail.conf -i /var/run/samag.pid $CFG['Sources']['Source1']['DBName'] = 'maillog'; Subsystem sftp /usr/libexec/sftp-server kill -HUP $(cat /var/run/sshd.pid) ----------------------------------------------------------------------------------------------------------------- bugtraq, стр. 29 http://[host]/dig.php?ns=||COMMAND HERE||&host=mortal-team.net&query_type=NS&status=digging ----------------------------------------------------------------------------------------------------------------- Делегируем права на перемещение учетных записей пользователей в Active Directory Часть 3. Реализуем необходимые операции Вадим Андросов function delegateOU(ouPath, userPath) dim trustee, sec, acl, ace, ou, user, i Set ou = getObject(ouPath) Set user = getObject(userPath) Set sec = ou.Get("ntSecurityDescriptor") Set acl = sec.DiscretionaryAcl trustee = info.domainShortName & "\" & user.samAccountName for i = 0 to UBound(delegationClasses) Set ace = createAcceptAce(ADS_RIGHT_DS_CREATE_CHILD Or ADS_RIGHT_DS_DELETE_CHILD, delegationClasses(i), ADS_FLAG_OBJECT_TYPE_PRESENT, Trustee) acl.AddAce ace Set ace = createAcceptAce(FULL_CONTROL , delegationClasses(i), ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT, Trustee) acl.AddAce ace next sec.DiscretionaryAcl = acl ou.Put "ntSecurityDescriptor", Array(sec) ou.SetInfo makeManager user end function function createAcceptAce(accessMask, classGUID, flag, trustee) set createAcceptAce = CreateObject("AccessControlEntry") createAcceptAce.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT createAcceptAce.accessMask = accessMask select case flag case ADS_FLAG_OBJECT_TYPE_PRESENT: createAcceptAce.ObjectType = classGUID createAcceptAce.AceFlags = ADS_ACEFLAG_INHERIT_ACE case ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT: createAcceptAce.InheritedObjectType = classGUID createAcceptAce.AceFlags = ADS_ACEFLAG_INHERIT_ACE + ADS_ACEFLAG_INHERIT_ONLY_ACE end select createAcceptAce.Flags = flag createAcceptAce.Trustee = trustee end function Листинг 1. Отмена делегирования управления организационной единицей function undelegateOU(ouPath, userPath) dim ou, user, i set ou = getObject(ouPath) set user = getObject(userPath) for i = 0 to UBound(delegationClasses) undelegate ou, user, FULL_CONTROL , delegationClasses(i), true undelegate ou, user, ADS_RIGHT_DS_DELETE_CHILD Or ADS_RIGHT_DS_CREATE_CHILD, delegationClasses(i), false next makeNotManager user end function Листинг 2. Удаление из ACL записей, позволяющих управлять организационной единицей function undelegate(ou, user, oper, targetClass, isInherited) Dim sec, acl, ace Set sec = ou.Get("ntSecurityDescriptor") Set acl = sec.DiscretionaryAcl For Each ace In acl if shouldBeDeleted(user, ace, oper, targetClass, isInherited) then acl.RemoveAce ace end if Next sec.DiscretionaryAcl = acl ou.Put "ntSecurityDescriptor", Array(sec) ou.SetInfo end function Листинг 3. Требуется ли удалять запись ACL для отмены делегирования function shouldBeDeleted(user, ace, oper, targetClass, isInherited) shouldBeDeleted = false if ace.trustee <> (info.domainShortName & "\" & user.samAccountName) then exit function dim classGUID if isInherited then classGUID = ace.InheritedObjectType else classGUID = ace.ObjectType end if if (classGUID = targetClass) and isMask(ace.accessMask, oper) then if ace.AceType = _ ADS_ACETYPE_ACCESS_ALLOWED_OBJECT then shouldBeDeleted = true exit function end if end if end function Листинг 4. Назначение менеджера по персоналу для подразделения function makeManager(newManager) dim managerGroup, userWinNTPath set managerGroup = getObject("WinNT://" & info.domainShortName & "/Staff Managers") userWinNTPath = "WinNT://" & info.domainShortName & "/" & newManager.samAccountName if managerGroup.isMember(userWinNTPath) then exit function managerGroup.add userWinNTPath managerGroup.setInfo end function Листинг 5. Отмена полномочий менеджера по персоналу для пользователя function makeNotManager dim managerGroup, userWinNTPath set managerGroup = getObject("WinNT://" & info.domainShortName & "/Staff Managers") userWinNTPath = "WinNT://" & info.domainShortName & "/" & user.samAccountName if managerGroup.isMember(userWinNTPath) then managerGroup.remove userWinNTPath managerGroup.setInfo end if end function SELECT * FROM __InstanceModificationEvent "WITHIN 5 WHERE TargetInstance ISA 'ds_organizationalunit' Const FOR_READING = 1 Function addListener(sOperation, sEvent, sClass, sScript) Set fso = createObject("Scripting.FileSystemObject") path = "\\.\root\directory\LDAP" Set objSWbemServices = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!" & path) Set eventFilterClass = objSWbemServices.Get("__EventFilter") Set consumerClass = objSWbemServices.Get("ActiveScriptEventConsumer") Set bindingClass = objSWbemServices.Get("__FilterToConsumerBinding") mofcomp -N:root\directory\LDAP %SYSTEMROOT%\system32\wbem\scrcons.mof set userFilter = eventFilterClass.SpawnInstance_() userFilter.Name = sOperation & "Filter" userFilter.QueryLanguage = "WQL" userFilter.Query = "SELECT * FROM " & sEvent & " " & "WITHIN 5 WHERE TargetInstance ISA '" & sClass & "'" userFilter.EventNamespace = "root\directory\LDAP" userFilter.Put_() Set srcFile = fso.OpenTextFile(sScript, FOR_READING) set userConsumer = consumerClass.SpawnInstance_() userConsumer.Name = "Run" & sOperation & "Script" userConsumer.ScriptText = multyLine2SingleString(srcFile.readAll) userConsumer.ScriptingEngine = "VBScript" userConsumer.Put_() srcFile.close set userBinder = bindingClass.SpawnInstance_() userBinder.Filter = "__EventFilter.Name=" & chr(34) & sOperation & "Filter" & chr(34) userBinder.Consumer = "ActiveScriptEventConsumer.Name=" & chr(34) & "Run" & sOperation & "Script" & chr(34) userBinder.Put_() end function Function multyLine2SingleString(multyLine) multyLine2SingleString = replace(multyLine, vbCrLf, " : ") end Function addListener "OUModificate", __InstanceModificationEvent", "ds_organizationalunit", "onOUModification.vbs_" addListener "CommandSeed", "__InstanceCreationEvent", "ads_usermovecommand", "onCommand.vbs_" newManager = targetEvent.TargetInstance.DS_managedBy oldManager = targetEvent.PreviousInstance.DS_managedBy if newManager <> oldManager then set engine = createObject("UserMove.Engine") ouPath = targetEvent.TargetInstance.ADSIPath if oldManager <> "" then engine.undelegateOU ouPath, "LDAP://" & oldManager end if if newManager <> "" then engine.delegateOU ouPath, "LDAP://" & newManager end if end if set cmd = getObject(targetEvent.TargetInstance.ADSIPath) createObject("UserMove.Engine").dispatchCommand cmd Set objWIMService = _ GetObject("winmgmts:\\.\root\directory\LDAP") Set objList = objWIMService.ExecQuery("references of {__EventFilter.Name='OUModificateFilter'}") For each objInst in objList objInst.Delete_ Next Set obj = GetObject("winmgmts:\\.\root\directory\LDAP:” & ”ActiveScriptEventConsumer='RunOUModificateScript'") obj.Delete_ Set obj = GetObject("winmgmts:\\.\root\directory\LDAP:” & & ”__EventFilter='OUModificateFilter'") obj.Delete_ Const START_MOVE_COMMAND = "StartMove" Const DENY_COMMAND = "Deny" Const ACCEPT_COMMAND = "Accept" Const ROLLBACK_COMMAND = "RollBack" function dispatchCommand(cmd) on error resume next if not checkIntegrity(cmd) then resetCommand cmd exit function end if select case cmd.userMoveID case START_MOVE_COMMAND: dispatchStartMoveCommand cmd case ACCEPT_COMMAND: dispatchAcceptCommand cmd case DENY_COMMAND: dispatchDenyCommand cmd case ROLLBACK_COMMAND: dispatchRollbackCommand cmd default: resetCommand cmd end select if err<>0 then resetCommand cmd end function function checkIntegrity(cmd) On Error resume next dim owner, executor, stOwner checkIntegrity = false stOwner = cmd.get("ntsecuritydescriptor").owner set owner = getObject("WinNT://" & replace(stOwner,"\", "/")) set executor = getObject(cmd.userMoveExecutor) if err <> 0 then exit function if owner.class = "Group" then checkIntegrity = owner.isMember("WinNT://" & info.domainShortName & "/" & executor.samAccountName) elseif owner.class = "User" then checkIntegrity = (executor.samAccountName = owner.name) end if end function Листинг 6. Сброс некорректной команды function resetCommand(cmd) On error resume next dim ou set ou = getObject(cmd.parent) if cmd.class = START_MOVE_COMMAND_CLASS then dim user for each user in cmd user.accountDisabled = true user.setInfo ou.moveHere user.ADSPath, vbNullString next end if ou.delete cmd.class, cmd.name end function function dispatchStartMoveCommand(cmd) dim chair, room, whomObject, parentOU set chair = createChair(cmd) for each whomObject in cmd chair.moveHere whomObject.ADSPath, vbNullString next set parentOU = getObject(cmd.parent) set room = getWaitingRoom(parentOU) for each whomObject in chair createBackLink room, whomObject.ADSPath parentOU.delete START_MOVE_COMMAND_CLASS, "CN=cmd_" & START_MOVE_COMMAND & "_" & whomObject.samAccountName next end function function createChair(cmd) dim chairNumber, room set room = getWaitingRoom(getObject(cmd.userMoveTo)) chairNumber = getNextNumber(room, CHAIR_CLASS) set createChair = room.create(CHAIR_CLASS, "CN=chair_" & chairNumber) createChair.userMoveFrom = cmd.userMoveFrom createChair.userMoveWho = cmd.userMoveWho createChair.userMoveComment = cmd.userMoveComment createChair.userMoveWhen = cmd.userMoveWhen createChair.userMoveDisabled = cmd.userMoveDisabled createChair.setInfo end function function getWaitingRoom(ou) dim el ou.filter = Array(ROOM_CLASS) for each el in ou set getWaitingRoom = el exit Function next set getWaitingRoom = ou.create(ROOM_CLASS, "CN=waiting_room") getWaitingRoom.setInfo end function function getNextNumber(room, className) room.Filter = Array(className) dim i, n getNextNumber = 0 for each i in room n = getUnderlinedNumber(i.cn) if n > getNextNumber then getNextNumber = n next getNextNumber = getNextNumber + 1 end function Листинг 7. Извлечение номера объекта из его имени function getUnderlinedNumber(src) dim pos pos = instr(1, src, "_", vbTextCompare) if pos > 0 then getUnderlinedNumber = CInt(right(src, len(src) - pos)) end if end function Листинг 8. Создание обратной ссылки function createBackLink(room, backLink) dim linkNumber linkNumber = getNextNumber(room, LINK_CLASS) set createBackLink = room.create(LINK_CLASS, "CN=link_" & linkNumber) createBackLink.userMoveLink = backLink createBackLink.setInfo end function ----------------------------------------------------------------------------------------------------------------- Установка Windows XP с помощью System Center Configuration Manager 2007 R2 Алексей Тараненко WDSUTIL /Initialize-server /Reminst:"D:\RemoteInstall" C:\>wdsutil /verbose /initialize-server /server:srvname /reminst:"c:\remoteinstall" [Sysprep] BuildMassStorageSection = Yes [SysprepMassStorage] ;VIA PCI\VEN_1106&DEV_3349&CC_0104 = c:\drive\viamraid.inf PCI\VEN_1106&DEV_6287&CC_0106 = c:\drive\viamraid.inf ;ITEATAPI PCI\VEN_1283&DEV_8212&SUBSYS_00011283 = c:\drive\iteatapi.inf; 8212/CX ----------------------------------------------------------------------------------------------------------------- PowerShell. Поиск объектов в каталоге Active Directory Иван Коробко $path = "LDAP://OU=WorkSpace,DC=Island,DC=ru" $obj = New-Object DirectoryServices.DirectorySearcher($Path) $obj | Get-Member Get-Alias | Format-Table -Property Definition, Name -Autosize Листинг 1. Поиск объекта с помощью метода FindOne() # Получение доступа к корню домена $Search = New-Object DirectoryServices.DirectorySearcher("LDAP://DC=Island,DC=ru") # Критерий поиска — отображаемое имя группы $Search.Filter = "(&(cn=Print Managers))" # Поиск по всему каталогу Active Directory $Search.SearchScope = 2 # Выполнение поиска $result = $Search.FindOne() # Получение доступа к группе с помощью относительного пути $obj = $result.GetDirectoryEntry() # Чтение элементов массива $obj.psbase.properties.member | % { $member = [ADSI]( "LDAP://"+$_) Write-Host $member.Name} $obj = $result.GetDirectoryEntry() $obj=[ADSI]("LDAP://"+ $result.distinguishedName) $data = $obj.psbase.properties.СВОЙСТВО Шаблон 1. Чтение строковых и числовых атрибутов # Атрибуты name, primarygroup, description и т.д. $data = $obj.psbase.properties.СВОЙСТВО write-host $data Шаблон 2. Чтение массивов # Атрибуты member, memberOf и т.д. $data = $obj.psbase.properties.СВОЙСТВО ForEach ($item in $data) { Write-Host $item} Шаблон 3. Чтение массивов (сокращенная запись) # Атрибуты member, memberOf и т.д. $obj.psbase.properties.СВОЙСТВО | % { Write-Host $_} Листинг 2. Поиск объекта с помощью метода FindAll() # Получение доступа к корню домена $Search = New-Object DirectoryServices.DirectorySearcher("LDAP://DC=Island,DC=ru") # Критерий поиска — отображаемое имя группы $Search.Filter = "(&(objectClass=User)(cn=A*)(!objectClass=Computer))" # Поиск по всему каталогу Active Directory $Search.SearchScope = 2 # Сортировка результатов поиска $Search.Sort.Direction = 1 $Search. Sort.PropertyName="sAMAccountName" # Выполнение поиска $Search.FindAll() | % { # Получение доступа к группе с помощью относительного пути $obj = $_.GetDirectoryEntry() # Чтение данных Write-Host $obj.samaccountname} (&(objectClass=User)(!(objectClass=Computer))) (&(cn=А*)) (&(objectClass=User)(cn=A*)(!objectClass=Computer)) ----------------------------------------------------------------------------------------------------------------- bugtraq, стр. 49 https://[host]:3443/?tzid=crash ----------------------------------------------------------------------------------------------------------------- Доступный WiMAX. Подключение USB-модема Samsung SWC-U200 к маршрутизатору Asus WL-500gP Павел Закляков, Георгий Пахомов $ cat /proc/cpuinfo $ cat /proc/meminfo $ uname -a # mount -o sync,noatime,rw /dev/scsi/host0/bus0/target0/lun0/part1 /opt # mkdir /tmp/mnt/disc0_1/bin # mount –o bind /tmp/mnt/disc0_1 /opt # mkdir -p /opt/tmp/ipkg $ ipkg.sh update $ ipkg install screen $ flashfs save $ flashfs commit $ flashfs enable export TERMINFO="/opt/share/terminfo" export TERM="xterm" ls –l /opt/sbin/madwimax chmod +x /opt/sbin/madwimax cd /tmp wget http://lvk.cs.msu.su/~lasaine/madwimax/wl500g/libusb-1.0-mipsel.tgz wget http://lvk.cs.msu.su/~lasaine/madwimax/wl500g/madwimax-latest-mipsel.tgz cd / tar -xzf /tmp/libusb-1.0-mipsel.tgz tar -xzf /tmp/madwimax-latest-mipsel.tgz rm /tmp/libusb-1.0-mipsel.tgz /tmp/madwimax-latest-mipsel.tgz export TERMINFO="/opt/share/terminfo" export TERM="xterm" #!/bin/sh mount -o sync,noatime,rw /dev/scsi/host0/bus0/target0/lun0/part1 /opt mount –o bind /tmp/mnt/disc0_1 /opt insmod tun.o /opt/sbin/madwimax --device 04e9:6761 sleep 45 /opt/etc/madwimax/event.sh if-up tap0 insmod tun.o /opt/sbin/madwimax --device 04e9:6761 insmod /lib/modules/tun.o (while true; do /opt/sbin/madwimax -qof; sleep 10; done) & touch /usr/local/sbin/post-mount chmod +x /usr/local/sbin/post-mount touch /opt/etc/madwimax/event.sh touch /opt/etc/madwimax/udhcpc.script chmod +x /opt/etc/madwimax/event.sh chmod +x /opt/etc/madwimax/udhcpc.script #!/bin/sh # Usage: event.sh case "$1" in start) ;; end) ;; if-up) /sbin/udhcpc -i "$2" -p /var/run/udhcpc1.pid -s /opt/etc/madwimax/udhcpc.script -b iptables -A INPUT -i "$2" -m state --state NEW -j SECURITY iptables -A FORWARD -i "$2" -m state --state NEW -j SECURITY iptables -t nat -A POSTROUTING -o "$2" ! -s `ifconfig "$2" | grep 'inet addr' | tr ':' ' ' | awk '{print $3}'` -j MASQUERADE iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu ;; if-down) cat /var/run/udhcpc1.pid | xargs -i kill -TERM {} ;; *) echo "Usage: $0 {start|end|if-up|if-down}" >&2 exit 3 ;; esac #!/bin/sh RESOLV_CONF=/tmp/resolv.conf case "$1" in bound|renew) ifconfig $interface up ifconfig $interface $ip netmask $subnet route add default gw $router for ii in $dns; do echo nameserver $ii >> $RESOLV_CONF done # trigger dnsmasq restart kill -s SIGHUP `pidof dnsmasq` ;; deconfig) ifconfig $interface 0.0.0.0 echo deleting $RESOLV_CONF echo -n > $RESOLV_CONF kill -s SIGHUP `pidof dnsmasq` ;; esac # flashfs save && flashfs commit && flashfs enable # reboot madwimax -fvvd -l /tmp/mnt/disc0_1/madwimax.log /opt/bin/screen -dm ping -s 0 94.25.208.74 $ ps | grep ping $ tcpdump -i tap0 icmp # mkdir -p /usr/local/etc/dropbear # dropbearkey -t dss -f /usr/local/etc/dropbear/dropbear_dss_host_key # dropbearkey -t rsa -f /usr/local/etc/dropbear/dropbear_rsa_host_key # ls /usr/local/sbin/post-boot # mkdir -p /usr/local/sbin/ # echo "#!/bin/sh" >> /usr/local/sbin/post-boot # echo "dropbear" >> /usr/local/sbin/post-boot # flashfs save && flashfs commit && flashfs enable ----------------------------------------------------------------------------------------------------------------- bugtraq, стр. 65 https://:3443/login.wcap?calid=&calname=&date=&fmt-out=&view=&locale=&tzid=&test=1229606492214&user=test&password=test https://:3443//command.shtml?view=overview&id=HK8CjQOkmbY&date=20081217T200734%27;alert('xss');//Z&caliad=someid@test.com&security=1 ----------------------------------------------------------------------------------------------------------------- Работаем с FTP-сервером из «1С» Андрей Луконькин Перем НашеСоединение; Процедура ПриОткрытии() ЭлементыФормы.ЗагрузитьОтмеченные.Доступность = Ложь; ЭлементыФормы.ВыложитьФайл.Доступность = Ложь; ЭлементыФормы.ОбновитьСписок.Доступность = Ложь; КаталогДляПолученияФайлов = "C:\"; КонецПроцедуры Процедура ПрочитатьНажатие(Элемент) ПроксиСервер = Новый ИнтернетПрокси(Истина); Попытка НашеСоединение = Новый FTPСоединение(АдресFTP, 21, Логин, Пароль , , ); Исключение Сообщить("Ошибка создания соединения: "+ОписаниеОшибки()); Возврат; КонецПопытки; ЭлементыФормы.ЗагрузитьОтмеченные.Доступность = Истина; ЭлементыФормы.ВыложитьФайл.Доступность = Истина; ЭлементыФормы.ОбновитьСписок.Доступность = Истина; ОбновитьСписок(); КонецПроцедуры Процедура ОбновитьСписок() ПолеСписка.Очистить(); СписокФайлов = НашеСоединение.НайтиФайлы("/","*.*"); Для Каждого Файл Из СписокФайлов Цикл Если Файл.ЭтоФайл() Тогда ПолеСписка.Добавить(Файл, Файл.Имя); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура КаталогДляПолученияФайловНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; РежимДиалога = РежимДиалогаВыбораФайла.ВыборКаталога; ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(РежимДиалога); ДиалогВыбораКаталога.МножественныйВыбор = Ложь; ДиалогВыбораКаталога.Заголовок = "Выберите путь для сохранения файлов"; Если ДиалогВыбораКаталога.Выбрать() Тогда КаталогДляПолученияФайлов = ДиалогВыбораКаталога.Каталог; КонецЕсли; КонецПроцедуры Процедура ЗагрузитьОтмеченныеНажатие(Элемент) Для каждого Файл из ПолеСписка Цикл Если Файл.Пометка Тогда НашеСоединение.Получить(Файл.Значение.ПолноеИмя,КаталогДляПолученияФайлов+Файл.Значение.ПолноеИмя); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ВыложитьФайлНажатие(Элемент) РежимДиалога = РежимДиалогаВыбораФайла.Открытие; ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога); ДиалогВыбораФайла.МножественныйВыбор = Ложь; ДиалогВыбораФайла.Заголовок = "Выберите файл для загрузки"; ДиалогВыбораФайла.ПолноеИмяФайла = ВыгружаемыйФайл; Если ДиалогВыбораФайла.Выбрать() Тогда ВыгружаемыйФайл = ДиалогВыбораФайла.ПолноеИмяФайла; ВыгружаемыйФайлОбъект = Прав(ВыгружаемыйФайл,СтрДлина(ВыгружаемыйФайл)-СтрДлина(ДиалогВыбораФайла.Каталог)); Ответ = Вопрос("Выложить файл на FTP?",РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда НашеСоединение.Записать(ВыгружаемыйФайл,ВыгружаемыйФайлОбъект); ОбновитьСписок(); КонецЕсли; ВыгружаемыйФайл=""; Иначе ВыгружаемыйФайл=""; КонецЕсли; КонецПроцедуры Процедура ОбновитьСписокНажатие(Элемент) ОбновитьСписок(); КонецПроцедуры ----------------------------------------------------------------------------------------------------------------- Управление базами данных «1С» 7.7 при помощи групповых политик Владимир Борисов Листинг 1. Шаблон групповой политики для управления базами данных «1С» 7.7 CLASS USER CATEGORY !!cat_name KEYNAME "Software\1C\1Cv7\7.7\Titles" POLICY !!pol_name PART !!part_name LISTBOX EXPLICITVALUE ADDITIVE END PART END POLICY END CATEGORY [strings] cat_name="Управление 1С" pol_name="Подключенные базы данных" part_name="Список подключенных баз данных" ----------------------------------------------------------------------------------------------------------------- Python: сложные аспекты Дмитрий Васильев >>> ().__class__ >>> ().__class__.__class__ >>> T = type("test", (object,), {"name": "Test"}) >>> T >>> T.name >>> t = T() >>> t >>> t.name >>> class Test(metaclass=type): ... pass ... cls = M.__new__(M, name, bases, dict) assert cls.__class__ is M M.__init__(cls, name, bases, dict) class MetaTest(type): def __new__(cls, name, bases, dict): klass = super(MetaTest, cls).__new__(cls, name, bases, dict) print "__new__(%r, %r, %r) -> %r" % (name, bases, dict, klass) return klass def __init__(cls, name, bases, dict): super(MetaTest, cls).__init__(name, bases, dict) print "__init__(%r, %r, %r)" % (name, bases, dict) def __call__(cls, *args, **kwargs): obj = super(MetaTest, cls).__call__(*args, **kwargs) print "__call__(%r, %r) -> %r" % (args, kwargs, obj) return obj >>> from meta import MetaTest >>> class Test(object): ... __metaclass__ = MetaTest ... >>> test = Test() >>> class MetaTest(type): ... def test(cls): ... print "test()" ... >>> class Test(object): ... __metaclass__ = MetaTest ... >>> Test.test() >>> Test().test() class AutoSuper(type): def __init__(cls, name, bases, dict): super(AutoSuper, cls).__init__(name, bases, dict) setattr(cls, "_%s__super" % name, super(cls)) >>> from super import AutoSuper >>> class A(object): ... __metaclass__ = AutoSuper ... def method(self): ... return "A" ... >>> class B(A): ... def method(self): ... return "B" + self.__super.method() ... >>> B().method() class AttrInit(type): def __call__(cls, **kwargs): obj = super(AttrInit, cls).__call__() for name, value in kwargs.items(): setattr(obj, name, value) return obj >>> from attr import AttrInit >>> class Message(object): ... __metaclass__ = AttrInit ... >>> class ResultRow(object): ... __metaclass__ = AttrInit ... >>> msg = Message(type='text', text='text body') >>> msg.type >>> msg.text >>> row = ResultRow(id=1, name='John') >>> row.id >>> row.name class TestDescriptor(object): def __get__(self, obj, type=None): print "__get__(%r, %r)" % (obj, type) return "value" def __set__(self, obj, value): print "__set__(%r, %r)" % (obj, value) def __delete__(self, obj): print "__delete__(%r)" % obj >>> from desc import TestDescriptor >>> class Test(object): ... attribute = TestDescriptor() ... >>> Test.attribute >>> t = Test() >>> t.attribute >>> t.attribute = "new value" >>> del t.attribute class Property(object): def __init__(self, fget=None, fset=None, fdel=None, doc=None): self.fget = fget self.fset = fset self.fdel = fdel self.__doc__ = doc def __get__(self, obj, type=None): if obj is None: return self if self.fget is None: raise AttributeError("unreadable attribute") return self.fget(obj) def __set__(self, obj, value): if self.fset is None: raise AttributeError("can't set attribute") self.fset(obj, value) def __delete__(self, obj): if self.fdel is None: raise AttributeError("can't delete attribute") self.fdel(obj) class ClassMethod(object): def __init__(self, f): self.f = f def __get__(self, obj, klass=None): if klass is None: klass = type(obj) def newfunc(*args, **kwargs): return self.f(klass, *args, **kwargs) return newfunc class StaticMethod(object): def __init__(self, f): self.f = f def __get__(self, obj, type=None): return self.f with выражение [as переменная]: блок with with open('file.txt', 'rb') as f: for line in f: print line f = open('file.txt', 'rb') try: for line in f: print line finally: f.close() class TestContext(object): def __init__(self, ignore_error=False): self.ignore_error = ignore_error def __enter__(self): print "__enter__()" return self def execute(self, error=False): print "execute()" if error: raise Exception("error") def __exit__(self, exc_type, exc_val, exc_tb): print "__exit__(%r, %r, %r)" % (exc_type, exc_val, exc_tb) return self.ignore_error >>> from context import TestContext >>> with TestContext() as context: ... context.execute() ... >>> with TestContext() as context: ... context.execute(error=True) ... >>> with TestContext(ignore_error=True) as context: ... context.execute(error=True) ... from contextlib import contextmanager @contextmanager def test(): print "__enter__()" try: yield "execute()" finally: print "__exit__()" >>> from context import test >>> with test() as body: ... print body ... from contextlib import nested with nested(A(), B(), C()) as (X, Y, Z): body() m1, m2, m3 = A(), B(), C() with m1 as X: with m2 as Y: with m3 as Z: body() from contextlib import closing from urllib import urlopen with closing(urlopen('http://www.python.org')) as page: for line in page: print line class Test(object): pass -----------------------------------------------------------------------------------------------------------------