Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  frox
  SARG
  samba & ClamAV
  named
  proftpd
  cacti
  SAMBA+AD+NT ACL
  MySQL
  hylafax
  DDNS+DHCP
  cvsupd
  Samba как PDC
  Основы LDAP
  LDAP+SSL
  LDAP auth
  knockd
  rsync
  MRTG
  Rejik
  Jabber - OpenFire
  Samba(PDC) + Ldap
  squid+AD
  ATSlog
  vsftpd
  LDAP: samba, dns, dhcp
  Free-SA
  cups-samba на samba+AD
  irc + services
  Nagios - мониторинг сети
  TeamSpeak
  icecast2
  verlihub (p2p)
  Icecast2 + Darkice
  OOPS
  vsftpd + mysql
  Amanda
  HAVP
  Рыбалка на FreeBSD
  DNS сервер NSD
  DNS сервер Unbound
  mpd5, msmtp, dynamic ip
  ProFTPd + LDAP
  OpenVPN + LDAP
  Samba (PDC+BDC)
  BIND & AD
  POWERDNS
  3proxy
  eGroupWare
  GLPI
  SugarForge CRM
  Bacula
  Mysql - базовое описание
  Asterisk IP PBX
  Samba & CUPS & AD & ACL
  SMSTools 3
  Samba+ NT ACL
  phpmyadmin
  1С:Предприятие 8.1
  PurefFTPd
  qemu network
  AimSniff
  comms/scmxx
  Zoneminder
  Openfire Jabber Server
  Zoneminder 2
  Принт-Сервер Samba+LPD & AD
  Кластер OpenLDAP 2.4
  Lightsquid
  Установка Zabbix-1.6
  Установка net2ftp
  VSFTPD + AD && MySQL
  Network UPS Tools
  mpd5 L2TP client
  Apache 2.2 as a proxy
  ejabberd+mysql+icq
  HotSpot
  Установка и использование Zenoss на FreeBSD 7.2
  mysql-proxy
  DNS zones
  squid+sams+sqstat
  transmission-daemon
  Squid+AD (group access)
  SysAid Server
  MySQL Master+Master
  proftpd file auth&quota
  usb_modeswitch
  NSDadmin
  iperf Тест скорости между хостами
  Простой факс-сервер mgetty+sendfax
  SQUID-MultiCpuSystem
  vsftpd + system users
  Syslog server
  Температура в серверной
  Nagios+Digitemp
  Avast! FreeBSD
  Настройка git+gitosis
  Firefox SyncServer
  Scan+Print server FreeBSD 9
  proftpd,pgsql,web
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> программы —> proftpd file auth&quota

Proftpd - квоты и авторизация из файлов. Мониторинг.

Автор: gonzo111.


  • Вступление
  • Авторизация из файла
  • Квоты в файлах
  • Прочее. Что такое class в proftpd
  • Прочее. ProFTPD и IPNAT
  • Прочее. Мониторинг proftpd в jail
  • Литература

      Вступление

    Написал короткую заметку дабы не забыть.
    Настраивал я недавно клетку для хостинга и понадобился мне в ней хороший ftp без мускула.
    Выбор упал на proftpd- когда листаешь маны, то аж слюни текут сколько он умеет всего делать.
    uname -a
    FreeBSD server.k123.dp.ua 6.4-RELEASE-p9 FreeBSD 6.4-RELEASE-p9 #1:
    proftpd -v
    ProFTPD Version 1.3.3
    

    Итак ставим:
    cd  /usr/ports/ftp/proftpd
    make install clean
      [X] QUOTA            Include mod_quota
    


      Файловая авторизация

    Мне надо было чтобы у FTP-пользователя не было реального shell и FTP-сервер был бы прост в обслуживании.
    Proftpd поддерживает различные схемы авторизации пользователей (через базы данных, PAM-модули, LDAP), мне нужно авторизация через "альтернативный файл пользователей и паролей" (проще говоря текстовый файл).
    Если в конфиге ничего не указывать про тип авторизации, то используется системный passwd.

    Создаем в системе юзера ftp без шелла (/usr/sbin/nologin) от котрого будет работать proftpd.
    Затем добавляем в proftpd.conf:
    # Set the user and group under which the server will run.
    User                            ftp
    Group                           ftp
    
    AuthUserFile /usr/local/etc/proftpd.passwd
    AuthGroupFile /usr/local/etc/proftpd.group
    RequireValidShell  off # не проверять есть ли такой шелл на самом деле
    DefaultRoot             ~       
        <Directory ~>
            AllowOverwrite  on
                <Limit Write>
                    AllowAll
                </Limit>
                <Limit READ>
                AllowAll
                #IgnoreHidden
                </Limit>
                 #<Limit LOGIN>
                #Allow test
                #DenyAll
                #</Limit>
        </Directory>
    

    Заходим в архив  /usr/ports/distfiles/proftpd-1.3.3.tar.bz2 //contrib и берем перловский скрипт ftpasswd.
    Курим ман на офф сайте
    http://www.proftpd.org/docs/contrib/ftpasswd.html
    В итоге у меня получилась такая шпаргалка
    /usr/local/etc/scripts/Proftpd/proftpd_genpass.sh

    
    dir1=/usr/jails/web02
    name=artem
     Создание юзера
    #./ftpasswd --name $name --home /usr/proftp_shara/$name --uid 1002 
          --gid 1002 \
          --file $dir1/usr/local/etc/proftpd.passwd --shell /sbin/nologin --passwd
    #mkdir -vp 755 ${dir1}/usr/proftp_shara/${name}
    #chown -v 1002:1002  ${dir1}/usr/proftp_shara/${name}
    
    
    #./ftpasswd --name $name --home /usr/local/www/inkom/files --uid 80 --gid 80 \
           --file $dir1/usr/local/etc/proftpd.passwd --shell /sbin/nologin --passwd
    
    Смена пароля
    #./ftpasswd --passwd --name=$name --change-password --not-previous-password \
            --file $dir1/usr/local/etc/proftpd.passwd
    
    Создание групп
    #ftpasswd --group --name=group-name --gid=group-id --member=user-member1 \
                   --file $dir1/usr/local/etc/proftpd.passwd
            # --member=user-member2 ... --member=user-memberN
    

    получим в /usr/local/etc/proftpd.passwd
    artem:$1$pqOzVW4E$NlCrBCSZ0G5sv1:1002:1002:: /usr/proftp_shara/artem:/sbin/nologin
    Смысл такой создается свой аналог системного /etc/passwd в каталоге.Здесь сперва идет его имя, потом хэш пароля,ID юзера (реального любого который есть в системе например нашего ftp),ID группы(реальной группы),каталог  куда будет доступ у этого юзера по фтп,пустой шелл.
    Не забудьте создать эти каталоги и выставить права такие чтоб у этих ID было право на запись. Таким образом на одного юзера системного можно назначить кучу  виртульных логинов proftp со своими каталогами и паролями. Полученый файл можно свободно редактировать текстовым редактором, дополнительные файлы типа pwd.db ему не нужны.
     По аналогии создается файл групп proftpd.group, аналог /etc/group, в принципе его можно и руками создать:
    test:*:1002:
    site:*:80:artem,petrov
    Название группы , ее ID, список, кроме одноименного, юзеров которые туда входят.В принципе файл вообще может быть пустым,  он используется в конфигах самого proftp для установки различных прав на целую группу юзеров.
     Утилита ftpwho позволит глянуть кто сейчас залогинился.(для корректной работы проверьте чтоб было в конфиге ScoreboardFile  /var/run/proftpd.scoreboard)


      Квоты в файлах

    Квоты реализуются отдельным модулем mod_quotatab, который умеет хранить квоты используя файлы,LDAP,RADIUS,SQL.При сборке не забываем его указать -   [X] QUOTA  Include mod_quota
    Добавляем в proftpd.conf
    # config quotas
    # ===========
    QuotaEngine on          # включить квоту
    QuotaDirectoryTally on
    QuotaDisplayUnits Mb
    QuotaShowQuotas on
    QuotaLimitTable file:/usr/local/etc/proftpd.quota.limittab
    QuotaTallyTable file:/usr/local/etc/proftpd.quota.tallytab
    QuotaLog                        /var/log/proftpd/quota.log
    

    Аналогично, заходим в архив  /usr/ports/distfiles/proftpd-1.3.3.tar.bz2 //contrib и берем перловский скрипт ftpquota.
    Курим ман на офф сайте http://www.proftpd.org/docs/contrib/mod_quotatab.html и тут http://www.proftpd.org/docs/howto/Quotas.html
    Используется две таблицы в первой лежат квоты, во второй лежит информация сколько сейчас занято.

    В итоге у меня получилась так:  
    /usr/local/etc/scripts/Proftpd/proftpd_quota.sh
    
    dir1=/usr/jails/web02
    name=artem
    Cоздание таблиц квоты(первый раз)
    #./ftpquota --create-table --type=limit \
                --table-path=$dir1/usr/local/etc/proftpd.quota.limittab
    
     во второй таблице хранится сколько сейчас закачано юзером мб
     опция QuotaOptions ScanOnLogin позволяет при логине пересчитать сколько 
     реально там есть МБ(пересчет замедляет вход(!))
    #./ftpquota --create-table --type=tally \
           --table-path=$dir1/usr/local/etc/proftpd.quota.tallytab
    
    создание квоты на юзера site,квота 15 мб
    ./ftpquota --name=$name --bytes-upload=15 --add-record --type=limit \
        --quota-type=user  --units=Mb --verbose \
        --table-path=$dir1/usr/local/etc/proftpd.quota.limittab
    
    
    Для изменения квоты юзера artem,квота 30 мб
    #./ftpquota --name=$name --bytes-upload=30 --update-record --type=limit  
                 --quota-type=user --units=Mb --verbose \
              --table-path=$dir1/usr/local/etc/proftpd.quota.limittab
    
    Удаление квоты
    #ftpquota --delete-record --type=limit --name=browsers --quota-type=user \
             --table-path=$dir1/usr/local/etc/proftpd.quota.limittab
    # очистка таблицы текщего занятого места
    #./ftpquota --delete-record --name=artem  --verbose --quota-type=user \
         --type=tally --table-path=$dir1/usr/local/etc/proftpd.quota.tallytab
    
    
    
    Просмотр текущей квоты для всех (или пользователя name)
    ./ftpquota --show-records  --units=Mb --type=limit \
            --table-path=$dir1/usr/local/etc/proftpd.quota.limittab \
            #| grep -A9 $name
    echo
    echo ===сколько сейчас занято========
    echo
    ./ftpquota --show-records  --units=Mb --type=tally \
             --table-path=$dir1/usr/local/etc/proftpd.quota.tallytab \
             #| grep -A9 $name
    

    --------— описание ключей ---------------
    квота по байтам
    #--bytes-upload --bytes-download --bytes-xfer  (скач/загружено вместе)

    квота по количеству файлов
    #--files-upload --files-download --files-xfer (колич файлов скач/загруж вместе)

    метод лимита квоты
    #--limit-type  "hard"(по умолчанию идет) -закачует на сервер пока есть место,
    а потом удаляет последний закачивемый( или один большой) файл,
    "soft" -разрешит закачать на сервер большой
    файл сверх квоты (!), а следующий файл уже не даст

    тип того, кто будет подвергатся квотированию
    #--quota-type "user", "group", "class", или "all" (весь сервак).
    # "group" все юзеры входящие в группу
    # "class" список IP образуют класс

    имя того кто будет квотироваться
    #--name имя записи user/login name(логин), group name(имя группы), или
        class name(имя класса)
           #или игнорируется если --quota-type all

    #--verbose   писать лог

    Глянуть сколько осталось квот можно тремя способами
    - как указано выше, (для всех)  запустив скрипт (ftpquota --show-records)
    - залогинившись на ftp под нужным юзером и написать ftp>quote site quota,
    - можно еще использовать сообщение при логине используя директиву DisplayLogin и переменные модуля квот http://www.proftpd.org/docs/contrib/mod_quotatab.html , но у меня директива что то не захотела работать.

    Внимание! Модуль квот проверяет владельца файла и группы в соотвествии с системными UID/GUID, про виртуального владельца он  знать не знает. Поэтому при доступе с разными логинами на одну у ту же шару и выключеной опции ScanOnLogin возникают некоторые проблемы в квотах на ЮЗЕРА (USER):
    -если удалять чужие файлы с другого логина, но с системным UID таким же как у вас, то занятое место будет отниматься у вас, а у того вообще ничего не произойдет. В конце концов это приведет к тому, что у него якобы будет занято места больше(в tallytab), чем есть на самом деле(!).
    -если удалять чужие файлы с другого логина, владелец которых с другим системным UID, занятое место будет  правильно отниматься у чужого, притом фтп подумает, что владельцем файла есть тот, кто первый будет в списке proftpd.passwd (!) с таким UID.Та же история с разными системными группами...
    Как предупреждать админа о превышении квоты смотри раздел Мониторинг


      Прочее. Что такое class в proftpd

    Наборы адресов(IP,имена) можно обьеденять в классы и затем ставить для них квоты и различные права  
    proftpd.conf:
    #  <Class test1>
    #    From 192.168.0.0/16
    #    From !1.2.3.4
    #    From proxy.*.com # не забудте проверить работу днс сервера и обратный ресолвинг тоже
    #    From my.example.com #врубить UseReverseDNS on
       # по умолчанию в класс попадет то значение что первее, можно сказать между значения стоит "или"
    #    Satisfy all #позволит проверять все строки, можно сказать между значения ставит логическое "и"
    #  </Class>

    можно использовать классы для доступа и для квот,а можно и другие ограничения лепить если включен mod_ifsession
    #  <Limit ALL>
       #AllowClass DenyClass DisplayGoAway MaxClientsPerClass
    #    AllowClass internal
    #    DenyAll
    #  </Limit>

    #  <IfClass !test1>
    #    MaxClients 25
    #  </IfClass>



      Прочее. ProFTPD и IPNAT


    При использовании IPNAT возникают некоторые трудности.
    Добавляюем в proftpd.conf
    Port                            21
    # для IPNAT
    # Restrict the range of ports from which the server will select when sent the
    # PASV command from a client. Use IANA-registered ephemeral port range of
    # 49152-65534
    PassivePorts 60123 60127
    MasqueradeAddress kkkkk.dp.ua
    

    Сколько портов укажите столько и будет одновременно коннектов. kkkkk.dp.ua - ваше днс имя
    Добавляюем в ipnat.conf
    rdr tun0 195.248.xx.xx/32 port 10077 -> 10.0.0.35 port 21 tcp
    rdr tun0 195.248.xx.xx/32 port 60123 -> 10.0.0.35 port 60123 tcp
    rdr tun0 195.248.xx.xx/32 port 60124 -> 10.0.0.35 port 60124 tcp
    rdr tun0 195.248.xx.xx/32 port 60125 -> 10.0.0.35 port 60125 tcp
    rdr tun0 195.248.xx.xx/32 port 60126 -> 10.0.0.35 port 60126 tcp
    rdr tun0 195.248.xx.xx/32 port 60127 -> 10.0.0.35 port 60127 tcp
    


      Прочее. Мониторинг proftpd в jail
    Конфиг monit(в портах)  /usr/local/etc/monitrc
    check system k.dp.ua
        if loadavg (1min) > 4 then alert
        if loadavg (5min) > 2 then alert
        if memory usage > 90% then alert
        if cpu usage (user) > 95% then alert
        if cpu usage (system) > 38% then alert
        if cpu usage (wait) > 25% then alert
    
    check device usr_fs with path /jail
        if space usage > 80%  for 5 times within 10 cycles then alert
    
    # proftpd jail 10.0.0.35
    check process proftpd_jail with pidfile \
    /jail/web02.k.dp.ua/var/run/proftpd.pid
       start program = "/usr/local/etc/script/ezjail_exec_web02_proftp.sh start"
       stop program  = "/usr/local/etc/script/ezjail_exec_web02_proftp.sh  stop"
       if failed host 10.0.0.35 port 21 protocol ftp with timeout 20 seconds then 
        restart
       if 5 restarts within 8 cycles then timeout
    
    # проверка первышения квот смотри логи в /usr/jails/web02.k.dp.ua
    #/var/log/proftpd/quota.log
    check file proftpd_quota_log with path 
               /usr/jails/web02.k.dp.ua/var/log/proftpd/quota.log
        if match "removed" then exec "/usr/local/etc/script/sendxmpp В \
             proftpd_jail был удален файл закачаный больше квоты"
    

    Скрипт /usr/local/etc/script/ezjail_exec_web02_proftp.sh
    jail_id=`jls |grep web02.k.dp.ua | cut -c 4-8 -`
    /usr/sbin/jexec $jail_id /usr/local/etc/rc.d/proftpd $1
    

    Список доп литературы
    http://www.proftpd.org/docs/contrib/ftpasswd.html
    http://www.proftpd.org/docs/contrib/mod_quotatab.html
    http://www.proftpd.org/docs/howto/Quotas.html
    http://www.proftpd.org/docs/directives/linked/config_ref_Class.html
    http://linux.yaroslavl.ru/docs/serv/ProFTPD.html
    http://www.lissyara.su/articles/freebsd/programms/proftpd+mysql/
    http://www.opennet.ru/base/net/proftpd_setup.txt.html
    http://www.opennet.ru/base/net/adv_proftpd.txt.html
    http://uvsw.narod.ru/project/proftpd.html
    http://www.opennet.ru/base/net/proftpd_mysql_quota.txt.html
    http://unixforum.org/index.php?showtopic=107132



    Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=25932.

    размещено: 2010-04-30,
    последнее обновление: 2010-05-19,
    автор: gonzo111

    оценить статью:

    MASiK, 2010-08-30 в 13:12:22

    Создание групп
    #ftpasswd --group --name=group-name --gid=group-id --member=user-member1 \\
                  --file $dir1/usr/local/etc/proftpd.passwd

    Наверно всё таки
    /usr/local/etc/proftpd.group

    А в остальном хорошая статья )
    Всё работает спасибо )


    Оставьте свой комментарий:
    Ваше имя:   *
    e-mail:  
    жирный
    наклонный
    подчёркнутый
    ссылка
    цвет
    Нынешний год:   *
     


  • Хостинг HOST-FOOD

    2014-07-27, lissyara
    gmirror

    Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
    2013-08-20, zentarim
    Scan+Print server FreeBSD 9

    Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
    2011-11-20, BlackCat
    Разъём на WiFi-карту

    Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
    2011-09-14, manefesto
    Настройка git+gitosis

    Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
    2011-08-14, zentarim
    Wi-FI роутер + DHCP + DNS

    Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
    2011-06-15, -ZG-
    Охранная система на FreeBSD+LPT

    В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
    2011-03-13, terminus
    ng_nat

    Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
    2011-02-20, Капитан
    Nagios+Digitemp

    Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
    2011-02-17, Le1
    Zyxel Configuration

    Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
    2011-02-16, fox
    hast carp zfs ucarp cluster

    HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
    2011-02-04, BlackCat
    Восстановление ZFS

    История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
    2011-02-03, Капитан
    1-Wire

    Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
    2011-01-28, Капитан
    Температура в серверной

    Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
    2011-01-21, m4rkell
    Syslog server

    Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
    2011-01-07, lissyara
    Canon/gphotofs

    Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
    2010-12-13, Al
    IPSec

    Описание принципов работы IPSEC и способов аутентификации.
    2010-12-07, manefesto
    FreeBSD on flash

    Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
    2010-12-05, Fomalhaut
    root ZFS, GPT

    Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
    2010-09-05, Cancer
    Настройка аудиоплеера на ximp3

    Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
    2010-08-31, Cancer
    Установка и настройка OpenVPN

    На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
    2010-08-25, manefesto
    freebsd lvm

    Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
    2010-04-30, gonzo111
    proftpd file auth&quota

    Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
    2010-04-22, lissyara
    tw_cli

    Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
    2010-04-14, fox
    MySQL Master+Master

    MySQL (Master Master) and (Master Slave) Как настроить репликацию…
    2010-03-09, terminus
    DNS zones

    Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
    2010-03-09, aspera
    Squid+AD (group access)

    Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
    2010-03-02, BlackCat
    Шлюз: Часть 4

    Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
    2010-03-01, BlackCat
    Шлюз: Часть 3

    Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
    2010-03-01, BlackCat
    Шлюз: Часть 2

    Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
    2010-03-01, BlackCat
    Шлюз: Часть 1

    Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
    2010-02-23, Morty
    darkstat

    Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
    подписка

        вверх      
    Статистика сайта
    Сейчас на сайте находится: 22 чел.
    За последние 30 мин было: 110 человек
    За сегодня было
    13321 показов,
    834 уникальных IP
     

      Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
      Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.0461 секунд
    Из них PHP: 38%; SQL: 62%; Число SQL-запросов: 77 шт.
    Исходный размер: 186482; Сжатая: 29973