суббота, 13 декабря 2014 г.


Восстановление таблицы MySQL

Как-то раз после очередного переноса виртуальной машины с одного сервера на другой, повредилась таблица MySQL. В PHPMYADMIN, при обращении к таблице выдавалась следующая ошибка:

Ответ MySQL:
#145 - Table './snmptt/cabletesteveryport' is marked as crashed and should be repaired



Для восстановления таблицы воспользуемся командной строкой:
1. Проверяем всю базу данных monitorallne
#mysqlcheck -uroot -p --databases monitorallne 
...
monitorallne.2pingstatus
warning : Table is marked as crashed
warning : 1 client is using or hasn't closed the table properly
error : Checksum for key: 2 doesn't match checksum for records
error : Corrupt
...

В выводе присутствуют ошибки, связанные с таблицей 2pingstatus

2. Восстанавливаем поврежденную таблицу:
#mysqlcheck -r -uroot -p monitorallne 2pingstatus

В другой базе snmptt при проверке обнаружились такие ошибки:

1. Проверка таблицы

#mysqlcheck -uroot -p snmptt
...
snmptt.cabletesteveryport
warning : Table is marked as crashed
warning :  client is using or hasn't closed the table properly
error : Record at pos: 45860564 is not remove-marked
error : record delete-link-chain corrupted
error : Corrupt
…


2. Восстанавливаем по той же схеме:
#mysqlcheck -r -uroot -p snmptt cabletesteveryport

понедельник, 10 ноября 2014 г.



Увеличение лимитов на количество одновременно передаваемых параметров в POST или GET запросах.


По умолчанию в современных настройках PHP установлено ограничение: количества передаваемых POST или GET параметров. Количество параметров определяется директивой max_input_vars и должно быть не более 1000. Это видно из вывода команды phpinfo():
 


Данныая директива используется в PHP версии 5.3.9 и старше. Директива является мерой против атак Hash Collision DoS, которые могут привести к отказу в обслуживании при отправке большого количества входящих параметров.

Для снятия этих ограничений необходимо подправить файл /etc/php.ini

Открываем файл:
#nano /etc/php.ini

Ищем строчку max_input_vars и ставим значение 10000.
max_input_vars = 10000Если строчки с таким параметром нет, то ее можно добавить.

Рестартуем сервер Apache
# service httpd restart



воскресенье, 24 августа 2014 г.

Разрешаем доступ к WEB-серверу Apache только с определенных сетей

1) Открываем конфигурационный файл Apache

2) Правим файл
Меняем блок
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

на

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 10.0.0.0/8
</Directory>


Затем меняем блок
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
#    AllowOverride None
    AllowOverride All
#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all
</Directory>

на

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 10.200.0.0/16
</Directory>

3) Рестуртуем сервис Apache


четверг, 7 августа 2014 г.

Установка и настройка SIP коммуникатора Jitsi

Скачать программу Jitsi можно по адресу https://jitsi.org/Main/Download 

Установка программы. 

Запускаем инсталлятор.

Дожидаемся стартового окна:

Нажимаем «Next».
Ставим галочку «I accept…» и снова нажимаем «Next.
Корректируем при необходимости путь установки и нажимаем "Next".
Убираем галочку «XMPP» и снова нажимаем «Next».
Для продолжения нажимаем «Install».

После завершения установки наблюдаем окно:
Нажимаем «Finish». При этом запуститься программа Jitsi.
 
Настройка программы.

После первого запуска программа имеет два окна:

Первое окошко можно закрывать. 
Настраивать будем через меню: «Инструменты»  «Опции». 
После выбора этого пункта меню появляется окно со списком аккаунтов:


Нажимаем кнопку «Добавить»
В открывшемся окне выбираем Сеть: SIP и заполняем первичные данные авторизации (идентификатор SIP и Пароль):
Нажимаем кнопку «Расширенные»
Вписываем отображаемое имя
Выбираем вкладку «Соединение».
Вписываем IP регистратора и порт.
Указываем Имя для авторизации.
Убираем галочку «Автоматическая настройка прокси-сервера» и заполняем данные прокси-сервера – IP адрес и Порт.
Снимаем галку «Индикация наличия сообщения (MWI)
Нажимаем кнопку «Следующий»
Нажимаем кнопку «Войти». Произойдет подключение к серверу SIP.
Видим статус SIP аккаунта – Online.
Можно закрыть это окно.
В окне контактов статус изменился автоматически.

 
Совершение вызовов

При входящем вызове теперь мы увидим окно:
Нажимаем на кнопку поднятия трубку (зеленая трубка) и разговариваем.

При исходящем вызове номер телефона можно вводить сразу в окне поиска или воспользоваться виртуальной клавиатурой.


суббота, 26 июля 2014 г.



Авторизация пользователя через FREERADIUS с использованием внешних скриптов.

Возникла задача производить авторизацию пользователя на BRAS в зависимости от имени пользователя, пароля и IP адреса BRAS (NAS-IP-Address). Задача может быть решена с использованием внешних скриптов, подключаемых в FREERADIUS с помощью команды Exec-Program-Wait и принимающих решение о авторизации.

1. Устанавливаем пакет FREERADIUS
#yum install freeradius freeradius-utils –y

2. Запускаем демон
#service radiusd start

3. Добавляем в автозагрузку демон radiusd
#chkconfig --level 35 radiusd on

4. Для проверки работы FREERADIUS в файле /etc/raddb/users создаем пользователя:
#nano /etc/raddb/users
Добавляем в конец файла:
testuser Cleartext-Password := "12345"
    Service-Type = Framed-User,
    Framed-Protocol = PPP,
    Framed-IP-Address = 172.16.3.33,
    Framed-IP-Netmask = 255.255.255.0

Здесь создаем пользователя testuser c паролем 12345, которому будет разрешена авторизация и будет выдан IP адрес 172.16.3.33
Затем перезапускаем службу freeradius (radiusd)
#service radiusd restart
Теперь проверяем, что авторизация работает. Используем отладочную команду:
[root@roslin ~]# radtest testuser 12345 localhost 1812 testing123
Sending Access-Request of id 37 to 127.0.0.1 port 1812
User-Name = "testuser"
User-Password = "12345"
NAS-IP-Address = 127.0.0.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=37, length=44
Service-Type = Framed-User
Framed-Protocol = PPP
Framed-IP-Address = 172.16.3.33
Framed-IP-Netmask = 255.255.255.0

Здесь:
testuser - логин
12345 - пароль
testing123 – секрет (по умолчанию в FREERADIUS он именно такой)
Проверка закончена. FREERADIUS в принципе работает.

ПРИМЕЧАНИЕ:
Иногда авторизация не проходит и выдается ошибка:
[root@test ~]# radtest testuser 12345 localhost 1812 testing123
radclient:: Failed to find IP address for test
radclient: Nothing to send.
Это значит, что имя тестового сервера test, на котором запускается команда не удалось определить. Исправляется это добавлением имени test в файл hosts
[root@test ~]# echo "127.0.0.1 test" >> /etc/hosts
[root@test ~]# radtest testuser 12345 localhost 1812 testing123
Sending Access-Request of id 195 to 127.0.0.1 port 1812
        User-Name = "testuser"
        User-Password = "12345"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=195, length=44
        Service-Type = Framed-User
        Framed-Protocol = PPP
        Framed-IP-Address = 172.16.3.33
        Framed-IP-Netmask = 255.255.255.0
[root@test ~]#

5. Создаем скрипт, который будет принимать решение о авторизации на основе входных данных:
- Логина
- Пароля
-IP адреса BRAS (NAS-IP-Address)
# touch script1.sh
# chmod +x script1.sh

Пример простого скрипта, который разрешает авторизацию, если IP адрес NAS порта равен 127.0.0.1, логин начинается на “s”, а пароль начинается на «pass».
#!/bin/bash
if [ ${1:0:1} == "s" ]
then
    if [ $3 == "127.0.0.1" ]
    then
        if [ ${2:0:4} == "pass" ]
        then
           echo "Framed-IP-Address = 172.16.3.33, Reply-Message = 'OK'"
           exit 0
        else
           echo "Reply-Message = 'NO'"
           exit 1
        fi
    else
       echo "Reply-Message = 'NO'"
       exit 1
    fi
else
    echo "Reply-Message = 'NO'"
    exit 1
fi


В случае положительного решения скрипт должен выдавать код завершения программы – «0», в случае отрицательного решения – код «1».
Проверка работы скрипта:
[root@roslin raddb]# ./script1.sh samara password 127.0.0.1
Framed-IP-Address = 172.16.3.33, Reply-Message = 'OK'
[root@roslin raddb]# ./script1.sh penza password 127.0.0.1
Reply-Message = 'NO'
[root@roslin raddb]# ./script1.sh samara paswd 127.0.0.1
Reply-Message = 'NO'
[root@roslin raddb]# ./script1.sh samara password 127.0.0.4
Reply-Message = 'NO'

Естественно в скрипт можно накрутить любую логику работы ( в том числе со сложными запросами в базу данных MySQL и пр).

6. Используем команду Exec-Program-Wait и вносим изменения в файл /etc/raddb/users
#nano /etc/raddb/users
Добавляем следующий блок:
DEFAULT Auth-Type := Accept
Service-Type = Framed-User,
Framed-Protocol = PPP,
Exec-Program-Wait = "/etc/raddb/script1.sh %u %{User-Password} %{NAS-IP-Address}"

Здесь командой Exec-Program-Wait скрипту /etc/raddb/script1.sh передаются переменные – логин (%u), пароль (%{User-Password}) и IP адрес NAS (%{NAS-IP-Address}). Если скрипт выдает 0 – авторизация разрешается, если 1 – запрещается.

7. Проверяем авторизацию:
Успешная авторизация:
[root@roslin raddb]# radtest samara password localhost 1812 testing123
Sending Access-Request of id 87 to 127.0.0.1 port 1812
User-Name = "samara"
User-Password = "password"
NAS-IP-Address = 127.0.0.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=87, length=42
Service-Type = Framed-User
Framed-Protocol = PPP
Framed-IP-Address = 172.16.3.33
Reply-Message = "OK"

Неуспешная авторизация при неверном пароле:
[root@roslin raddb]# radtest samara sdf87dfg localhost 1812 testing123
Sending Access-Request of id 212 to 127.0.0.1 port 1812
User-Name = "samara"
User-Password = "sdf87dfg"
NAS-IP-Address = 127.0.0.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=212, length=24
Reply-Message = "NO"

Неуспешная авторизация при неверном пароле:
[root@roslin raddb]# radtest samara pas2sword localhost 1812 testing123
Sending Access-Request of id 218 to 127.0.0.1 port 1812
User-Name = "samara"
User-Password = "pas2sword"
NAS-IP-Address = 127.0.0.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=218, length=24
Reply-Message = "NO"

Неуспешная авторизация при неверном IP адресе NAS:
[root@roslin raddb]# radtest samara password localhost 1812 testing123 0 127.0.0.2
Sending Access-Request of id 113 to 127.0.0.1 port 1812
User-Name = "samara"
User-Password = "password"
NAS-IP-Address = 127.0.0.2
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=113, length=24
Reply-Message = "NO"


8. Результат достигнут, FREERADIUS проверяет возможность авторизации через внешний скрипт. Далее необходимо настраивать работу системы с реальным оборудованием.

пятница, 25 июля 2014 г.



Использование NMAP для быстрого обнаружения большого количества хостов в сети.

Установка NMAP в CentOS 6.5

#yum install nmap

Использование NMAP

NMAP предназначен в первую очередь для сканирования хостов в сети с целью обнаружить открытые порты, работающие сервисы на портах и пр. В нашей задаче это не нужно. Нужно просто определить, какие IP адреса в сети доступны, а какие нет.

Создадим файл, содержащий сети для опроса:
#touch /root/IP-Target

Занесем туда несколько сетей:
# echo "10.200.72.0/24" >> /root/IP-Target
# echo "10.200.16.0/24" >> /root/IP-Target
# echo "10.200.71.0/24" >> /root/IP-Target


Выполним сканирование методом обычного ICMP пинга:
#nmap -sn -iL /root/IP-Target
Ключ –sn дает команду NMAP применить простое IСMP сканирование хостов.
С помощью ключа –iL мы указываем NMAP файл с IP адресами (сетями) для сканирования.

Пример вывода:
#nmap -sn -iL /root/IP-Target
Starting Nmap 5.51 ( http://nmap.org ) at 2014-07-25 11:02 MSK
Nmap scan report for 10.200.72.1
Host is up (0.0016s latency).
Nmap scan report for 10.200.72.2
Host is up (0.0024s latency).
…
Nmap scan report for SMA-UKGD-R1.samara-ttk.ru (10.200.16.254)
Host is up (0.00071s latency).
MAC Address: 00:1F:CA:F6:0B:1B (Cisco Systems)
…
Nmap scan report for 10.200.71.254
Host is up (0.0040s latency).
Nmap done: 768 IP addresses (197 hosts up) scanned in 6.96 seconds


Для более быстрого сканирования отключим функцию определения имени по IP адресу с помощью DNS (опция –n)
#nmap -sn -n -iL /root/IP-Target
Starting Nmap 5.51 ( http://nmap.org ) at 2014-07-25 11:11 MSK
Nmap scan report for 10.200.72.1
Host is up (0.0016s latency).
Nmap scan report for 10.200.72.2
Host is up (0.0024s latency).
…
Nmap scan report for 10.200.16.254
Host is up (0.00050s latency).
MAC Address: 00:1F:CA:F6:0B:1B (Cisco Systems)
…
Nmap scan report for 10.200.71.254

Host is up (0.00071s latency).
Nmap done: 768 IP addresses (197 hosts up) scanned in 6.98 seconds


Еще увеличить скорость сканирования можно используя следующие опции:
--initial-rtt-timeout (Типовое время RTT прохождения пакета по сети до хоста и обратно. По умолчанию – 1 секунда. На реальной сети рекомендуют взять типовое RTT умноженное на два.)
--max-rtt-timeout (Максимальное время RTT прохождения пакета по сети до хоста и обратно. По умолчанию – 10 секунд. На реальной сети рекомендуют взять типовое RTT умноженное на четыре.)
--host-timeout (Устанавливается значение времени, по прошествии которого хост считается не доступным)
--max-scan-delay (Максимальное время ожидания между отсылкой пакетов. По умолчанию – секунда. При хорошей сети можно уменьшить в 2-5 раз по сравнению с типовым – 1 секунда).
Для нашей сети используем следующие параметры
--initial-rtt-timeout 10ms
--max-rtt-timeout 20ms
--host-timeout 5s
--max-scan-delay 300ms
Пример вывода:
#nmap -sn -n --initial-rtt-timeout 10ms --max-rtt-timeout 20ms --host-timeout 5s --max-scan-delay 300ms -iL /root/IP-Target
Starting Nmap 5.51 ( http://nmap.org ) at 2014-07-25 11:29 MSK
Nmap scan report for 10.200.72.1
Host is up (0.0016s latency).
Nmap scan report for 10.200.72.2
Host is up (0.0024s latency).
…
Nmap scan report for 10.200.16.254
Host is up (0.00058s latency).
MAC Address: 00:1F:CA:F6:0B:1B (Cisco Systems)
…
Nmap scan report for 10.200.71.254
Host is up (0.035s latency).
Nmap done: 768 IP addresses (197 hosts up) scanned in 3.15 seconds

По сравнению с предыдущим разом скорость сканирования выросла почти в два раза.

Вывод программы удобно поместить в файл. Это делается с помощью опции –oN <имя файла>.
Пример команды с записью результатов в файл /root/123
#nmap -sn -n --initial-rtt-timeout 10ms --max-rtt-timeout 20ms --host-timeout 5s --max-scan-delay 300ms -oN /root/123 -iL /root/IP-Target

Как можно заметить в выводе программы NMAP присутствуют только доступные IP адреса. Для того что бы получить подробный вывод и узнать перечень IP адресов, которые недоступны, включаем с помощью опции –v расширенный вывод.
# nmap -v -sn -n --initial-rtt-timeout 10ms --max-rtt-timeout 20ms --host-timeout 5s --max-scan-delay 300ms -oN /root/123 -iL /root/IP-Target
Starting Nmap 5.51 ( http://nmap.org ) at 2014-07-25 22:32 MSK
Initiating Ping Scan at 22:32
Scanning 256 hosts [4 ports/host]
Completed Ping Scan at 22:32, 1.21s elapsed (256 total hosts)
Nmap scan report for 10.200.72.0 [host down]
Nmap scan report for 10.200.72.1
Host is up (0.0017s latency).
Nmap scan report for 10.200.72.2
Host is up (0.0025s latency).
…
Nmap scan report for 10.200.16.254
Host is up (0.00046s latency).
MAC Address: 00:1F:CA:F6:0B:1B (Cisco Systems)
…
Nmap scan report for 10.200.71.253 [host down]
Nmap scan report for 10.200.71.254
Host is up (0.00065s latency).
Nmap scan report for 10.200.71.255 [host down]
Read data files from: /usr/share/nmap
Nmap done: 768 IP addresses (197 hosts up) scanned in 2.70 seconds
Raw packets sent: 3347 (120.500KB) | Rcvd: 220 (6.352KB)


Для более наглядного перечня доступных и не доступных IP адресов можно воспользоваться grep
#nmap -v -sn -n --initial-rtt-timeout 10ms --max-rtt-timeout 20ms --host-timeout 5s --max-scan-delay 300ms -oN /root/123 -iL /root/IP-Target | grep "Nmap scan report for"
Nmap scan report for 10.200.72.0 [host down]
Nmap scan report for 10.200.72.1
Nmap scan report for 10.200.72.2
Nmap scan report for 10.200.72.3
Nmap scan report for 10.200.72.4
…
Nmap scan report for 10.200.71.252 [host down]
Nmap scan report for 10.200.71.253 [host down]
Nmap scan report for 10.200.71.254
Nmap scan report for 10.200.71.255 [host down]

В выводе команды недоступные хосты помечены как [host down], доступные не имеют такой пометки.

Полезные ссылки:
http://nmap.org/man/ru/

суббота, 19 июля 2014 г.

Утилита halberd для анализа распределения трафика сервера по хостам.

Ссылка на GITHUB:
https://github.com/jmbr/halberd

Установка утилиты на сервер Linux CentOS:
1. Скачиваем
#wget https://github.com/jmbr/halberd/archive/master.zip

2. Распаковываем
#unzip master.zip
(Если вдруг нет команды Unzip, то ее можно легко установить
yum install unzip)

3. Заходим в папку с программой:
#cd halberd-master/

4. Устанавливаем:
# python setup.py install
running install
running build
....
copying build/scripts-2.6/halberd -> /usr/bin
changing mode of /usr/bin/halberd to 755
running install_data
error: can't copy 'man/man1/halberd.1': doesn't exist or not a regular file
У меня команда завершилась с ошибкой, но при этом все работало.


Использование Утилиты
# halberd <имя сервера>
Пример:
[root@test tests]# halberd 2ip.ru
halberd 0.2.4 (14-Aug-2010)

INFO looking up host 2ip.ru...
INFO host lookup done.
INFO 2ip.ru resolves to 188.40.74.10
INFO 2ip.ru resolves to 188.40.74.9
188.40.74.10     [##########]  clues:   3 | replies: 236 | missed:   1

================================================================
http://2ip.ru (188.40.74.10): 1 real server(s)
================================================================

server 1: Apache/2.2.22
----------------------------------------------------------------

difference: 14227 seconds
successful requests: 236 hits (100.00%)
cookie(s):
  PHPSESSID=086fm1be6b3htbm4q8ihsnvm51; path=/
  IP[1405427044]=83.234.168.49; expires=Mon, 13-Oct-2014 12:24:04 GMT; path=/; domain=.2ip.ru
header fingerprint: 0c9269e50c1153d7a2eef6519e09912704ef4a3a
188.40.74.9      [##########]  clues:   2 | replies: 245 | missed:   0

================================================================
http://2ip.ru (188.40.74.9): 1 real server(s)
================================================================

server 1: Apache/2.2.16
----------------------------------------------------------------

difference: 14227 seconds
successful requests: 245 hits (100.00%)
cookie(s):
  PHPSESSID=pg9av4umbe30bcgjnu2dtjhi64; path=/
  IP[1405427053]=83.234.168.49; expires=Mon, 13-Oct-2014 12:24:13 GMT; path=/; domain=.2ip.ru
header fingerprint: 5cb092b03b806f674e47e52225193bea78f1785d


Вывод справки по программе:
# halberd --help

понедельник, 14 июля 2014 г.

Установка RUBY 2.1.2 и RUBY ON RAILS на Ubuntu 14.04

1) Обновляемся:
#sudo apt-get update

2) Устанавливаем RVM (Ruby Version Manager). 
Это программа позволяющая использовать несколько версий Ruby на одной машине. 
#curl -L get.rvm.io | bash -s stable

3) Запускаем RVM
#source /home/rossyp/.rvm/scripts/rvm

4) Смотрим, что на рекомендуют установить дополнительно на нашу машину:
#rvm requirements
rossyp@ur:~$ rvm requirements
Checking requirements for ubuntu.
Installing requirements for ubuntu.
Updating system..............
Installing required packages: g++, gcc, make, libc6-dev, libreadline6-dev, zlib1g-dev, libssl-dev, libyaml-dev, libsqlite3-dev, sqlite3, autoconf, libgdbm-dev, libncurses5-dev, automake, libtool, bison, pkg-config, libffi-dev.............................
Requirements installation successful.

5) Устанавливаем рекомендованные пакеты
#sudo apt-get install  g++ gcc make libc6-dev libreadline6-dev zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool bison pkg-config libffi-dev

6) Дополнительно ставим:
#sudo apt-get install nodejs

7) Устанавливаем стабильную на текущий момент версию  RUBY
#rvm install 2.1.2

8) Выбираем ее для использования по умолчанию
#rvm use 2.1.2 --default

9)Устанавливаем rubygems
#rvm rubygems current

10) и наконец устанавливаем
#gem install rails

11) Проверяем версий
$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
$ rails -v
Rails 4.1.4


Установка RUBY 2.1.2 и RUBY ON RAILS на CentOS 6.5

1) Устанавливаем CURL
#yum install curl

2) Устанавливаем RVM (Ruby Version Manager). 
Это программа позволяющая использовать несколько версий Ruby на одной машине. 
#curl -L get.rvm.io | bash -s stable

3)Запускаем RVM
#source /etc/profile.d/rvm.sh

4) Смотрим, что на рекомендуют установить
# rvm requirements
Checking requirements for centos.
Installing requirements for centos.
Updating system.
Installing required packages: patch, libyaml-devel, libffi-devel, patch, libtool, bison........
Requirements installation successful.

5) Устанавливаем, что рекомендуют
#yum install patch libyaml-devel libffi-devel patch libtool bison

6) Устанавливаем стабильную версию  RUBY
#rvm install 2.1.2

7) Выбираем ее для использования по умолчанию
#rvm use 2.1.2 --default

8) Устанавливаем rubygems
#rvm rubygems current

9) и наконец устанавливаем
#gem install rails

10) Проверяем версии
# ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
# rails -v
Rails 4.1.4


пятница, 27 июня 2014 г.


Управление оборудованием Cisco через PHP (WEB) с помощью RSH.
1. Настройка маршрутизатора Cisco

1.1 Разрешаем глобально протокол RSH
R(config)# ip rcmd rsh-enable

1.2 Отключаем функцию определения IP адреса по DNS в протоколе RSH
R(config)# no ip rcmd domain-lookup
Данная команда может не отражаться в конечной конфигурации

1.3 Определяем с какого адреса, какой пользователь может работать по протоколу RSH
R(config)#ip rcmd remote-host main 10.200.2.5 www-data enable
Здесь main – имя пользователя на маршрутизаторе Cisco с привилегиями достаточными для выполнения команд.
10.200.2.5 – IP адрес сервера, с которого будут посылаться команды на выполнение на маршрутизаторе
www-data – имя пользователя на сервер 10.200.2.5, от имени которого будут запускаться команды на выполнение
Для настройки можно выполнить еще такую команду:
R(config)#ip rcmd remote-host main 10.200.2.5 root enable
В этом случае мы из под root в командной строке сможем давать команды RSH в сторону Cisco

1.4 Пользователь main должен быть создан на маршрутизаторе. Если такого пользователя нет, то его необходимо создать:
R(config)# username main privilege 15 password 7 ХХХХХХХХХХХ

1.5 Проверяем, что на vty интерфейсах разрешен протокол rsh.
Можно разрешить любой протокол:
R(config)#line vty 0 4
R(config-line)#transport input all

Или настроить доступ с помощью access-list.

2. Устанавливаем нужное программное обеспечение на сервер

2.1 Устанавливаем пакет из репозитария
Для CentOS:
#yum install rsh
Для Debian:
#apt-get install rsh-redone-client rsh-redone-server

2.2 Открываем порты для RSH
# iptables -I INPUT -p tcp --dport 1022:1023 -j ACCEPT
Не забываем сохранить настройки iptables.

3. Теперь выполняем на сервере команду и радуемся
Пример:
root@lg:~# rsh -l main 10.200.255.12 sh run int Loopback800
Building configuration...
Current configuration : 127 bytes
!
interface Loopback800
description >PPPoE outside<
ip vrf forwarding INTERNET
ip address 10.1.255.255 255.255.255.255
end
root@lg:~#

4. Для выполнения того же самого через php вставляем в WEB-страницу следующий код:
<?php
$s = passthru('rsh -l main 10.200.255.15 "sh users | i 10S0661"');
echo $s;
?>
Радуемся еще раз :)

среда, 25 июня 2014 г.


Как узнать какой дистрибутив Linux установлен на машине.

1. Можно попробовать одну из команд:

# cat /etc/*release
# cat /etc/*version
# cat /etc/issue


2. В Debian дистрибутивах, команд из п. 1 может не быть. Можно попробовать вот так:

# cat /etc/debian_version

3. Универсальный способ узнать имя дистрибутива – посмотреть вывод команды gcc:

# gcc --v





среда, 28 мая 2014 г.


Установка и настройка RRDtool в CentOS 6.

RRD это аббревиатура для Round Robin Database. RRD это система для хранения и отображения данных временного ряда, таких как пропускная способность сети, температура, загруженность сервера. Данные хранятся в очень компактном виде и не расширяются со временем очень значительно, а данные выводятся в виде удобных графиков.

Устанавливаем необходимые зависимости, для того, что бы было возможно установить RRDtool
#yum install cairo-devel libxml2-devel pango-devel pango libpng-devel freetype freetype-devel libart_lgpl-devel

Переходим в папку /opt/. Сюда будет устанавливаться программа RRDtool
#cd /opt 

Скачиваем архив с исходными кодами

Распаковываем
#tar -zxvf rrdtool.tar.gz

Вводим команды:
# export PKG_CONFIG_PATH=/usr/lib/pkgconfig/
# cd rrdtool-1.4.8/

Конфигурируем:
# ./configure
Если команда ./configure выполняется с ошибкой.
configure: error: in `/opt/rrdtool-1.4.8':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
…
То решается проблема установкой компилятора gcc:
#yum install gcc
Правильное завершение команды ./configure
…
Type 'make' to compile the software and use 'make install' to
install everything to: /opt/rrdtool-1.4.8.
... that wishlist is NO JOKE. If you find RRDtool useful
make me happy. Go to http://tobi.oetiker.ch/wish and
place an order.
-- Tobi Oetiker <tobi@oetiker.ch>
----------------------------------------------------------------

Сборка пакета:
# make

Если команда выполнилась с ошибкой:
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 1.
BEGIN failed--compilation aborted at Makefile.PL line 1.
make[3]: *** [perl-piped/Makefile] Ошибка 2
make[3]: Leaving directory `/opt/rrdtool-1.4.8/bindings'
make[2]: *** [all-recursive] Ошибка 1
make[2]: Leaving directory `/opt/rrdtool-1.4.8/bindings'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/opt/rrdtool-1.4.8'
make: *** [all] Ошибка 2
То решается проблема установкой пакета perl-ExtUtils-MakeMaker
# yum install perl-ExtUtils-MakeMaker
Теперь команда make выполняется без ошибок.

Далее - установка пакета RRDtool
# make install
Установка программы происходит в /opt/rrdtool-1.4.8/bin/

Для удобства дальнейшей работы делаем символическую ссылку:
#ln -s /opt/rrdtool-1.4.8/bin/rrdtool /usr/bin/rrdtool

Для проверки работы идем в папку с исходниками и запускаем для проверки скрипт stripes.pl
# cd /opt/rrdtool-1.4.8/examples/
# ./stripes.pl
Создастся файл stripes.png, который перемещаем в корень WEB-сервера, командой
# cp stripes.png /var/www/html/stripes.png
Открыв браузер и обратившись к серверу так:http://10.200.16.230/stripes.png , где 10.200.16.230 – IP адрес сервера, на котором работаем. мы увидим сгенерированный рисунок:



Значит все работает.

Иногда при выполнении скрипта stripes.pl, выходят ошибки:
# ./stripes.pl
(process:20256): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='common'
(process:20256): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='latin'
This script has created stripes.png in the current directory
This demonstrates the use of the TIME and % RPN operators

Демонстрационный файл создается, но текст на рисунке не отображается:


Проблема решается установкой пакета dejavu-lgc-sans-fonts 
#yum install dejavu-lgc-sans-fonts
Теперь генерация рисунка происходит успешно.

воскресенье, 25 мая 2014 г.

Установка и настройка TFTP сервера в CentOS

Устанавливаем TFTP сервер и TFTP клиент
#yum install tftp-server
#yum install tftp

Добавляем пользователя tftp сервера
#adduser tftpd
#chown tftpd:tftpd /var/lib/tftpboot

Директория, которая, будет корневой у TFTP сервера:
/var/lib/tftpboot
Пока тут пусто.

Разрешаем коннект к TFTP серверу. Открываем порт 69 в iptables
#iptables -I INPUT -p udp --dport 69 -j ACCEPT
#service iptables save

Редактируем конфигурационный файл TFTP сервера:
#nano /etc/xinetd.d/tftp
Здесь меняем две переменные: server_args и disable.
Переменным задаем следующие значения:
   server_args   = -c -p -u tftpd -U 117 -s /var/lib/tftpboot
   disable       = no

Стартуем сервер TFTP. Отдельного такого сервера нет, он работает вместе с сервером xinetd.
Поэтому запускаем его.
#service xinetd start
#chkconfig xinetd on

Проверка работы
1. С роутера Cisco сохраняем конфигурацию:
R2#copy running-conf tftp://10.200.16.222
Address or name of remote host [10.200.16.222]?
Destination filename [r2-confg]?
!!
32003 bytes copied in 0.352 secs (90918 bytes/sec)
Здесь адрес 10.200.16.222 - это адрес нашего TFTP сервера
2. Проверка с машины, на которой установлен TFTP сервер:
- Создаем тестовый файл, к примеру 123.
#touch 123
- Подключаемся к серверу 
#tftp 127.0.0.1
- Заливаем файл на сервер командой put
tftp>put 123
3. Проверяем, что в папке /var/lib/tftpboot, что-то появилось:
# ls -l /var/lib/tftpboot
итого 36
-rw-rw---- 1 tftpd tftpd     9 Май 25 22:07 123
-rw-rw---- 1 tftpd tftpd 32003 Май 25 22:07 r2-confg

вторник, 20 мая 2014 г.

Файл htaccess сервера Apache и запрет автоматического открывания файла браузером.

Иногда необходимо с помощью web-сервера Apache ограничить доступ пользователя к какой-то определенной директории или изменить поведение сервера Apache для определенной папки. Это делается добавлением файла .htaccess в директорию и записью в файл определенных команд.

Мне потребовалось сделать так, что бы при обращении пользователя по ссылке к файлам из определенной директории, файл не открывался браузером автоматически сразу, а предлагал диалоговое окно: скачать файл или запустить файл или что бы браузер просто скачивал файл.

Что бы вообще в принципе читался файл .htaccess и воспринимались команды из этого файла необходимо в настройках Apache в файле /etc/httpd/conf/httpd.conf заменить в разделе <Directory "/var/www/html">:
AllowOverride None 
на 
AllowOverride All

Затем создать сам файл .htaccess
touch /var/www/html/.htaccess

Запустить любимый редактор nano
nano /var/www/html/.htaccess

И добавить в файл строки:
AddType application/octet-stream .pdf
AddType application/octet-stream .mp3
<files *.mp3>
forceType application/octet-stream
Header set Content-Disposition attachment
</files>

Перезапустить apache
service httpd restart

Теперь файлы mp3 и PDF будут скачиваться без автоматического открытия файла.

воскресенье, 11 мая 2014 г.


Установка пакета mp3info в CentOS 6.5

Потребовалось недавно на Linux из командной строки узнавать длительность звучания Mp3 файла. Задача была решена с помощью пакета mp3info.

Процесс установки:
1. Качаем RPM пакет
#wget ftp://ftp.ibiblio.org/pub/linux/apps/sound/mp3-utils/mp3info/mp3info-0.8.5a-1.i386.rpm

2. Пробуем его установить, но получаем ошибку:
# rpm -ivh mp3info-0.8.5a-1.i386.rpm
    ошибка: Неудовлетворенные зависимости:
    libatk-1.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libc.so.6 нужен для mp3info-0.8.5a-1.i386
    libc.so.6(GLIBC_2.0) нужен для mp3info-0.8.5a-1.i386
    libc.so.6(GLIBC_2.1) нужен для mp3info-0.8.5a-1.i386
    libc.so.6(GLIBC_2.3) нужен для mp3info-0.8.5a-1.i386
    libcairo.so.2 нужен для mp3info-0.8.5a-1.i386
    libdl.so.2 нужен для mp3info-0.8.5a-1.i386
    libgdk-x11-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libgdk_pixbuf-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libglib-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libgmodule-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libgobject-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libgtk-x11-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libm.so.6 нужен для mp3info-0.8.5a-1.i386
    libncurses.so.5 нужен для mp3info-0.8.5a-1.i386
    libpango-1.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libpangocairo-1.0.so.0 нужен для mp3info-0.8.5a-1.i386


3. Выполняем установку так:
# yum install mp3info-0.8.5a-1.i386.rpm

4. Проверяем, что пакет установился и откликается на команды:
# mp3info -help
MP3Info 0.8.5a Copyright (C) 2006 Cedric Tefft and Ricardo Cerqueira

Теперь что бы узнать длительность звучания файла 26042014-161136-88463108088-9735839.mp3 нужно выполнить:
# mp3info -x /mnt/recsource/26042014-161136-88463108088-9735839.mp3
/mnt/recsource/26042014-161136-88463108088-9735839.mp3 does not have an ID3 1.x tag.
File: /mnt/recsource/26042014-161136-88463108088-9735839.mp3
Media Type: MPEG 2.5 Layer III
Audio: 16 KB/s, 8KHz (mono)
Emphasis: none
CRC: No
Copyright: No
Original: Yes
Padding: No
Length: 0:20


Длительность будет записана в строчке Length.

Полезные ссылки
http://www.ibiblio.org/mp3info/

воскресенье, 6 апреля 2014 г.

Фотографии шлюза Linksys SPA8000.

Комплектация шлюза

Вот такой он красивый



Разбираем




Вентилятор (шумит)