Архив рубрики: Администрирование

dialog. Управление Apache

В журнале «Системный администратор» 2005 год за февраль наткнулся на статью про использование UNIX-утилиты dialog с помощью которой можно делать ASCII-графические приложения для удобного администрирования. Тот пример который был в журнале у меня не работал, поэтому я его модернизировал и вот выкладываю.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/sh
dialog --title "Apache interface" 
    --menu "
Данный сценарий управляет web-сервером Apache.
Выберите действие из предложенных ниже:" 15 50 7 
    start "Запуск сервера Apache" 
    stop "Останов сервера Apache" 
    restart ""Жесткий" перезапуск" 
    graceful ""Мягкий" перезапуск" 
    configtest "Тест конфигурационного файла" 2>apctl.tmp
 
UCOMMAND=`cat apctl.tmp`
 
if [[ $UCOMMAND != "" ]]; then
    dialog --title "confirm command" 
        --yesno "Выполнить следующую команду ${UCOMMAND}?" 10 40
 
    if [ $? = 0 ]; then
        if [ $UCOMMAND = "configtest" ]; then
            sudo /usr/sbin/apache2ctl -S
        else
            sudo /usr/sbin/apache2ctl -k $UCOMMAND
        fi
    fi
fi
rm apctl.tmp
#!/bin/sh
dialog --title "Apache interface" 
    --menu "
Данный сценарий управляет web-сервером Apache.
Выберите действие из предложенных ниже:" 15 50 7 
    start "Запуск сервера Apache" 
    stop "Останов сервера Apache" 
    restart ""Жесткий" перезапуск" 
    graceful ""Мягкий" перезапуск" 
    configtest "Тест конфигурационного файла" 2>apctl.tmp

UCOMMAND=`cat apctl.tmp`

if [[ $UCOMMAND != "" ]]; then
    dialog --title "confirm command" 
        --yesno "Выполнить следующую команду ${UCOMMAND}?" 10 40

    if [ $? = 0 ]; then
        if [ $UCOMMAND = "configtest" ]; then
            sudo /usr/sbin/apache2ctl -S
        else
            sudo /usr/sbin/apache2ctl -k $UCOMMAND
        fi
    fi
fi
rm apctl.tmp

Не забываем поменять владельца файла

1
chown root:root ФАЙЛ
chown root:root ФАЙЛ

и дать ему SUID и сделать выполняемым

1
2
chmod 766 ФАЙЛ
chmod +S ФАЙЛ
chmod 766 ФАЙЛ
chmod +S ФАЙЛ

В итоге получаем такую картину:
После выбора нужного пункта появится подтверждение. Нужно нажимать скорее ДА, ты же не делал бы этого если бы был не уверен! Ведь правда?

Фоновое логгирование tcpdump

Пример команды для отлова «значащих» пакетов от конкретного пользователя на конкретный сайт. Размеры от 600 до 700 символов выбраны мной экспериментально. В пакетах такой величины с наибольшей долей вероятности будет содержаться логин и пароль, но конечно при условии если пользователь залогинится после запуска программы. Если он уже в системе, то можно брать cookie, но логин с паролем конечно иметь интереснее.

1
tcpdump -s 0 -l -A dst vkontakte.ru and src 192.168.0.11 and greater 600 and less 700 -w /opt/var/log/vkontakte.log &
tcpdump -s 0 -l -A dst vkontakte.ru and src 192.168.0.11 and greater 600 and less 700 -w /opt/var/log/vkontakte.log &

Привожу пример запроса которые поймался

1
2
3
4
5
6
7
8
9
10
11
12
13
14
POST /?act=login HTTP/1.1
Host: login.vk.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.12) Gecko/20101026 SUSE/3.6.12-0.7.1 Firefox/3.6.12 GTB7.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://vkontakte.ru/
Content-Type: application/x-www-form-urlencoded
Content-Length: 112
 
from_host=vkontakte.ru&captcha_key=&captcha_sid=&expire=&al_frame=1&email=user%40yandex.ru&pass=password
POST /?act=login HTTP/1.1
Host: login.vk.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.12) Gecko/20101026 SUSE/3.6.12-0.7.1 Firefox/3.6.12 GTB7.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://vkontakte.ru/
Content-Type: application/x-www-form-urlencoded
Content-Length: 112

from_host=vkontakte.ru&captcha_key=&captcha_sid=&expire=&al_frame=1&email=user%40yandex.ru&pass=password

Это просто «мем» для себя. Параметр -l здесь необходим для того чтобы при демонизации процесса с помощью & программа писала вывод в файл, если не указать, то файл останется пустым. Еще нужно помнить о том, что в этом случае мы не сможем прочитать сами запросы, они запишутся в бинарном виде. А заголовки сможем. Поэтому если нужно читать сами тела запросов, не указывайте параметр -l и не пишите в файл, а пишите на экран, там будет все видно.

p.s. Контакт давно перешел на https и с помощью этого примера поймать авторизацию не удасться

Замедление работы сети

Используя ip-relay можно замедлить сеть. Пример:

1
ip_relay -b 2048 8033:127.0.0.1:3306
ip_relay -b 2048 8033:127.0.0.1:3306

т.о. натравливаем приложение на порт 8033 и оно будет общаться с тем кто его слушает на порту 3306 через эту программу со скоростью не превышающей 2Б/с
Очень удобно когда нужно смоделировать сильнонагруженную БД или что-либо и посмотреть как на это реагирует приложение.

Работа с удаленными ФС

Иногда нужно смонтировать удаленную файловую систему, например, я разрабатываю ПО которое организовано в виде deb-пакета, причем делаю я это на rpm-based машине, т.е. устанавливать такой пакет будет затруднительно для тестирования. Можно исходные данные поместить на тестовый сервер и править текст на своем любимом редакторе на локальной машине. Пример:

1
sshfs -p 8022 shlomin@127.0.0.1:/home/user/vcard /home/user/server.gates/
sshfs -p 8022 shlomin@127.0.0.1:/home/user/vcard /home/user/server.gates/

Это вообще говоря довольно простой и известный способ, но я хотел указать на то, что специально указал порт 8022, чтобы показать что тот сервер который я хочу юзать находится во внутренней сети доступ к которую есть через третий сервер, а этот самый третий сервер я предварительно проксирую через ssh, например так:

1
sudo ssh -L 8022:192.168.77.80:22 user@server
sudo ssh -L 8022:192.168.77.80:22 user@server

получается ssh слушает 8022 и проксирует трафик через третий сервер на целевую машину 192.168.77.80 уже на 22 порт. Чтобы размонтировать ресурс, достаточно выполнить команду

1
fusermount -u /home/user/server.gates/
fusermount -u /home/user/server.gates/

где /home/user/server.gates/ есть точка монтирования.