Архив рубрики: Администрирование
все время приходится гуглить эту строку
openssl req -nodes -new -x509 -keyout server.key -out server.cert
Конвертор MySQL2MongoDB
https://github.com/Sepuka/mysql2mongodb
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Б/с
Очень удобно когда нужно смоделировать сильнонагруженную БД или что-либо и посмотреть как на это реагирует приложение.
Быстрый прокси-сервер
1 | ssh -4 -D 8080 -p 1234 user@111.222.333.444 |
ssh -4 -D 8080 -p 1234 user@111.222.333.444
Параметр -4 тут потому что я получал ошибку bind: Cannot assign requested address
Работа с удаленными ФС
Иногда нужно смонтировать удаленную файловую систему, например, я разрабатываю ПО которое организовано в виде 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/ есть точка монтирования.