Учет оборудования с 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
-----------------------------------------------------------------------------------------------------------------