Действия

Tech support ADM: различия между версиями

Материал из lulzette's wiki

Нет описания правки
Нет описания правки
 
(не показано 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>


=== Проверить диск и запустить виртуалку ===


MySQL
<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