Дамп баз в mysql

понедельник, 30 марта 2009 г.
Дамп базы данных в файл
mysqldump --opt database > backup-file.sql
Восстановление из файла
mysql database

Дамп базы данных на удаленный хост
mysqldump --opt database | mysql --host=remote-host -C database

Дамп нескольких баз в файл
mysqldump --databases database1 [database2 ...] > my_databases.sql

Дамп всех баз в файл
mysqldump --all-databases > all_databases.sql

Перенос базы в кодировке ср1251
- сделать дамп на старом хостинге в кодировке CP1251, для этого необходимо выполнить команду mysqldump с параметром --default-character-set=cp1251
- в самое начала файла дампа вставить строку: SET NAMES cp1251;
- восстановить этот файл дампа в базу

Зеркальный програмный рейд

Просотр таблицы разделов диска /dev/hda
#sdfisk -l /dev/hda

Копирование таблицы разделов диска /dev/hda на диск /dev/hdc
#sfdisk -d /dev/hda | sfdisk /dev/hdc

, либо вручную создаем необходимый раздел

Создание зеркального раздела /dev/md0
# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/hda1 /dev/hdc1

Создание файловой системы
# mkfs.ext3 /dev/md0

Сохраняем конфигурацию
cd /etc/mdadm
echo ’DEVICE /dev/hd[a-z] /dev/sd*[a-z]’ > mdadm.conf
echo 'MAILADDR root' >> mdadm.conf
mdadm --examine --scan --config=mdadm.conf >> mdadm.conf

Два swap-файла на разных дисках

Для повышения производительности разместим файл подкачки на различных дисках /dev/hda1 & /dev/hdc1

отключаем своп

#swapoff -a

или создаем
mkswap /dev/hda1
mkswap /dev/hdc1

Подключаем с одинаковым приоритетом
swapon -a /dev/hda1 -p 1
swapon -a /dev/hdc1 -p 1


Просмотр состояния
#swapoff -s
или
#cat /proc/swaps

Добавляем в /etc/fstab для автоматического подключения при загрузке

/dev/hda1 none swap sw,pri=1 0 0
/dev/hdc1 none swap sw,pri=1 0 0

Grub + raid1

Setting up GRUB:
------------------------------------------------------------------
# grub

grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)

grub> quit

------------------------------------------------------------------
/boot/grub/menu.lst
------------------------------------------------------------------
# Boot automatically after 5 secs.
timeout 5

# By default, boot the first entry.
default 0

# Fallback to the second entry.
fallback 1

title Debian GNU/Linux, kernel 2.6.18-4-686 /dev/sda
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-4-686 root=/dev/md0 ro
initrd /boot/initrd.img-2.6.18-4-686
savedefault

title Debian GNU/Linux, kernel 2.6.18-4-686 /dev/sdb
root (hd1,0)
kernel /boot/vmlinuz-2.6.18-4-686 root=/dev/md0 ro
initrd /boot/initrd.img-2.6.18-4-686
savedefault

Настройка шифрования файлов под Linux с помощью Crypto-loopback устройств

Ниже, краткий пересказ самого главного (для Debian GNU/Linux) :
Установка пакетов:
apt-get install cryptsetup

Подгрузка модулей:
modprobe loop
modprobe aes

echo -e "naes\ncryptoloop" >> /etc/modules

Создаем образ будущего шифрованного раздела:
dd if=/dev/urandom of=/home/marco/crloop bs=1M count=640

Способ 1 (устарел, лучше использовать dm-crypt):
modprobe cryptoloop
losetup -e aes /dev/loop0 /home/marco/crloop
mkfs -t ext2 /dev/loop0
mount /dev/loop0 /media/cryptovolume
.....
umount /media/cryptovolume
losetup -d /dev/loop0

Способ 2:
modprobe dm-crypt
losetup /dev/loop0 /home/marco/crloop
cryptsetup -c aes -y create crloop /dev/loop0
mkfs.ext3 /dev/mapper/crloop
mount /dev/mapper/crloop /media/cryptovolume
.....
umount /media/cryptovolume
cryptsetup remove crloop
losetup -d /dev/loop0.

##########Bug##############
modprobe: WARNING: Error inserting padlock_aes (/lib/modules/2.6.24/12-generic/kernel/drivers/crypto/padlock-aes-.ko): No such device
# FIX
echo "alias aes aes_generic" >> /etc/modprobe.d/aliases

web server scanners

# Nikito
www.cirt.net
# Paros proxy
http://parosproxy.org/index.shtml
# WebScarb
http://www.owasp.org/index.php/Main_Page
# WebInspect
hp.com
# Burp Scanner
http://portswigger.net/
#Wikto
http://www.sensepost.com/research/wikto/
#Acunetix Web Security Scanner
http://www.acunetix.com/
# Rational AppScan
ibm.com
# N-stalker
http://nstalker.com/products/free/

Короток о dpkg

dpkg --get-selections [образец...] Выдает список состояний выбора пакетов.

dpkg -p | --print-avail имя пакета Выводит детальную информацию о пакете, которую извлекает из файла /var/lib/dpkg/available.

dpkg -l | --list <образец имени пакета>... Показывает пакеты, соответствующие данному образцу. Если образец имени пакета не задан, показывает все пакеты в /var/lib/dpkg/available. В образце имени пакета можно указывать обычные символы шаблона командной оболочки.

dpkg -L | --listfiles <имя пакета> ... Показывает файлы, установленные на вашей системе из пакета с указанным именем. Заметьте, однако, что файлы, созданные установочными скриптами пакета, не будут показаны.

dpkg -S | --search <образец имени файла для поиска> ... Ищет в установленных пакетах файл по заданному образцу. В образце допустимы стандартные символы шаблонов командной оболочки.

dpkg --audit команда покажет частично установленные (Half-Installed) пакеты, пакеты, настройка которых не удалась (Failed-Config), а также все пакеты в ошибочных состояниях.

Коротко о apt

apt-get update обновление репозитария
apt-get dist-upgrade полное обновление ОС
apt-get check проверить текущее состояние системы
apt-get install установить пакет. Всё скаченное apt-get лежит в /var/cache/apt/archives
apt-get -f install исправить зависимости
apt-get install -d скачать пакет не устанавливая. Лежать будет в /var/cache/apt/archives
apt-get source скачать исходный текст пакета
apt-get remove удалить пакет. Результаты можно посмотреть в /var/log/user/info
apt-cache search поиск пакета по описанию
apt-cache showpkg показать описание пакета

Mysql tips

- Проверить целостность базы данных можно командой:
# /usr/bin/mysqlcheck -a DBName

- Выгрузить базу MySQL можно командой:
# mysqldump -u root -p DBName > mydb.sql
Если mysqldump не запускается, то нужно указать полный путь до этого файла, который можно узнать командой:
# find / -name mysqldump
/usr/local/mysql-3.23.54a-pc-linux-i686/bin/mysqldump
Сами базы MySQL хранит в /var/lib/mysql/db/, здесь можно посмотреть какие базы созданы.
Чтобы загрузить базу, нужно сначала создать пустую, а для надёжности предварительно удалить старую:
# mysql -u root -p
mysql> drop database if exists DBName;
mysql> create database DBName;
mysql> quit
а затем в неё загрузить данные:
# mysql -u root -p DBName < mydb.sql
Если для пользователя root в MySQL нет пароля, то параметр -p не нужен, также можно задать пароль явным образом, только без пробела, например -pPassWord. Далее нужно убедиться, что в новой базе есть тот пользователь, от имени которого происходило обращение к базе. Если пользователя нет, то чтоб создать в точности такого пользователя с соответствующими правами, выгружаем базу mysql и выбираем все строки, касающиеся этого пользователя:
# mysqldump -u root -p mysql > mysqldb.sql
В файле mysqldb.sql останется приблизительно следующее:

INSERT INTO db VALUES ('%','DBName','UserName','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO host VALUES ('localhost','UserName','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO user VALUES ('localhost', 'UserName', '','N','N','N','N','N','N','N','N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0);
При переходе с одной версии MySQL на другую нужно учитывать, что количество параметров скорее всего будет разным, поэтому команду INSERT придётся подредактировать. Также может изменится алгоритм шифрования паролей. Сколько именно параметров можно узнать выполнив:
mysql> SHOW COLUMNS FROM db;
Загружаем базу командой:
# mysql -u root -p mysql < mysqldb.sql

- Внести запись в базу данных из bash можно таким образом (определив, конечно, переменные):

echo "INSERT INTO table_name (\`in\`,\`out\`) VALUES ('$delta_in', '$delta_out');" > $tmp_dir/temp.sql
`mysql -u$db_user -p$db_pass $db_name < $tmp_dir/temp.sql`

Несколько полезных команд: SHOW TABLES; # показать таблицы в БД
SHOW COLUMNS FROM db; # показать поля таблицы db
USE mysql; # перейти в БД mysql
SELECT host,user FROM user; # показать поля host, user таблицы user
DROP TABLE transport; # удалить таблицу transport
DELETE FROM user WHERE user='acct' AND host='%'; # удалить конкретную запись
UPDATE db SET Delete_priv='Y' WHERE user='acct'; # изменить значение поля в записи
FLUSH PRIVILEGES; # применить внесённые изменения
mysql -u root -p12345 postfix < DB.sql # пакетное выполнение SQL выражений для базы данных postfix
ALTER TABLE mailbox ADD (uid int(10) unsigned DEFAULT '107' NOT NULL); # добавляем в таблицу mailbox обязательное поле uid со значением по умолчанию = 107
ALTER TABLE mailbox DROP uid; # удаляем поле uid из таблицы mailbox
GRANT ALL PRIVILEGES ON DBName.* TO UserName@localhost IDENTIFIED BY '12345'; # дать все права на базу DBName пользователю UserName, подключающемуся с localhost с паролем 12345

Рекомендации по безопасности использования SSH

- Запрещение удаленного root-доступа.
- Запрещение подключения с пустым паролем или отключение входа по паролю.
- Выбор нестандартного порта для SSH-сервера.
- Использование длинных SSH2 RSA-ключей (2048 бит и более).
- Ограничение списка IP-адресов, с которых разрешен доступ (например, настройкой файрвола).
- Запрещение доступа с некоторых потенциально опасных адресов.
- Отказ от использования распространенных или широко известных системных логинов для доступа по SSH.
- Регулярный просмотр сообщений об ошибках аутентификации.
- Установка детекторов атак (IDS, Intrusion Detection System).
- Использование ловушек, подделывающих SSH-сервис (honeypots).

Pазрешение в консоли (console resolution)

четверг, 26 марта 2009 г.
Еще один пост про консоль. Разрешение вне Иксов, в чистой консоли (например ctrl+alt+F1 - в первой консоли) или при загрузке, мягко говоря несколько неудобно. Слишком мало. Я предлагаю немного увеличить его. 

Для изменения параметров разрешения монитора в режиме консоли нужно передать ядру при загрузке параметр vga , Значение параметра - число, подбираемое по следующей таблице:
 

640x480 800x600 1024x768 1280x1024
256 0x301 0x303 0x305 0x307
32k 0x310 0x313 0x316 0x319
64k 0x311 0x314 0x317 0x31A
16M 0x312 0x315 0x318 0x31B


По горизонтали - разрешение, по вертикали - глубина цвета. 

Например, на мониторе с Иксовым разрешением 1280*1024 подойдет консольное разрешение 1024*768, если больше - то текст будет выглядеть слишком уж мелко, как для консоли. Значение vga=0x305.

А на 15-дюймовом мониторе с обычным разрешением 1024*768 отлично подойдет консольное разрешение 800*600. То есть значение vga=0x303.

Теперь, куда и как это прописывается:
Открываем файлик /boot/grub/menu.lst и добавляем в загрузку ядра выбранное значение нашего параметра. 
sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.bak
sudo vi /boot/grub/menu.lst
Находим блок загрузки, похожий на 

title Ubuntu, kernel 2.6.15-25-386
root (hd0,5)
kernel /boot/vmlinuz-2.6.15-25-386 root=/dev/hda6 ro quiet splash
initrd /boot/initrd.img-2.6.15-25-386
savedefault
boot

И в строку загрузки ядра дописываем (см. Текстовый редактор vi) параметр vga:

kernel /boot/vmlinuz-2.6.15-25-386 root=/dev/hda6 vga=0x305 ro quiet splash.

Значение подбираете сами в зависимости от своих потребностей. 

Перегружаете машину, получаете разрешенное счастье в консоли :)

Восстановление md RAID1 массива


Диспозиция следующая 2-а HDD диска, один из которых на момент работы полностью обнулён, а второй содержит актуальный данный разрушенного RAID1 массива. Условимся, что:
/dev/hda - содержит актуальные данные;
/dev/hdc - свободен.

1. Создание аналогичной таблицы разделов:
sfdisk -ld /dev/hda | sfdisk /dev/hdc
2. Визуальная проверка таблицы разделов:
sfdisk -l /dev/hdc
3. Добавление партиции к /dev/md0
mdadm --add /dev/md0 /dev/hdc1
4. Восстановление менеджера загрузки grub
grub> device (hd0) /dev/hdc
grub> root (hd0, 0)
grub> setup (hd0)
grub> quit

Дата в Linux

вторник, 24 марта 2009 г.

Чтобы посмотреть текущие дату и время - date.

Если необходимо изменить их, воспользуйтесь следующим форматом команды:

date MMDDhhmmCCYY.ss

MM — месяц, DD — день месяца, hh — часы, mm — минуты, CCYY — 4 цифры года, ss — секунды

Например:

date 100615352006.30

Эта команда установит текущие дату и время на 06 октября 2006 года, 15:35:30.

Дату и время может изменять только root-пользователь.