Tag: sysadmin

Free backup script

Баси тъпото заглавие.

Anyway – днес fork-нах един проект, който използвам от извесно време с разни адаптации за marvin и реших да го публикувам.
github проекта за сега носи работното име Full Web Server Backup, а основния проект можете да намерите тук.

Основните разлики между проектите са:

  • Основния проект има Amazon S3 sync, аз го махнах, защото използвам услугите на pCloud;
  • В моя има архивиране на /etc, почистени са малко неразбории.

За в бъдеще смятам да добавя:

  • Избор на compression level;
  • Изнасяне на mySQL user/pass в ~/.my.cnf
  • Избор на специфични директории в /etc, които да архивираме или exclude-нем;
  • cronjob;
  • Архивиране на /home директорията на определен потребител (ако имаме права за това).

Ако имате друга идея с радост ще я прегледам. marvin си пази бекъпите с този скрипт и за момента работи безпроблемно.

01.11.2017

Има дни в които искаш да си купиш книга за Java и ant и да ги запалиш в пентаграма гледайки как синия пламък оформя странни форми на къдрави скоби и NULL-ове. Има и дни в които нещата не изглеждат така безнадеждни.

Иначе си играя с бекъпите на marvin и намирам решения за елементарни проблеми в bash. ако на някой му е интересно да каже и ще разпиша какви проблеми срещнах и какви решения намерих.

In other news:

Как да изтрием WordPress (spam) коментари директно от базата

Никой не е защитен от спама под всякаквата му форма – email, в коментарите или по друг начин.

И понеже на marvin живее сравнително посещаван сайт секцията му с коментари беше катастрофална. Не бях го поглеждал от няколко месеца и като влязах в админ панела му ме побиха тръпки – над 12 000 коментара.

Проблема – Как ще разгранича кои коментари са спам и кои не са?

Решението – изпозлвах (с малко скептицизъм) плъгина, който идва при нова инсталация на WordPress – Akismet. За да заработи трябва да се регистрираме в сайта akismet.com (с WordPress.com или Google.com акаунтите си) и да вземем API кода от сайта. След това активираме плъгина и в настройките му бухаме API key-а). След като всичко беше конфигурирано и казах на плъгина да маркира съмнителните коментари като SPAM отидох да проверя и нищо не се случи. Оказа се, че плъгина е по-умен отколкото очаквах – беше си сложил всички коментари в опашка и асинхронно анализираше всеки. След час имах около 14 500 коментара маркирани като спам. Проверих на random стотина и всичко изглеждаше да е ок.

 

Другия проблем – По някаква причина се оказа, че не мога да трия коментарите през admin панела. Трябваше да намеря решение в което да взема всички коментари маркирани като SPAM и да ги изрия през базата данни.

Другото решение – За работа с базата данни използвах mysql console, но можете да използвате и phpMyAdmin (след като проключите работа с него го изтрийте или забранете достъпа до него, че става страшно ако до забравите).
Следните заявки ще ви свършат работа (имайте предвид, че префикса, който съм използвал е wp_, но на вашата инсталация може да е нещо различно):

Изтриване на всички неодобрени от администратора коментари:

DELETE from wp_comments WHERE comment_approved =  '0';

Изтриване на всички ОДОБРЕНИ коментари:

DELETE from wp_comments WHERE comment_approved =  '1';

Всички изтрити коментари, които стоят в статус Trash:

DELETE from wp_comments WHERE comment_approved = 'trash';

И накрая и най-важното – всички коментари маркирани като SPAM:

DELETE from wp_comments WHERE comment_approved = 'spam'; 

 

Tip – Ако искате да видите съдържанието на таблиците можете да направите това със select. Например ако искам да видя всички SPAM коментари ще пусна тази заявка:

SELECT * from wp_comments WHERE comment_approved = ‘spam’;

Със здраве и гледайте да не затриете нещо важно. Ако имате въпроси можете да ме питате тук преди да действате. Ако мога ще помогна.

Огромна дупка в сигурността на Bluetooth протокола

Както каза Владо – щом уясвимостта си има лого и име нещата са лоши :D

Long story short – при включен bluetooth човек може да придобие известен контрол над устройствата ви. Проблема е в начина на автентикация (каква е българската дума за authentication?) и по-точно начина по който публичния и частния ключ биват разменяни между двата клиента (encryption keys).

Има си и PoC (Proof of Concept) за Андроид, Windows и Linux.

Примера с Android е много кофти, защото хакера придобива пълен достъп и в демото прави снимка на себе си без изобщо да докосва телефона (тук не е ясно дали телефона е с парола и/или криптиран).

 

PoC с Linux е как хакват smartwatch и успешно пускат микрофона, а после рестартират часовника.


При Windows нещата са също интересни. Там атакуващия прави MiTM (Man in the middle) атака, което ще рече, че се позиционира между клиента и ресурса, който иска да достъпи (в случая сайт). Така например мога да взема HTML кода на банката в която е електронното ви банкиране и да правя $_POST към мой сървър в който ще получа потребителско име и парола.

 

А защо iOS не е засегнат?

Единственото нещо, което пречи тази уязвимост да бъде използвана срещу iOS устройства е, че те не позволяват т.нар. silent authentication, което от своя страна значи, че потребителя първо ще бъде попитан за съгласие дали иска някой да се свърже с него преди да изпълни злонамерения си код.

 

Бен Сери (Ben Seri) и Грегъри Вишнеполски (Gregory Vishnepolsky) са разписали много подробен в whitepaper по въпроса.

 

CVE-тата (common vulnerabilities and Exposures) са както следва:

  1. Linux kernel RCE vulnerability – CVE-2017-1000251
  2. Linux Bluetooth stack (BlueZ) information Leak vulnerability – CVE-2017-1000250
  3. Android information Leak vulnerability – CVE-2017-0785
  4. Android RCE vulnerability #1 – CVE-2017-0781
  5. Android RCE vulnerability #2 – CVE-2017-0782
  6. The Bluetooth Pineapple in Android – Logical Flaw CVE-2017-0783
  7. The Bluetooth Pineapple in Windows – Logical Flaw CVE-2017-8628
  8. Apple Low Energy Audio Protocol RCE vulnerability – CVE-2017-14315

 

Как да се защитите?
Най-лесния начин преди да излязат security fixes е да си спрете блутута. А и никога не трябва да си го ставяте пуснат ако не го използвате.

 

 

09.10.2017 – Аз съм идиот

Винаги съм искал да бъда системен администратор. Исках да бъда това много преди да разбера, че има професия, която се казва Quality Assurance.
И винаги съм си врял носа там където не ми е работа. И си навлякох гнева на старите и новите богове като реших да напусна услугите на SuperHosting и да се преместя на мой си, shiny and new VPS. И после 2 месеца миграция по нощите (защото в работно време не отива да се занимавам с такива неща, най-малкото, че дори и да нямам кой знае колко много работа ще си изям чашата докато конфигурирам нещо като хората) докато всички сървиси, които искам да подкарам всичко + един античен PHP 5.2 заради стар проект, който държа повече от носталгия отколкото от други съображения.

И понеже на WordCamp Varna 2017 имах възможността да чуя лекцията на Верослав Ценов за кеширането и реших за педесети път да направя nedko.info  и marvin като цяло свръх-мега производителни и да се отварят на посетителите още преди да са натиснали Enter. Обикновено тези ми начинания завършват с undo на всичките ми промени в 3:15 вечерта.

Та и днес не беше изключение. Реших да сложа един Varnish reverse proxy за да кеширам част от ресурсите, които се връщат на клиента и фейлнах наистина грандиозно този път. Успях да засера nginx config-а на блога и ми отне сигурно 5-10 минути да върна всичките 15 милиона промени, които бях правил на него.

И нещо, което Васил Колев винаги е твърдял – “Админ се раждаш, не ставаш”. Надявам се поне за QA да ставам.

 

Иначе ако на някой му е интересно – статията за Varnish с nginx + поддъжка на SSL (обърнете внимание, че в немалко статии този случай не е разискан) можете да намерите в Linode документацията.

И още нещо, защото аз като сложа край на нещо, което пиша последват поне по две-три неща отдолу – колкото и грандиозно да осирате нещо, колкото и мощно да преебете нещо елементарно, колкото и идиоти да се чувствате – продължавайте докато не го направите. Аз така или иначе ще подкарам varnish – достатъчно съм идиот за да го накарам да ми се огъне в ръчичките. Така направете и вие. Но ако искате да мрънкате – мрънкайте, най-много някой да ви наругае.

24.08.2017

Днес деня започна рано сутринта – около 6:30. Направихме традиционното сутрешно кафе с Теди и Ели и после към работа. Днес ще е шантав ден.

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

In other news:

  • Linux: 25 Iptables Netfilter Firewall Examples For New SysAdmins;
  • Uptime Robot – полезен тул за следенето на uptime-ма на даден сайт. Може да следи и по ping, port и разбира се http(s). Ограничението е цели 50 job-а, като честотата на проверка е през 5 минути;
  • Apache Guacamole – Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.

Как да разберем кой сървис е отворил порт на нашия сървър

Има лесен начин да намерим кой сървис е отворил порт на нашата машина.
Стъпките са следните:

0. Ако нямате nmap инсталиран:

nedko@marvin: sudo aptitude install nmap

nedko@marvin:/home/nedko# nmap localhost

Starting Nmap 7.01 ( https://nmap.org ) at 2017-08-16 23:41 EEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 995 closed ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
1022/tcp open exp2
3306/tcp open mysql

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

  1. lsof -i :3306

nedko@marvin:/etc/mysql/conf.d# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 30190 mysql 25u IPv4 9345387 0t0 TCP localhost:mysql (LISTEN)

2. ps -fp 4486

nedko@marvin:/etc/mysql/conf.d# ps -fp 30190
UID PID PPID C STIME TTY TIME CMD
mysql 30190 1 0 00:26 ? 00:00:01 /usr/sbin/mysqld

 

As simple as that.

How to fix: “Briefly unavailable for scheduled maintenance”

Днес ъпдейтвах qualityassurance.pro и явно нещо се счупи, backend-а ми върна “Briefly unavailable for scheduled maintenance” и до там.

Всъщност това е нормално поведение. При ъпдейт на ядрото или някой плъгин WordPress си създава един временен файл, който да уведоми потребителите, че нещо се случва и скоро всичко ще работи както обикновено.

Обаче в моя случай вероятно защото се опитах да ъпдейтна 4-5 плъгина, ядро и темата едновременно ми е timeout-нало (мога само да предполагам) и остана така.

Решението

  • В основната директория на сайта има един файл, който се казва .maintenance. Единственото, което трябва да направите е да го изтриете;
  • Ако горния метод не сработи има и още един вариант – отворете файла wp-activate.php в основната директория на сайта и сменете стойността на променливата WP_INSTALLING на false.

16.03.2017

sysДнес е ден за regression testing в офиса. Напомня ми защо не обичам i-shits. Знаете ли, че няма никъде в измисленото меню на iPhone (тествах върху 5 и 6) модела на телефона? Тоест никъде няма да видите iPhone 6S да кажем, а само неговия идентификатор (например A1549). Грр!
Иначе сутринта ходих да карам. НАЙ-НАКРАЯ отлепих в 6 и малко, подготвих се и завъртях до Аладжата, през Виница, после Морската и обратно в квартирата. Счупих си рекорта за скорост – 71.5 км/ч. Понеже GoPro-то е още в мен направих и няколко снимки и видео, но тях ще ги сложа в отделен пост.
ОЩЕ не съм свършил с пътеписа за изкачването ми на връх Шипка. Все не остава време тия дни…
Друго интересно е, че благодарение на Виктор се сдобих с един много приятен workstation – Lenovo ThinkStation E31 със следните характеристики:

  • Процесор Intel Xeon E3-1225V2 (8M Cache, 3.20GHz)
  • Памет 16GB ( 4x4GB) PC3-12800 160 0MHz UDIMM DDR3
  • Твърд диск – 2х 500GB SATA – 7200 rpm, 6 Gb/s, 3.5″ в RAID 0

Скоро ще напиша едно обстойно ревю + тестове, че ми е адски интересно да видя каква е практическата разлика между RAID 0 и RAID 1 и производителността на този четириглав змей с 8 мб кеш.

И последно – днес подкарах HTTP/2 и HSTS на marvin. Ще опиша в статия как го направих (hint – супер лесно е).

 

Помните като ви казах, че ще е за последно, нали? Еми не е. Това рядко администраторско портно нямаше как да не го споделя с вас:

Недко разказва: Cloud Conf Varna 2015

Ето, че най-накрая успях да си уредя малко свободно време и посетих четвъртото издание на Cloud Conf Varna.

Първото нещо, което може да направи впечатление на човек, който не го е посещавал преди е че събитието няма сайт (google sites не го броя!), а само Facebook Event. Това в днешно време, вярвам е напълно достатъчно, но традиционалиста в мен нещо се бунтува

Конференцията беше от два track-а – един специално за Azure, а втория беше смесен, но основно за Linux containers, BigQuery, Amazon и други.

Ето и двата трака, които бяха паралелни (Юлка – извинявай, че не дойдох да ти слушам лекцията. Сигурен съм, че е била епична, както обикновено!):

Track Azure:
10:00 – 10:15 Откриване. (Общо и за двата track-a)
10:20 – 11:20 Що е то Cloud и Azure – Венци Попов
11:30 – 12:30 Azure Web Apps Deployment and Scaling Techniques – Венци Попов
12:30 – 13:30 Обедна почивка (Общо и за двата track-a)
13:30 – 14:30 IoT with Azure Service Bus – Юлиан Сапунджиев
14:40 – 15:40 Отворена дискусия на тема Azure
16:00 – 17:00 Отворена дискусия на облачни теми (Общо и за двата track-a)

Track Common:
10:00 – 10:15 Откриване. (Общо и за двата track-a)
10:20 – 11:20 Scaling your Apps with Docker and Kubernetes – Борислав Бориславов
11:30 – 12:30 Scaling your Apps with Docker – Борислав Бориславов
12:30 – 13:30 Обедна почивка (Общо и за двата track-a)
13:30 – 14:30 BigQuery за програмисти
14:40 – 15:40 Vagrant and Amazon – Димитър Данаилов
16:00 – 17:00 Отворена дискусия на облачни теми (Общо и за двата track-a)

Edit – Димитър Данаилов качи всички лекции в своя GitHub акаунт така, че който иска може да си ги изтегли и прегледа.

 

Имах уговорка с мой приятел, който има взимане-даване с Docker и Kubernetes, моето момиче и сестра ѝ (все IT-та!)  да се видим направо на track “Common” да послушаме, че аджеба и аз хвана нещо покрай него и лектора.
Ако не беше Злати никога нямаше да се ориентирам къде е сградата в която ще се проведе конференцията. За мен Технически Университет е е НУК, верояно защото само там съм ходил :). Добре, че тя е учила 4 години там та ни ориентира бързичко. Следвахме табелите стил “Алиса в страната на чудесата” и се озовахме пред вратата с малкото приключение наречено “Асансьор на ТУ” в който на две места не бях сигурен дали ще сляза жив и здрав или че няма да ме хване кафевия адреналин :)
Та стигаме до вратата и гледаме един млад човек ръкомаха нещо, обяснява се. Лекцията е започнала, Владо е вътре, ние вън. Започвам да чупя пръсти и да се чудя как да влезем така, че да не пречим на лектора или на посетителите. Е – влизаме ние в стаята (аз изглеждах долу-горе така) и сядаме най-отзад по стар ученически обичай.
Стаята беше със 17 чина за по трима човека на чин. На Docker бяхме 17 човека, но към края на Kubernetes напълнихме залата.

Лекцията се водеше от Борислав Бориславов – CTO на ICN.BG
Представи ни се като CTO на ICN.BG, но предупреди, че се чувства повече като сисадмин.И му личеше. Основно с лекотата и страстта с която разказваше за линукс контейнери, докери, миниони и т.н.

Нашия започна да прави демонстрация с нови контейнери и отвори… vim … та се сетих за онзи виц:

“- О, аз използвам vim от 2 години”

“- Наистина? Защо?”

“- Защото не знам как да изляза от проклетото нещо”

Борислав вкара малко шеги като например:

  • Знаете ли кои са NSA? Вие може да не знаете, но те знаят вие кой сте;
  • “И не се ебавам с вас” обяснява Борислав разпалено. Намаля тона и примирено “Ааа не се шегувам, де.”.
  • Обяснява какво е OOM Killer и в бързината, разпалеността и да не си забрави мисълта даде може би най-точната дефиниция: “Ай махай се от тука”.

Тези всичките вметки внесоха малко усмивки в презентацията. Въпроси не липсваха, особено от Юри, имаше приятен диалог и ни държа около 2 часа, което за нито един заспал човек беше супер.

А – преди да забравя – Борислав силно препоръча две неща (освен всичко останало):

  • 12 factor – много интересно четиво, което е вид  методология спомагаща за изграждането на SaaS;
  • Според него най-добрия и изчерпаделен linux related wiki е този на Arch Linux (Вики – за теб се сетих като го каза това :) ).

Раздадоха и по един ваучер с намаление за техен хостинг и възнамерявам да пробвам някой от техните пакети (вероятно Ултима, защото повече от 1-2 блога едва ли ще хоствам).

Btw именуването на техните хостинг пакети е малко странно при все, че Ултима е най-ниския, а Стандартен е най-високия :)

 

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

Благодаря на Николай Митев и компания за организацията, лекторите и че направиха Cloud Conf сериозно събитие.

Ще се видим пак, догодина ;)