Tech support ADM: различия между версиями
Материал из lulzette's wiki
Losted (обсуждение | вклад) Нет описания правки |
Losted (обсуждение | вклад) Нет описания правки |
||
(не показано 8 промежуточных версий этого же участника) | |||
Строка 4: | Строка 4: | ||
==Python== | ==Python== | ||
===Дебаг питона при падении=== | ===Дебаг питона при падении=== | ||
Достаточно запустить скрипт с <syntaxhighlight lang="bash" inline>PYTHONINSPECT=1</syntaxhighlight> или <syntaxhighlight lang="bash" inline>python -i</syntaxhighlight>, чтобы при смерти скрипта (естественной или сбое) вывалился шелл со всеми переменными. | Достаточно запустить скрипт с <syntaxhighlight lang="bash" inline>PYTHONINSPECT=1</syntaxhighlight> или <syntaxhighlight lang="bash" inline>python -i</syntaxhighlight>, чтобы при смерти скрипта (естественной или сбое) вывалился шелл со всеми переменными. | ||
==Bash== | |||
===dotglob=== | |||
http://xgu.ru/wiki/shopt#dotglob | |||
dotglob это опция bash'а, которая меняет поведение регулярки "*" - под "*" будут подразумеваться все файлы и папки, в т.ч. скрытые. | |||
<syntaxhighlight lang="bash"> | |||
[losted@x240 ~]$ shopt -s dotglob | |||
[losted@x240 ~]$ du -hs * | |||
4,0K .bash_history | |||
4,0K .bash_logout | |||
4,0K .bash_profile | |||
4,0K .bashrc | |||
695M books | |||
3,6G .cache | |||
1,5G .config | |||
... | |||
</syntaxhighlight> | |||
===Пробрасываем ssh ключ=== | |||
Хотим подключиться с host1 к host2 с нашим ключем на localhost. Делаем: | |||
<syntaxhighlight lang="bash"> | |||
ssh-agent bash | |||
ssh-add ~/.ssh/id_rsa | |||
ssh -A host1 | |||
host1 ~: ssh host2 | |||
host2 ~: | |||
</syntaxhighlight> | |||
===Преобразование даты из epoch в человекочитаемую=== | |||
<syntaxhighlight lang="bash" inline>date -d @123456789</syntaxhighlight> | |||
==MySQL== | |||
===Юзеры=== | |||
* Ищем юзеров | |||
<syntaxhighlight lang="sql" inline>select User,Host from mysql.user where User like "ca66833%";</syntaxhighlight> | |||
* Создаем юзера с правами | |||
<syntaxhighlight lang="sql"> | |||
CREATE USER 'ca66833_test'@'localhost' IDENTIFIED BY '123456789'; | |||
GRANT ALL PRIVILEGES ON ca66833_test.* TO 'ca66833_test'@'localhost'; | |||
flush privileges; | |||
</syntaxhighlight> | |||
=== Таблицы === | |||
* Создадим простую InnoDB таблицу | |||
<syntaxhighlight lang="sql"> | |||
create database db_innodb; | |||
use db_innodb; | |||
CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A)) ENGINE = InnoDB; | |||
</syntaxhighlight> | |||
=== etc === | |||
* Восстанавливаем рутовый доступ | |||
<syntaxhighlight lang="sql"> | |||
# В конфиге указываем: | |||
skip-grant-tables | |||
# делаем рестарт mysql и выполняем: | |||
UPDATE mysql.user SET `authentication_string` = PASSWORD('123456789') WHERE `User` = 'root'; | |||
# Убираем опцию и снова перезапускаем MySQL | |||
</syntaxhighlight> | |||
== DDoS == | |||
=== Отражение nginx'ом === | |||
Рекомендую в блокирующих правилах указывать <syntaxhighlight lang="c" inline>return 444;</syntaxhighlight>, так как в таком случае nginx не будет ничего отдавать клиенту, а будет сразу закрывать соединение при получении нехорошего запроса. | |||
=== Отражение через iptables === | |||
<syntaxhighlight lang="bash"> | |||
iptables -I INPUT -p tcp --dport 80 -m string --string "ca66833.tmweb.ru" --algo kmp -j DROP | |||
iptables -I INPUT -p tcp --dport 443 -m string --string "ca66833.tmweb.ru" --algo kmp -j DROP | |||
ip6tables -I INPUT -p tcp --dport 80 -m string --string "ca66833.tmweb.ru" --algo kmp -j DROP | |||
ip6tables -I INPUT -p tcp --dport 443 -m string --string "ca66833.tmweb.ru" --algo kmp -j DROP | |||
</syntaxhighlight> | |||
Скорее всего не сработает для 443 (https), поэтому надо дополнительно блокировать через nginx, если атака идет по https, но обычно атакуют именно http. | |||
== Почта == | |||
=== Проблемы с IMAP (courier-imap) === | |||
В папке с файлами писем удаляем все что только можно: | |||
<syntaxhighlight lang="bash" inline>rm courierimapsubscribed courierimapuiddb courierpop3dsizelist courierimapuiddb.lock</syntaxhighlight> | |||
Предварительно создав резервную копию этих файлов. Иногда еще надо удалить папку "courierimaphieracl" | |||
== libvirt == | |||
=== Запретить сон и гибернацию === | |||
<syntaxhighlight lang="xml"> | |||
<pm> | |||
<suspend-to-mem enabled='no'/> | |||
<suspend-to-disk enabled='no'/> | |||
</pm> | |||
</syntaxhighlight> | |||
=== Проверить диск и запустить виртуалку === | |||
<syntaxhighlight lang="bash" inline>virsh domblklist 123456 | grep qcow2 | awk '{print $2}' | xargs -L1 qemu-img check -r all ; virsh start 123456</syntaxhighlight> |
Текущая версия от 16:35, 11 августа 2023
Тут будут полезные штучки из моей работы будучи системным инженером.
Python
Дебаг питона при падении
Достаточно запустить скрипт с PYTHONINSPECT=1
или python -i
, чтобы при смерти скрипта (естественной или сбое) вывалился шелл со всеми переменными.
Bash
dotglob
http://xgu.ru/wiki/shopt#dotglob
dotglob это опция bash'а, которая меняет поведение регулярки "*" - под "*" будут подразумеваться все файлы и папки, в т.ч. скрытые.
[losted@x240 ~]$ shopt -s dotglob
[losted@x240 ~]$ du -hs *
4,0K .bash_history
4,0K .bash_logout
4,0K .bash_profile
4,0K .bashrc
695M books
3,6G .cache
1,5G .config
...
Пробрасываем ssh ключ
Хотим подключиться с host1 к host2 с нашим ключем на localhost. Делаем:
ssh-agent bash
ssh-add ~/.ssh/id_rsa
ssh -A host1
host1 ~: ssh host2
host2 ~:
Преобразование даты из epoch в человекочитаемую
date -d @123456789
MySQL
Юзеры
- Ищем юзеров
select User,Host from mysql.user where User like "ca66833%";
- Создаем юзера с правами
CREATE USER 'ca66833_test'@'localhost' IDENTIFIED BY '123456789';
GRANT ALL PRIVILEGES ON ca66833_test.* TO 'ca66833_test'@'localhost';
flush privileges;
Таблицы
- Создадим простую InnoDB таблицу
create database db_innodb;
use db_innodb;
CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A)) ENGINE = InnoDB;
etc
- Восстанавливаем рутовый доступ
# В конфиге указываем:
skip-grant-tables
# делаем рестарт mysql и выполняем:
UPDATE mysql.user SET `authentication_string` = PASSWORD('123456789') WHERE `User` = 'root';
# Убираем опцию и снова перезапускаем MySQL
DDoS
Отражение nginx'ом
Рекомендую в блокирующих правилах указывать return 444;
, так как в таком случае nginx не будет ничего отдавать клиенту, а будет сразу закрывать соединение при получении нехорошего запроса.
Отражение через iptables
iptables -I INPUT -p tcp --dport 80 -m string --string "ca66833.tmweb.ru" --algo kmp -j DROP
iptables -I INPUT -p tcp --dport 443 -m string --string "ca66833.tmweb.ru" --algo kmp -j DROP
ip6tables -I INPUT -p tcp --dport 80 -m string --string "ca66833.tmweb.ru" --algo kmp -j DROP
ip6tables -I INPUT -p tcp --dport 443 -m string --string "ca66833.tmweb.ru" --algo kmp -j DROP
Скорее всего не сработает для 443 (https), поэтому надо дополнительно блокировать через nginx, если атака идет по https, но обычно атакуют именно http.
Почта
Проблемы с IMAP (courier-imap)
В папке с файлами писем удаляем все что только можно:
rm courierimapsubscribed courierimapuiddb courierpop3dsizelist courierimapuiddb.lock
Предварительно создав резервную копию этих файлов. Иногда еще надо удалить папку "courierimaphieracl"
libvirt
Запретить сон и гибернацию
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
Проверить диск и запустить виртуалку
virsh domblklist 123456 | grep qcow2 | awk '{print $2}' | xargs -L1 qemu-img check -r all ; virsh start 123456