Tagsysadmin

Решението на един стар проблем

На marvin живеят няколко WordPress-а, но и с него влача няколко мои стари проекти. Един от тях скоро ще стане на 9 години. И понеже живеят на Joomla 1.5, която практически е невъзможно (варианти има, но безплатните не работят, а за платени не смятам, че искам) да се ъпгрейдне към latest. За това nginx-а ми работи с php-fpm, който търкаля две версии на PHP – 5.х и 7.х. И понеже първата е крайно архаична взех решението старите сайтове да ги разкарам напълно. Така или иначе нямам никаква полза от тях.

И вчера вдигнах още един VPS и започнах да конфигурирам наново nginx/php-fpm/etc. Оказа се, че съм позабравил част от configuration flow-а и седнах да помисля какво и как да направя. Най-накрая стигнах до решението, че вместо да си блъскам главата ще инсталирам един стар LTS на Ubuntu в който се поддържа PHP 5.x и всичко тръгна от раз.

Тенденцията ще е да разкарам всичките си клиенти (в големи кавички, таксите им са малко над цените на домейна) и да мина най-накрая на latest and greatest без да се занимавам с излишни глупости.

 

И така на marvin ще се освободи още малко място така, че ако някой (с предимство са студенти/ученици/преподаватели) има нужда да хостне нещо може да се възползва напълно безплатно.

09.12.2017

Днес е малко време за четене и спокойствие. И разходка!

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

Вечерта започнах да се подготвям за миграцията на marvin към php-fpm (не с manually build PHP (и при това две – едно антично и едно latest and greatest)), Никото ми представи няколко много вълнуващи идеи и конфигурации за nginx-а.
Плана е да deploy-на наново nginx, php-fpm и да пренапиша изцяло vhost-овете. Освен това сега използвам letsencrypt за … да – да генерирам сертификати за Let’s Encrypt. Ще мигрирам на certbot.

Тези промени ще подобрят:

  • Работата на marvin като цяло;
  • Много по-леката конфигурация на nginx, очаквам скоростта на блога и останалите сайтове да се качи значително;
  • Всичко, което носи PHP 7.2 и най-вече сигурност и скорост;
  • Сигурността трябва да се повиши (имам някои проблеми си правата и потребителите, които ще бъдат разрешени с деплоя на новия nginix);
  • Ще науча много за nginx, конфигурацията му и работата с vhosts;
  • Ще разкарам всичките php-fpm глупости – в момента търкалям PHP 5.3 (което е свръх-антично) и PHP 7.0.3. Накрая ще стане само един (колко крайно прозвуча това :D) – 7.2.

 

In other news:

01.12.2017 – Linux Journal shuts down

Едно от най-големите списания за Linux и Open Source спира изданията си от днес. Първото издание на списанието е от 1994 година и по техни думи е с едно от най-силните микро общества фокусирани в open source-а. Последното печатно издание е от 2011 година, но портала остава популярен и до днес.
Финалната статия на Kyle Rankin повдига няколко основни въпроса относно open source, linux и идеята, която стои зад тях – свобода, прозрачност и гъвкавост.

So long and thanks for all the bash, Linux Journal!

Мина Zara Code Week 2017

Мина втория ми за годината Code Week този път в Стара Загора само няколко седмици след Code Week Varna 2017.

Бях поканен от Венко Добрев, който е от ония суперактивни хора, които искат да правят света около себе си по-добър и не мрънкат, а действат.  И понеже е и скромен ще опиша аз с какво се занимава – беше управител на Beehive за година и половина, два пъти е организирал Code Week Варна (като веднъж бях сред лекторите там), два пъти в Стара Загора, два Startup Weekend-а, бил е един от организаторите на TEDxStaraZagora, помага на брутално якия coworking space ZaraLab (Венко, ако четеш това прати малко снимки да покажем на хората колко яко е местенцето). Освен това започна нова образователна инициатива за мотивация на ученици и отделно младежи в неравностойно положение – “Аз и моят успех”. Опита се да направи нещата по-добри като работеше в община Стара Загора като младши специалист в отдел спорт, туризъм и младежки дейности и беше част от екипа писал кандидатурата за Европейски град на спорта 2017, която градът спечели. Сега работи като експерт в Агенция за регионално икономическо развитие – Стара Загора по два международни проекта с колегите – единият за иновации в МСП в селските райони, а другият за зелени обществени поръчки. Сигурно има и други неща, които пропускам.

Та – той беше една от причините да пропътуваме 300 км. Другата бяха останалите лектори, които бяха епични копелета, а на трето, но изобщо не на последно място – хората, които щяхме да срещнем там.

Тръгнахме в Събота, 21 Октомври от Варна и за съжление изтървахме откриването и голяма част от лекцията на Петър ПетровAndroid between Java and Kotlin“. Това, което видях беше интересно и сигурно много практично за Android devs. Лекцията беше много chill, както и повечето от лекциите от двата дни. За Пешо хубаво или нищо! Дори вече не помня от къде се познаваме, но като го представям на някого обикновено споменавам, че първо се е научил да свири на гъдулка (ей, винаги съм си мислил, че е гайда, деба!) и после да програмира.

Последва може би най-епичната лекция от събитието с най-епичния лектор – Oрлин Димитров, който тръгна да говори за “Свързаност на елементите на роботизираните системи“, но след десетата минута и зададени 5 въпроса смени темата и изкара на freestyle почти два часа пълни с хардуер и софтуер и хумор, а в края залата беше залята от мощната вълна ентусиазъм, която Орлин хвърля винаги, когато говори пред хора. Той е и един от виновниците да се запаля по микроконтролите последните седмици. (Орлине – ти ще отговаряш пред Златина защо съм си дал половината заплата за контролери!)

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

ИТ-ПОП-ИДОЛА Михаил Дучев известен сред своите приятели, колеги и врагове като Дучев, още по-известен като грамар-нацито на Интернета, бъг хънтъра на себеподобни, човека, който чупи всичко по пътя си и т.н. и т.н. Та той говори за Xamarin като се посмяхме, показа някои интересни неща и беше достойно (Дучев за 3 минути намери eastern-egg-а, браво :D) закриване на първия ден на Zara Code Week 2017.
Останахме да спим в Митака (Митак №2 всъщност), а преди това се събрахме на бърза и културна вечеря на местна кръчма (на която забравих името). Та там салатите бяха два типа – от 500 и от 1000 гр. Със Златина успяхме да смачкаме една 500 грамова с малко зор.
След като се правихме на културни за около 12 минути някой започна с първия виц и така до полунощ минахме от тъпи вицове, които всеки знае до най-дълбоките дебри на черния хумор. Беше абсолютно епично и още повече да говориш с такива хора, които имат толкова много неща да споделят (и хумора е само малка част от тях).

Прибрахме се и легнахме. На следващия ден аз бях с откриващата лекция.

Станахме в 7 и към 8:00 се замъкнахме в бизнес сградата в която щеше да се проведе събитието. Поръчахме по едно кафе и направих финални щрихи (тоест си донаписах презентацията :D) на презентацията (баси тъпото повторение), хората започнаха да се нижат един по един и в 10:30-10:40 излязох да говоря аз.

Минах набързо през основните неща, които казвам на лекциите си и се насочих към темата за сигурност. Разказах в известни детайли как да направим анализ на някакъв уеб ресурс, който в случая беше моя блог (не ми се искаше пак да чупим общинско/държавно on the fly), разказах за DVWA и накрая пуснах един dictionary attack към блога ми. Разказах малко за Google Dorks, a накрая имаше и малко performance testing с jMeter, за който не остана много време, че вече бях направил почти два часа.

Имаше доста дискусии и въпроси и се получи много cool цялата работа. Дори май бях и полезен.

След мен излезе Димитър Костов за да говори за Mobile scaffolding. Лекцията беше супер полезна и интересна, разказа доста неща и най-накрая научих какво е scaffolding. Също така беше и единствения лектор, който излезе и започна да говори за това, което прави от самото начало така, че да бъде разбран добре и от хора, които нямат никакъв опит в бранша. Получи се добра лекция.
Решихме след него да си ходим със Злати, но се оказа, че Митака и Тошко са към Варна и останахме за предпоследната лекция на Тодор Янков – “Интро в JavaScript”. Презентацията му беше web based с интеграции и най-вече – code snippet editor директно в нея.

Разказа ни за JS, react и направи един съвсем лек проект (взимаше JSON данни от weather provider и ги показваше на екрана). Имаше и супер много въпроси, дискусии и показа завидни познания по linux/zsh/vim.
Тръгнахме като ми беше терсене, че няма да чуем последната лекция на нашия домакин – Димитър Стефанов, който е backend developer в Big Mustache Game говори за “Grimm side of programming”. Самия той се занимава от безброй много години със C# .NET и MSSQL и разказа за C#, релационните база данни и концепцията клиент/сървър (това ми беше преразказано от Венко като каза, че лекцията е била доста добра).

 

Снимки – скоро.

How to enable friendly URL’s for Joomla using nginx

Когато преместих вече античния nasam.be на marvin имах един основен проблем свързан с прехода между apache2 и nginx и това беше, че nginx не поддържа .htaccess (повече можете да прочетете тук и тук). Там (почти) всичко е организирано в sites-avialable/ профила на сайта, който хоствам и грозните линкове, които Joomla генерира (от типа на https://nasam.be/index.php?option=com_content&view=article&id=183:qa-test-types&catid=53:software-testing&Itemid=167) с един ред и един рестарт станаха по-прилични (https://nasam.be/kompyutarni/software-testing/qa-test-types.html)

Промяната е в /etc/nginx/sites-avialable/project_name:

location / {
 try_files $uri $uri/ /index.php?$args;
 }

Или добавяме в основната location / {} директива точно преди затварящата къдрава скоба следния ред:

 try_files $uri $uri/ /index.php?$args;

Следва рестарт на nginx, сменяне на настройките в Joomla да се използва mod_rewrite и това е :)

 

Искам да отбележа, че това не е специфично Joomla! или WordPress решение, а универсално. Ако имате каквато и да е система, която използва rewrite на линковете това решение би трябвало да ви свърши работа.

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 – достатъчно съм идиот за да го накарам да ми се огъне в ръчичките. Така направете и вие. Но ако искате да мрънкате – мрънкайте, най-много някой да ви наругае.