Управляем объектами в Active Directory
Часть 1
Иван Коробко
Листинг 1. Создание учетной записи пользователя
set RootDSE = GetObject("LDAP://RootDSE")
Domain = rootDSE.Get("defaultNamingContext")
Set objUsers = GetObject("LDAP://CN=Users," & Domain)
Set objNewUser = objUsers.Create("user", "cn=Ivan\, Petrov")
objNewUser.Put "sAMAccountName", "IPetrov"
objNewUser.Put "sn", "Petrov"
objNewUser.Put "givenName", "Ivan"
objNewUser.Put "Initials", "V"
objNewUser.Put "userPrincipalName", "IPetrov@" & DetectDNSName(Domain)
objNewUser.SetInfo
objNewUser.AccountDisabled=False
objNewUser.SetPassword("1234567890")
objNewUser.SetInfo
Function DetectDNSName(Domain)
' Определение DNS-имени домена
LDAPArray = Split(Domain,",")
For Each el In LDAPArray
DNSName = DNSName + right(el,Len(el)-3) + "."
Next
DetectDNSName = left(DNSName, Len(DNSName)-1)
End Function
Листинг 2. Шаблон создания объектов в Active Directory
set RootDSE = GetObject("LDAP://RootDSE")
Domain = rootDSE.Get("defaultNamingContext")
Set objs = GetObject("LDAP:// " + ПУТЬ К ПАПКЕ + " & Domain)
Set obj = objs.Create("ТИП ОБЪЕКА", "ИМЯ ОБЪЕКТА")
obj.Put "ПОЛЕ ТИПА СТРОКА В ACTIVE DIRECTORY", "ЗНАЧЕНИЕ"
obj.Put "ПОЛЕ ТИПА МАССИВ В ACTIVE DIRECTORY", Array("ЗНАЧЕНИЕ1", "ЗНАЧЕНИЕ2", "ЗНАЧЕНИЕ3"…)
obj.SetInfo
Листинг 3. Создание учетной записи группы безопасности
set RootDSE = GetObject("LDAP://RootDSE")
Domain = rootDSE.Get("defaultNamingContext")
Set objGroups = GetObject("LDAP:// CN=Test,CN=Groups," & Domain)
Set objGrous = objGroups.Create("group", "cn=Print Manage")
objGroup.Put "sAMAccountName", "Print Manage"
objGroup.SetInfo
Листинг 4. Создание учетной записи папки
set RootDSE = GetObject("LDAP://RootDSE")
Domain = rootDSE.Get("defaultNamingContext")
Set objOUs= GetObject("LDAP://CN=Users," & Domain)
Set objOU = objOUs.Create("organizationalUnit", "ou=Test")
objOU.SetInfo
-----------------------------------------------------------------------------------------------------------------
SharePoint в качестве платформы документооборота
Работаем с workflow в WSS 3.0 и MOSS 2007
Нелли Садретдинова
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WorkflowActions;
namespace MyActivities
{
public partial class getEmail: SequenceActivity
{
public getEmail() {
InitializeComponent();
}
//Описываем свойство __Context, в нем хранится информация
//о веб-приложении, из которого было вызвано действие
public static DependencyProperty __ContextProperty = System.Workflow.ComponentModel.DependencyProperty.Register("__Context", typeof(WorkflowContext), typeof(getEmail));
[Description("Context")]
[ValidationOption(ValidationOption.Required)]
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public WorkflowContext __Context {
get {
return ((WorkflowContext)(base.GetValue(getEmail.__ContextProperty)));
}
set {
base.SetValue(getEmail.__ContextProperty, value);
}
}
//Описываем свойство, в котором будет храниться логин пользователя
public static DependencyProperty LoginProperty = System.Workflow.ComponentModel.DependencyProperty.Register("Login", typeof(string), typeof(getEmail));
[Description("Login")]
[ValidationOption(ValidationOption.Required)]
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string Login {
get {
return ((string)(base.GetValue(getEmail.LoginProperty)));
}
set {
base.SetValue(getEmail.LoginProperty, value);
}
}
//Описываем свойство, в котором будет храниться электронный адрес пользователя
public static DependencyProperty EmailProperty = System.Workflow.ComponentModel.DependencyProperty.Register("Email", typeof(string), typeof(getEmail));
[Description("Email")]
[Category("Email")]
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string Email {
get {
return ((string)(base.GetValue(getEmail.EmailProperty)));
}
set {
base.SetValue(getEmail.EmailProperty, value);
}
}
//Переопределяем метод, в котором выполняется само действие
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) {
SPWeb web = this.__Context.Web;
SPUser user;
if (Login != "") {
user = web.AllUsers[Login];
if (user != null) {
Email = user.Email;
}
}
return base.Execute(executionContext);
}
}
}
-----------------------------------------------------------------------------------------------------------------
Устанавливаем и настраиваем систему мониторинга сети OpenNMS
Андрей Семенов
rpm -ihv http://mirror.yandex.ru/fedora/tigro/8/i386/tigro-release-8-1.i386.rpm
yum install jdk
sed -i 's/XINERAMA/FAKEEXTN/g' /usr/java/jdk1.6.0_05/jre/lib/i386/xawt/libmawt.so
yum install postgresql-server
/sbin/service postgresql initdb
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
listen_addresses = 'localhost'
/sbin/service postgresql start
rpm -Uvh http://yum.opennms.org/repofiles/opennms-repo-unstable-fc8.noarch.rpm
yum install opennms
yum install jrrd
yum install jicmp
yum install iplike
cd /opt/opennms/bin
./runjava -s
./runjava -S /usr/java/jdk1.6.0_5/bin/java
./install -dis
./install -disU -l /usr/lib/jni:/usr/lib
-A,--admin-password
// Пароль администратора сервера postgres (по умолчанию: '')
-a,--admin-username
// Имя администратора сервера postgres (по умолчанию: 'postgres')
-c,--clean-database
// Очистить существующую базу при создании
-D,--database-url
// JDBC УРЛ базы данных (по умолчанию: jdbc:postgresql://localhost:5432/)
-P,--database-name
// Имя базы данных PostgreSQL (по умолчанию: opennms)
-p,--password
// Пароль для базы данных opennms (по умолчанию: 'opennms')
-u,--username
// Имя пользователя БД opennms (по умолчанию: 'opennms')
./install -help
./opennms start
10.10.10.1
10.10.14.254
10.10.11.1
10.10.11.254
10.10.11.1
file:/opt/OpenNMS/etc/moreip.txt
/opt/opennms/bin/send-event.pl --interface ip-address uei.opennms.org/internal/discovery/newSuspect
10.10.11.1
file:/opt/OpenNMS/etc/include
IPADDR != '0.0.0.0'
RRA:AVERAGE:0.5:1:89280
RRA:AVERAGE:0.5:60:8784
RRA:AVERAGE:0.5:1440:366
RRA:MAX:0.5:1440:366
RRA:MIN:0.5:1440:366
interval="20000" begin="0" end="300000"/>
org.opennms.snmp.strategyClass=org.opennms.netmgt.snmp.snmp4j.Snmp4JStrategy
10.10.10.1
10.10.11.1
10.10.14.1
./opennms start
opennms.bat start
-----------------------------------------------------------------------------------------------------------------
Медиация Linux и GDI-принтера
Павел Закляков
-I"C:\Program Files\gs\gs8.62\lib";"C:\ProgramFiles\gs\gs8.62\fonts"
-sDEVICE=mswinpr2
-dNOPAUSE
-dSAFER
-sPAPERSIZE=a4
-sOutputFile="\\spool\SHARP AR-153E N"
@"C:\Program Files\gs\winprinter.rsp" –
-----------------------------------------------------------------------------------------------------------------
Как запустить «САМО-Тур» для Windows под Linux
Сергей Барановский
# service yum-updatesd stop
# /etc/rc.d/init.d/yum-updatesd stop
# chkconfig yum-updatesd off
export http_proxy=http://user:password@192.168.0.1:3128
export http_proxy=http://192.168.0.1:3128
export http_proxy=192.168.0.1:3128
wget http://rpm.livna.org/livna-release-8.rpm
# rpm -ihv livna-release-8.rpm
# yum install mc unrar
# yum install freetds wine
[Server80]
host = 192.168.0.2
port = 1433
tds version = 8.0
client charset=WINDOWS-1251
[FreeTDS]
Description=FreeTDS for MSSQL
Driver=/usr/lib/libtdsodbc.so.0
[labirint]
Driver=FreeTDS
Description=Labirint database
Trace=No
Servername=Server80
Database=labirint
# odbcinst -i -d -f tds.driver.template
$ odbcinst -i -s -f tds.datasource.template
isql -v labirint user pass
wine 123
"/home/домашняя_директория_пользователя/.wine/drive_c/Program Files/WinTour/Wintour.exe"
env WINEPREFIX="/home/labirint/.wine" wine "/home/домашняя_директория_пользователя/.wine/drive_c/Program Files/WinTour/Wintour.exe"
wine "/home/домашняя_директория_пользователя/.wine/drive_c/Program Files/WinTour/Wintour.exe"
wget http://www.jrsoftware.org/download.php/bdeinst.cab
wget http://www.cabextract.org.uk/cabextract-1.2.tar.gz
tar -zxvf cabextract-1.2.tar.gz -C /progi
cd /progi/cabextract-1.2
./configure
make
#make install
# yum install cabextract
$ cabextract bdeinst.cab
wine c:/windows/system32/regsvr32.exe BdeInst.dll
wine "c:/Program Files/Common Files/Borland Shared/BDE/BDEADMIN.EXE"
# yum update kernel
uname -a
wine OOo_2.4.0_Win32Intel_install_ru_infra.exe
-----------------------------------------------------------------------------------------------------------------
Фильтруем спам в Exim с помощью SpamProbe
Павел Литвинов
# cd /usr/ports/mail/spamprobe
# make -s install clean
# spamprobe -d /var/lib/spamprobe create-db
system_filter = /usr/local/etc/spamprobe/exim.filter
# system_filter_user = mailnull
# system_filter_group = mail
##########################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
##########################################################
# Exim filter
# Ни в коем случае не удаляйте верхнюю строку
# Путь к лог-файлу
logfile /var/log/exim/spam-filter.log
# Указываем максимальный размер письма, которое будет подвержено анализу (Кб).
# Число взял из конфигурационного файла DSPAM
add 307200 to n0
# Проверяем письмо только один раз, даже если Exim с первого раза его не сможет доставить.
# Нечего плодить заголовки X-SpamProbe:
if first_delivery
then
if $message_size is above $n0
then
# Если не нужно вести Лог-файл закомментируйте строку ниже.
logwrite "SPAM FILTER: Размер письма от $return_path превышает $n0 Kb ; Письмо не будет проходить проверку"
else
headers add "X-SpamProbe: ${run {/usr/local/etc/spamprobe/msgscore.sh ${message_id} ${quote:${message_headers}}} {$value} {expansion failed} }"
# Если не нужно вести Лог-файл закомментируйте строку ниже.
logwrite "SPAM FILTER: Письмо от $return_path успешно прошло проверку; $value"
endif
endif
#!/bin/sh
# Путь к месту, где почта хранится до момента доставки
spooldir=/var/spool/exim/input
# Путь к базе, где SpamProb хранит токены
dbdir=/var/lib/spamprobe
# Полный путь к программе SpamProbe
path_spamprobe=/usr/local/bin/spamprobe
# Находим полный путь к нашему письму.
# Если бы не опция " split_spool_directory = true " в конфигурационном файле Exim
# он бы соответствовал переменной ‘$spooldir/$1-D’
path_file=`/usr/bin/find $spooldir -name $1-D -print`
echo "$2" > $spooldir/$1-M
sed '1 s/.*//' $path_file >> $spooldir/$1-M
$path_spamprobe -8 -d $dbdir score $spooldir/$1-M
rm $spooldir/$1-M
exit 0
#########################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
begin routers
# SpamProbe start #############
SP_spam_router:
driver = accept
domains = +local_domains
local_part_prefix = spam
transport = SP_spam_transport
SP_no-spam_router:
driver = accept
domains = +local_domains
local_part_prefix = no-spam
transport = SP_no-spam_transport
# SpamProbe end ###############
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
# SpamProbe start #############
SP_check_router:
driver = accept
domains = +local_domains
local_parts = lsearch;/usr/local/etc/spamprobe/users
condition = ${if and {{match{$h_X-SpamProbe:}{SPAM}}{!match_address{$sender_address}{lsearch;/usr/local/etc/spamprobe/whitelist}}}}
transport = SP_check_transport
no_more
# SpamProbe end ###############
local_parts = lsearch;/usr/local/etc/spamprobe/users
# Список пользователей, письма которых анализируются антиспамом
admin
maxim
hostmaster
oleg
gl_sten
condition = ${if and {{match{$h_X-SpamProbe:}{SPAM}}{!match_address{$sender_address}{lsearch;/usr/local/etc/spamprobe/whitelist}}}}
# Список адресов, которым можно доверять, и не анализировать почту, приходящую от них
murzilka@ukr.net
meren@mail.ru
office@predpriyatie.com
info@rambler.ku
#########################################################
# TRANSPORTS CONFIGURATION #
# SpamProbe start #############
SP_check_transport:
driver = pipe
command = "/usr/local/libexec/dovecot/deliver -d $local_part@$domain -m INBOX.Spam"
user = mailnull
group = mail
log_output = true
return_path_add
# headers_remove = X-SpamProbe
SP_spam_transport:
driver = pipe
command = "/usr/local/bin/spamprobe –d /var/lib/spamprobe spam"
return_path_add = false
return_fail_output = true
log_output = true
user = mailnull
group = mail
SP_no-spam_transport:
driver = pipe
command = "/usr/local/bin/spamprobe –d /var/lib/spamprobe good"
return_path_add = false
return_fail_output = true
log_output = true
user = mailnull
group = mail
# SpamProbe end #############
#!/bin/bash
spamprobe -d /var/lib/spamprobe spam ./spam/*
spamprobe -d /var/lib/spamprobe good ./nonspam/*
0 3 * * * * root find /var/mail/*/*/.INBOX.Spam/new/* -ctime +30 -exec rm -f {} \;
-----------------------------------------------------------------------------------------------------------------
Хитрости и тонкости работы, позволяющие экономить время
Андрей Луконькин
Год = 2003;
Строка1 = Строка(Число1);
Строка1 = Формат(Число1,"ЧГ=0");
Строка1 = Формат(ТекущаяДата(), "ДФ=yyyy");
Мод = Макс(А, -А);
Неотр = Макс(А, 0);
-----------------------------------------------------------------------------------------------------------------
Правда об идентификаторах безопасности
Иван Коробко
Листинг 1. Генерация GUID (V-Script)
Set TypeLib = CreateObject("Scriptlet.TypeLib")
wscript.Echo TypeLib.Guid
Set TypeLib = Nothing
S-R-X-Y1-Y2-…-Yn-1-Yn (1)
A-B-C-Z1-Z2-…-Zn-1-Zn (2)
01 05 00 00 00 00 00 05 15 00 00 00 2C 8F EC FB E5 F2 48 01 35 A6 99 55 26 1B 00 00 (3)
01 05 00 00 00 00 00 05 15 00 00 00 2C 8F EC FB E5 F2 48 01 35 A6 99 55 26 1B 00 00 (4)
S — 0x1 — 0x5 — 0 x 00 00 00 00 00 05 — 0 x 00 00 00 15 — 0 x FB EC 8F 2C — 0 x 01 48 F2 E5 — 0 x 55 99 A6 35 — 0 x 00 00 1B 26 (5)
S — 1 — 5 — 21 — 4226584364 — 21557989 — 1436132917 — 6950 (6)
GetSID.exe \\server1 account \\server2 account
GetSID.exe \\MSK test \\MSK test
-----------------------------------------------------------------------------------------------------------------
Новые возможности Heimdal
Объединение открытых ключей и Kerberos
Михаил Кондрин
hxtool issue-certificate \
--self-signed \
--issue-ca \
--subject="CN=CA,DC=myrealm,DC=ru" \
--lifetime=10years \
--generate-key=rsa \
--certificate=FILE:ca.pem
#hxtool print FILE:ca.pem
openssl x509 -in ca.pem -text > ca.crt
hxtool issue-certificate \
--subject="CN=www.myrealm.ru,DC=myrealm,DC=ru" \
--type="https-server" \
--hostname="www.myrealm.ru" \
--generate-key=rsa \
--ca-certificate=FILE:ca.pem \
--certificate=FILE:https.pem
hxtool issue-certificate \
--subject="CN=www.myrealm.ru,DC=myrealm,DC=ru" \
--type="https-client" \
--generate-key=rsa \
--ca-certificate=FILE:ca.pem \
--certificate=FILE:https-client.pem
SSLCertificateFile "/etc/httpd/ssl/https.pem"
SSLCertificateChainFile "/etc/httpd/ssl/ca.crt"
SSLCACertificateFile "/etc/httpd/ssl/ca.crt"
SSLVerifyClient require
SSLVerifyDepth 1
openssl pkcs12 -export \
-in https-client.pem \
-name HTTPS-Client \
-out https-client.p12
hxtool issue-certificate \
--type="pkinit-kdc" \
--pk-init-principal="krbtgt/MYREALM.RU@MYREALM.RU" \
--subject="uid=kdc,DC=myrealm,DC=ru" \
--generate-key=rsa \
--ca-certificate=FILE:ca.pem \
--certificate=FILE:kdc.pem
hxtool issue-certificate \
--type="pkinit-client" \
--pk-init-principal="mike@MYREALM.RU" \
--subject="uid=mike,DC=myrealm,DC=ru" \
--generate-key=rsa \
--ca-certificate=FILE:ca.pem \
--certificate=FILE:mike.pem
chmod -R 600 /home/mike/secure
[kdc]
enable-pkinit=yes
pkinit_identity = FILE:/var/heimdal/secure/kdc.pem
pkinit_anchors=FILE:/etc/ssl/ca.crt
[appdefaults]
pkinit_anchors = FILE:/etc/ssl/ca.crt
[kinit]
MYREALM.RU = {
pkinit_anchors = FILE:/etc/ssl/ca.crt
}
#hxtool print FILE:ca.pem
mike@MUREALM.RU:DC=ru,DC=myrealm,UID=mike
#kinit \color{red}--pk-user=FILE:mike.pem \color{black} mike
#klist -v
certificate Certificate Mike FILE:/home/mike/secure/mike.pem
kinit \color{red}--pk-user=PKCS11:libhx509.so \color{black} mike
cat mike.pem > /dev/usb/sda1
#!/usr/bin/bash
echo -n "Insert pem-certificate and hit enter when ready!"
read
/usr/bin/kinit -C FILE:/dev/sda1 $2 && \
/usr/bin/kgetcred host/$(hostname -f) && \
/usr/bin/login -f $2
...
c1:1235:respawn:/sbin/agetty -l /usr/local/bin/login.sh 38400 tty6 linux
c2:1235:respawn:/sbin/agetty -l /usr/local/bin/login.sh 38400 tty6 linux
...
-----------------------------------------------------------------------------------------------------------------
XML-native DB. XQuery
Александр Календарев
Пример 1. Простое использование XPath
doc("auction")/site/regions/*/name()
SELECT * FROM TABLE
Пример 2. Усложненное использование XPath
doc("auction")/site/regions/*[ name()='asia']/item
SELECT * FROM TABLE regions WHERE name='asia'
Пример 3. Использование выражений FLWOR
for $reg in doc("auction")/site/regions/*
return $reg/name()
Пример 4. Использование выражений FLWOR
for $reg in doc("auction")/site/regions/*
where $reg/name()='asia'
return $reg/item
{$reg/name()}
Пример 5. Использование конструктора выражений
for $reg in doc("auction")/site/regions/*
return {$reg/name()}
Пример 6. Более расширенное использование конструктора выражений
for $reg in doc("auction")/site/regions
return
{
for $r in $reg/*
return {$r/name()}
}
Пример 7. Выборка и упорядочивание
for $reg in doc("auction")/site/regions/*
return
{
for $loc in $reg/item
order by $loc/location
return
}
Пример 8. Группировка
let $person := doc("auction")/site/people/person
for $p in $person
return {$p/name/text()}
let $country := distinct-values($person/address/country)
Пример 9. Группировка
let $person := doc("auction")/site/people/person
let $country := distinct-values($person/address/country)
for $c in $country return
{ for $p in $person[address/country=$c ]
return
{$p/name}
}
SELECT name, country FROM table GROUP BY country
Пример 10. Выборка по одному множеству
let $auc := doc("auction")/site/open_auctions
for $a in $auc/open_auction
return
{
for $p in $a/bidder/personref/@person
return {$p}
}
let $person := doc("auction")/site/people/person
Пример 11. Пересечение выборок
let $auc := doc("auction")/site/open_auctions
let $person := doc("auction")/site/people/person
for $a in $auc/open_auction
return
{
for $p in $person[@id = $a/bidder/personref/@person]
return {$p/name/text()}
}
$person[@id=$a/bidder/personref/@person]
Пример 12. Выборка с условием
let $price := doc("auction")/site/closed_auctions/closed_auction/price
for $p in $price
return
if ( $p < 30 ) then
{data($p)}
else
{data($p)}
Пример 13. Использование встроенных функций
let $name := doc("auction")/site/regions/*/name()
for $n in $name
return concat( $n, " is region tag")
Пример 14. Объявление функции
declare function math:increment($num as xs:decimal) as xs:decimal {
$num + 1
};
define type user {
attribute id of xs:ID
element rating ?
}
declare namespace fn="http://nycompany.ru/Sedna/fn";
Пример 15. Выражение Update. Вставка узла
UPDATE
insert
John Smith
223-322-223-322
3454 3656 2344 6767
into document("auction")/site/people
Пример 16. Выражение Update. Удаление узла
UPDATE
delete document("auction")/site/people/person[name/text()="John Smith"]
Пример 17. Выражение Update. Замена узла
UPDATE replace
$g in document("auction")/site/people/person[@id="person25"]/name with
Ivanov Ivan
Пример 18. Запрос на выборку товаров по всей категории «пылесосы»
let $catalog := doc("catalog")/category[@name = "пылесосы"]
let $goods := doc("goods")/brand/item
for $g in $goods
where $catalog/@id = $g/@category
return $g
Пример 19. Запрос на выборку товаров по имени товара
let $goods := doc("items2")/goods/brand/item
for $g in $goods
where @name="TWNtt"
return $
Пример 20. Запрос на выборку товаров по части имени:
let $goods := doc("items2")/goods/brand/item
for $g in $goods
where fn:contains( $g/@name ,"S80" )
return $g
LoadModule sedna_module modules/mod_sedna.so
LoadModule apreq_module modules/mod_apreq.so
AddHandler sedna-handler .xqy .xquery
Alexandre
let $id = document("request_parameters")/data/person/@id;
let $name = document("request_parameters")/data/person/text();
-----------------------------------------------------------------------------------------------------------------