Сигурност в wordpress @ lug-bg meeting 2015

Здравейте,

тази година се включих като лектор в годишната среща на Linux потребителите в България. Бих искал да благодаря за интереса към лекцията презентацията.

Публикувам запис от презентацията и самите слайдове, ако някой иска да я прегледа или тества някой от описаните плугини.

Линк към слайдовете в PDF – WordPress_Security.

Криптиране на USB stick

В нашата компания, както предполагам и в 99% от другите компании няма строга и конкретна политика за употреба на преносими памети. Няма смисъл да ви убеждавам, че на почти всяка преносима памет има данни, които не искате да попаднат в трети лица.

Ще разгледам един бърз и ефективен метод за криптиране на USB флаш памети като имам определени изисквания:

  • Програмата за криптиране да е безплатна
  • Програмата за криптиране да може да работи без инсталация на компютъра
  • Потребителският интерфейс да бъде елементарен за употреба
  • Програмата да работи без забавяне на стари компютри
  • Програмата да е съвместима с почти всички масови операционни системи: Windows 2000/XP/Vista/7, Linux, Mac OS

За да спазим всички тези изисквания, ще използваме безплатната програма с отворен код TrueCrypt. Тя има страхотна и подробна документация, която е много полезна. Все пак мога да ви спестя малко четене, а и смятам, че моят метод е доста гъвкав.

Ето стъпките, които ще извършим (с кратки коментари):

  1. За флаш памети, върху които искаме да записваме файлове по-големи от 4GB или криптирания дял е по-голям от 4ГБ, предпочитам да форматирам флаш паметта във файловата система NTFS.
  2. Създаваме нов контейнер на преносимата памет (Volume -> Create New Volume -> Create an Encrypted file container -> Standart TrueCrypt volume). Избираме име на контейнера. Опциите за криптиране по подразбиране са най-подходящи. Важно: Няма нужда криптирания контейнер да заема цялото свободно място. Така може вашата преносима памет да съдържа  криптирано и некриптирано пространство. В моя случай съм оставил 750MB свободно некриптирано място от 32GB флаш памет. Важно е паролата, която избирате да е дълга.
  3. Има няколко начина за използване на създадения контейнер, разбира се само, ако имате паролата за него. Ще разгледам най-интересния за мен начин, а именно чрез използване на portable версия на програмата TrueCrypt. Така няма нужда да се инсталира програмата на който и да е компютър, защото тя се намира на некриптираната част от USB флаш паметта. За целта след като сме стартирали програмата избираме Tools -> Traveler Disk Setup. От File Settings избираме USB устройството, което ще използваме. От Autorun Configuration избираме Auto-mount TrueCrypt volume (specified below) и след това от вече активното поле избираме файла, който се намира на флаш паметта и ще използваме за контейнер. Натискаме бутона Create и това би било всичко, ако нямаше АКО…

На Windows 2000/XP/2003 всичко работи като пушка. За да демонстрирам, съм направил две снимки на екрана. При включване на USB устройството, операционната система прочита autorun.inf файла, който е създаден и се появява този прозорец:

mount-windows-xpПри натискане на бутона OK, програмата пита за паролата и ако въведете вярна парола създава ново виртуално устройство с първата свободна буква.

Ако искате да изключите виртуалното криптирано устройство, просто давате десен бутон върху флаш паметта (не върху виртуалното устройство) и избирате Dismount all TrueCrypt volumesunmount-windows-xpВсичко работи прекрасно, но не и на Windows Vista/7. При тях мерките са затегнати и autorun работи само при read only носители като CD и DVD. Затова си създадох два съвсем прости bat файла, които вършат същата работа, но с един клик повече.

mount-umount-windows7Файловете start.bat и stop.bat (да, имената са подбрани специално, за да бъдат разбрани от всички) съдържат:

start.bat съдържа следния код, където volume.tc трябва да бъде заместено с името на вашия контейнер:
TrueCrypt\TrueCrypt.exe /v volume.tc /a /e /q

stop.bat съдържа:
TrueCrypt\TrueCrypt.exe /d /q

С това задачата е изпълнена и си мисля, че този похват ще бъде имплементиран в нашата компания съвсем скоро.

Споделяне на повече от една Интернет връзка в локална мрежа

Здравейте,

работя в голям офис, затова наскоро пуснахме втора оптична връзка към Интернет през друг доставчик. Двете връзки не се таксуват нито на свързване, нито на трафик, така че можем да ги наречем равнопоставени.

Понякога потребителите прекаляват с гледането на клипове, слушане на онлайн радиа и т.н., затова работещите колеги се оплакват от скоростта на Интернет връзката. Шейпърите не са опция във фирмата, затова реших да пусна част от по-работещите потребители през новата оптика, а останалите да си работят както досега.

Настройката е много бърза и малка, но все пак реших да я споделя, освен това е тествана и работи 🙂 Изходните данни са следните:

LAN (eth0):
IP 192.168.0.1
Mask 255.255.0.0

WAN1 (eth1):
IP 10.0.0.2
Gateway 10.0.0.1 (default gateway)
Mask 255.255.255.0

WAN2 (eth2):
IP 10.0.1.2
Gateway 10.0.1.1
Mask 255.255.255.0

Потребителите ползват Интернет през WAN1 по подразбиране, а избраните потребители през WAN2. Споделянето на Интернет връзката през WAN1 е осъществено с iptables и е тривиално, тъй като 10.0.0.1 е default gateway за самия сървър, който споделя Интернет-а.

За използване на втората връзка обаче ще трябва да извършим няколко допълнителни стъпки.

Първо искам да създам routing таблица за втората Интернет връзка. Искам да ѝ задам име, защото така е по-прегледно. Това става като редактирам файла /etc/iproute2/rt_tables. В него на най-долния ред записвам:

4 btcroute

С това задавам име на routing таблица номер 4, а името е btcroute, което явно подсказва, че връзката е към БТК.

Нека проверим какво има в тази routing таблица:

ip route show table btcroute
или същата команда, по номер на таблицата
ip route show table 4

Оказва се, че е празна. Затова ще трябва да я напълним 🙂

Тъй като ползвам един скрипт за настройка на всички потребители, ползващи Интернет във фирмата, скрипта първо изтрива правилата и после ги инициализира наново. Ако вие ползвате if-up и if-down, просто поставете частта за изтриването на правилата в if-down.

#flush old rules (изтриване на правилата за таблица 4)
ip route flush table btcroute
ip rule del fwmark 4 table btcroute
ip rule del from 10.0.1.2 table btcroute

След като сме изтрили правилата, ги създаваме наново

#add new rules (добавяне на правилата в таблица 4)
ip route add default via 10.0.1.1 dev eth2 table btcroute
ip rule add fwmark 4 table btcroute
ip rule add from 10.0.1.2 table btcroute

Да ги разясним какво правим. С първия ред добавяме default gateway за тази routing таблица. С втория ред решаваме, че всички пакети, които са маркирани с 4, трябва да се обработват с таблица 4. С третия ред казваме, че щом пакета е от алтернативния ни IP адрес (10.0.1.2), таблица 4 ще го обработи.

С това настройката на iproute2 завърши.

Следва да споделим Интернет връзката с някой от колегите, например 192.168.0.5. За целта трябва да изпълним следните две команди:

iptables -t mangle -A PREROUTING -s 192.168.0.5 -j MARK –set-mark 4
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.0.5 -j SNAT –to-source 10.0.1.2

С първата команда маркираме със стойност 4 всички пакети, които влизат в PREROUTING талбицата на сървъра и са от IP адреса на щастливия 192.168.0.5. С втората команда маскираме Интернет връзката, така че да използва алтернативната Интернет връзка.

Използвана литература:

  1. http://linux-ip.net/html/adv-multi-internet.html

Инсталиране на Oracle Database 10g Express Edition на Debian x64

Здравейте,

Oracle не са направили пакет на техния Oracle 10g XE за amd64 архитектура и е необходимо да инсталираме i386 пакет. След справка в няколко форума и обобщение на няколко поста стигнах до работещ и проверен начин за инсталация на въпросното приложение върху Debian 5 Lenny:

  1. Инсталираме необходимите пакети:
    apt-get install ia32-libs libc6-i386 bc
  2. Изтегляме една допълнителна библиотека:
    wget -c http://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb
  3. Инсталираме библиотеката и Oracle XE
    dpkg -i –force-architecture libaio_0.3.104-1_i386.deb
    dpkg -i –force-architecture oracle-xe-universal_10.2.0.1-1.0_i386.deb (този файл може да бъде изтеглен само след регистрация на сайта на Oracle)
  4. Задължително след инсталацията трябва да конфигурираме базата:
    /etc/init.d/oracle-xe configure
    Отговаряме на няколко лесни въпроса – на кой порт ще работи уеб приложението за конфигурацията, на кой порт ще работи самия сървър и каква е паролата за потребителя SYSTEM. Аз лично ги оставих със стойностите по подразбиране, за което после съжалявах, тъй като уеб приложението искаше да работи на порт 8080 (localhost). В последствие реших, че на localhost не ми е удобно за конфигурация, затова трябваше да разреша достъп от всички интерфейси. Проблема с порт 8080 е, че много често се сканира от ботове и пълни лог файловете с много ненужни записи, затова може да си измислите някакъв ненормален порт като 18238 🙂
  5. Добавяме следните редове в ~/.bashrc
    ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
    PATH=$PATH:$ORACLE_HOME/bin
    export ORACLE_HOME
    export ORACLE_SID=XE
    export PATH
  6. С това сме готови и имаме работещ сървър Oracle Database 10g Express Edition. Посетете адреса http://127.0.0.1:<port>/apex за да достъпите контролния панел.

Разбира се елементарни конфигурационни промени могат да се направят от конзолата или през уеб приложението. Например:

  • Ако сте се прецакали (като мен) да ползвате порт 8080 и искате да го смените може да изпълните следната заявка през конзолата:
    1. Логвате се на конзолата:
      sqlplus system@xe
      с паролата, която въведохте по време на конфигурацията
    2. SQL> begin
      2    dbms_xdb.sethttpport(‘18230’);
      3    dbms_xdb.setftpport(‘0’);
      4  end;
      5  /

      с което сте готови.
  • Ако искате да разрешите IP адрес за достъп до apex, различен от 127.0.0.1:
    1. Логвате се на конзолата:
      sqlplus system@xe
    2. EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

Засега това е всичко и това е първия ми сблъсък с Oracle, дано на някой да му е полезна информацията. Ще допълвам статията с нови неща, а и тя е един вид записка, която ще мога да ползвам при необходимост 🙂

Прехвърляне на вече инсталирана Debian Linux 5 Lenny система от PATA хард диск към SATA хард диск

Здравейте,

Имам няколко стари сървърчета, със сравнително големи хард дискове, но достатъчно нови, за да поддържата SATA твърди дискове. Тъй като съврърите са бюджетни, при закупуването им дори не е ставало дума за един твърд диск повече за изграждането на RAID1 масив.

В много от фирмите продаващи твърди дискове изчезват наличностите от старите ATA дискове, затова се принудих да закупя SATA твърд диск с обем (може би обем не е точното определение за големина на диска) 500GB.

Допуски:

  • root дяла е в /dev/hda1
  • новия диск е /dev/sda
  • използваме GRUB като boot loader

Предварителното планиране изглежда така:

  1. закачаме новия диск и зареждаме какъвто и да е линукс от компакт диск или USB флаш памет. Всичко върши работа, аз предпочитам system rescue cd. Може да използвате дори мрежовия инсталационен компакт диск на Debian 5 Lenny. Важно е да съобразите дали сте инсталирали i386 или amd64 порт, за да изберете същия порт, от който ще заредите ОС
  2. на новия диск създаваме същия брой дялове, както на стария диск. тук можем да променим големината на дяловете, ако случайно някой от тях не е достатъчно голям, аз лично използвам fdisk за разделянето
  3. Уточнявам процеса за /dev/hda1, който е root дяла. За другите дялове важи същата процедура. mount-ваме новия диск в произволна директория – например /mnt/sda1, копираме всичко от / в /mnt/sda1, няма нужда да се копира /dev, /proc, /sys, /tmp но тези директории трябва да се създадат празни.
  4. След като сме копирали всички данни от всички дялове, трябва да редактираме два файла /mnt/sda1/etc/fstab и /mnt/sda1/boot/grub/menu.lst. В първия файл заместваме всички hda с sda. Във втория файл променяме root=/dev/hda1 с root=/dev/sda1, това казва на boot loader-a, че трябва да търси ядрото на новия диск
  5. Трябва да инсталираме boot loader-a в MBR (Master Boot Record) на новия диск. Тази стъпка може да се изпълни по няколко начина в зависимост от това какъв диск използвате.  Ще разгледам по-универсалния вариант, при който не използваме инсталационния компакт диск на Дебиан. Трябва да пресъздадем proc и dev директориите в chroot средата, това става по следния начин:
    1. mount -o bind /proc /mnt/sda1/pro
    2. mount -o bind /dev /mnt/sda1/dev
    3. chroot /mnt/sda1
    4. Вече сме в chroot средата, остава единствено да инсталираме boot loader-a в MBR, това става с командата /usr/sbin/grub-install /dev/sda

Дотук добре, рестартираме сървъра, след като сме изключили стария диск за всеки случай. Всичко работеше перфектно докато не излезе нов пакет за ядрото на Дебиан, който обнових по стандартния начин apt-get update; apt-get upgrade.

Системата не зареди. Какво се случи?

При ъпдейт на ядрото се извиква един скрипт, наречен update-grub. Той не би трябвало да създаде проблем, но уви, не стана точно така. При стартиране на сървъра, той се опитва да намери ядрото на /dev/hda1, вместо на /dev/sda1. WFT? Нали работеше, сървъра е рестартиран няколко пъти и не е имало този проблем.

Оказа се, че трябва да се внимава и за коментираните редове, тъй като тази програма взема предвид и тях, за да генерира нови записи в /boot/grub/menu.lst. Реда:

# kopt=root=/dev/hda1 ro noapic

се използва от update-grub, така че този ред също трябва да се редактира, въпреки че е коментиран.