Archive for Январь, 2013

Безопасность ваших паролей зависит от вас

Четверг, Январь 24th, 2013

Сегодня на Хабре появилась статья про обновленный поиск. Обновление хорошее, но более интересен один из комментариев в статье, который вскрывает вопиющую небрежность программистов, использующих публичные репозитории Github для своих проектов. Казалось бы, программисты своего рода IT-элита и должны быть достаточно осведомлены о вопросах компьютерной безопасности. Однако ссылка, приведенная в комментарии к статье на Хабре, говорит нам об обратном:

https://github.com/search?q=path:.ssh/id_rsa&type=Code&ref=searchresults

Как видно из результата работы поискового запроса некоторые разработчики не уделяют достаточно внимания вопросу сохранности своих SSH-ключей и в открытом доступе лежит целая куча ключей. Если добавить к этому лежащий (у некоторых) рядом файл known_hosts, то можно только представить размер дыры в безопасности серверов этих горе-программистов.

Проведем небольшое дополнительное исследование. Какие еще пароли могут храниться в репозитории на Github? Правильно — пароли к базе данных в файлах конфигурации веб-приложений. Поищем их:

https://github.com/search?q=path%3Awp-config.php&type=Code&ref=searchresults

https://github.com/search?q=path%3Aconfiguration.php&type=Code&ref=searchresults

https://github.com/search?q=path%3Aconfig.php&type=Code&ref=searchresults

https://github.com/search?q=path%3Adatabase.yml&type=Code&ref=searchresults

https://github.com/search?q=path%3Asettings.py&type=Code&ref=searchresults

Список можно продолжать долго, но выводы можно делать уже на основании этих запросов. Беглый осмотр показал, что, наряду с тестовыми БД на localhost с пользователем root без пароля, достаточно много логинов/паролей к реальным БД.

Вся эта ситуация лишний раз подтверждает, что чаще всего дыры в безопасности появляются по вине человеческого фактора. Помните — безопасность ваших паролей зависит прежде всего от вас самих. Внимательно следите за тем, что выкладываете в публичный доступ. Если даже ваш проект известен только вам и вы думаете, что никто не найдет его никогда — вы ошибаетесь! Гораздо проще предотвратить утечку, чем потом устранять последствия.

P.S. Данный материал написан исключительно в ознакомительных и исследовательских целях. Автор не пользовался ни одним из найденных паролей/ключей. Также автор снимает с себя ответственность за возможные последствия использования информации из статьи третьими лицами.

Code like it’s 1982

Четверг, Январь 24th, 2013

Сегодня в процессе обсуждения старых домашних компьютеров вроде Atari и ZX Spectrum я вспомнил, что недавно нашел листочки, на которых писал свои первые программы для Speccy. Подумал, что стоит сохранить для истории. Внукам буду показывать :) Кому интересно — репозиторий на Github с самой первой программой для ZX Spectrum. Писал ее я, как сейчас помню — в 1998 году, на районной олимпиаде по физике. Задания были тогда сложноватые, решил что знал и стал программировать на Basic с помощью ручки и листочка в клеточку. Сохранить код это, конечно, хорошо, но запустить его спустя 14 лет еще лучше. В этом нам поможет BASin — практически полноценная IDE с отладчиком и эмулятором для написания программ на Sinclair Basic. Результат видно на заглавной картинке из поста. Работает!

Меняем расположение директории с базами MySQL на Ubuntu Server

Воскресенье, Январь 20th, 2013

По мотивам моих вчерашних изысканий. Понадобилось сделать новую виртуалку на Amazon. Данные было решено хранить на отдельном EBS-разделе, чтобы предотвратить их потерю в случае отключения виртуалки и для бекапов через снепшоты. В качестве OS была выбрана Ubuntu Server 12.04 LTS. Что в итоге привело к небольшим сложностям при изменении директории с базами MySQL. В большинстве остальных Linux-дистрибутивов рецепт приблизительно следующий:

  1. Копируем старую директорию MySQL в нужное место (в моем случае это отдельный раздел)
  2. Меняем владельца новой директории ‘chown -R mysql:mysql newmysqldir’
  3. Меняем путь к директории с данными в конфиге MySQL — my.cnf
  4. Перезапускаем mysqld

Однако, на Ubuntu Server после выполнения этих шагов MySQL отказался стартовать и сыпал в dmsg сообщениями вида:

[26176757.175845] type=1400 audit(1358635795.168:93): apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/mysqld" name="/www-data/mysql/ibdata1" pid=7994 comm="mysqld" requested_mask="rw" denied_mask="rw" fsuid=106 ouid=106

Проблема заключается в AppArmor, который блокирует доступ для mysqld к новой директории. Решение простое:

  1. Редактируем конфиг /etc/apparmor.d/usr.sbin.mysqld
  2. Дописываем строчки вида:
    /www-data/mysql/ r,
    /www-data/** rwk,
  3. Перезапускаем AppArmor
  4. Перезапускаем mysqld

Вуаля, все работает :)

Cartoon Tester

Суббота, Январь 19th, 2013

Сегодня пятница и не хочется чем-то техническим вас грузить. Поэтому пост будет про … тестировщиков :) А точнее про комиксы о них. Ссылка под картинкой:

Headless web browsers

Четверг, Январь 17th, 2013

Для тестирования веб-приложений (а именно этим я сейчас и занимаюсь на текущей работе) крайне необходим веб-браузер. Поиграл в капитана Очевидность, ага :) Когда речь идет о ручном тестировании или о запуске небольших тестовых сценариев, то тут все ясно — используется один из обычных браузеров (Firefox, Chrome, Safari, Opera) или Internet Explorer. Но что делать, если у вас есть хороший набор браузерных тестов и вы хотели бы их запускать либо в фоне на рабочем компьютере, либо на выделенном CI-сервере? Запускать обычный браузер и наблюдать мельтешащие окна — не вариант. И тут на помощь нам приходят так называемые headless-браузеры, которые позволяют выполнять ваши тесты с использованием браузера (чаще всего Webkit-based), но при этом не отвлекают вас лишними окнами (создается некоторое виртуальное, невидимое окно браузера, в котором и проходят тесты) Основные существующие headless-браузеры перечислены тут. На случай, если ссылка устареет, ниже приведен этот перечень:

  • HtmlUnit — Java. Custom browser engine. JavaScript support/DOM emulated. Open source.
  • Ghost — Python only. WebKit-based. Full JavaScript support. Open source.
  • Twill — Python/command line. Custom browser engine. No JavaScript. Open source.
  • PhantomJS — Command line/all platforms. WebKit-based. Full JavaScript support. Open source.
  • Awesomium — C++/.Net/all platforms. Chromium-based. Full JavaScript support. Commercial/free.
  • SimpleBrowser — .Net 4/C#. Custom browser engine. No JavaScript support. Open source.
  • ZombieJS — Node.js. Custom browser engine. JavaScript support/emulated DOM. Open source.
  • EnvJS — JavaScript via Java/Rhino. Custom browser engine. JavaScript support/emulated DOM. Open source.
  • Watir-webdriver with headless gem — Ruby via WebDriver. Full JS Support via Browsers (Firefox/Chrome/Safari/IE).
  • Spynner — Python only. PyQT and WebKit.

 

Чёрная команда QA

Среда, Январь 16th, 2013

Уже около 2х лет я работаю в своем текущем проекте. Работаю как один из равноправных членов команды, в непосредственном контакте с разработчиками. До недавнего времени, несмотря на иногда возникавшие проблемы коммуникационного характера, такая организация работы была достаточно эффективной и, что важнее, интересной для меня. Но шло время и стало понятно, что эффективность и мой интерес стали падать (это две очень взаимосвязанные вещи) Возникли резонные вопросы — кто виноват? что делать? Шеф посоветовал прочесть главу «Чёрная команда» из книги Демарко и Листера “Человеческий фактор – успешные проекты и команды“ (её стоит прочесть полностью, что я и постараюсь сделать в ближайшее время) В этой главе рассказывается об интересном факте существования в одной компании отдельно выделенной группы тестировщиков, которые представляли собой монолитную боевую единицу по повышению качества продукта. В книге вводится такое понятие как «кристаллизация»:

Команда, прошедшая кристаллизацию – это группа людей, столь сильно связанных (не веревками), что целое становится больше суммы составляющих его частей. Производительность этой команды выше, чем производительность тех же людей, не перешедших порог кристаллизации. И, что столь же важно, удовольствие от работы также выше, чем можно было бы ожидать, учитывая природу работы.

Как только начинается кристаллизация команды, вероятность успеха очень резко возрастает. Управлять этой стихией – одно удовольствие. Управление в традиционном смысле этого слова им не нужно, и уж точно не нужны дополнительные стимулы. Они уже обладают собственным импульсом.

Кристаллизацию команды обычно сопровождает сильное чувство индивидуальности.

Участники хорошей команды испытывают ощущение элитарности. Они чувствуют, что составляют нечто уникальное, что они выше всякой заурядности. Они проявляют смелость, достойную спецназа, что может отчасти раздражать людей, не входящих в группу.

Ранее мне не приходилось работать в подобных командах, но сама идея выглядит очень здраво и интересно. Как минимум, она стоит того, чтобы ее опробовать на практике.

Цитата из книги под катом.

(далее…)