• Как быстро проверить Linux сервер на предмет взлома

    Примерно два года назад я арендовал у одного немецкого хостера не очень мощный сервер на базе Centos 5.2. На нём живут несколько вебпроектов, приносящих некоторую прибыль, и поэтому, я стараюсь присматривать за ним по мере возможности.
    На Centos есть стандартный анализатор логов Logwatch, который запускается ежедневно по крону, анализирует содержимое /var/log, делает сводный отчет и присылает его по электропочте. В один прекрасный день я обнаружил в этом отчете запись:

    --------------------- yum Begin ------------------------ 
     
     Packages Installed:
        lzo2 - 2.02-3.el5.rf.i386
        dnstracer - 1.8-1.2.el5.rf.i386
        openvpn - 2.0.9-1.el5.rf.i386
    
    ---------------------- yum End -------------------------
    


    В тот момент меня она очень смутила, так как в предыдущий день на сервер я не логинился и тем более ничего не устанавливал. Первое, что пришло в голову — сервер был скомпроментирован. Себя я считал уверенным пользователем Linux, однако я растерялся. Благо в тот момент в icq был мой бывший коллега, лучший системный администратор, которого я знаю, и просто очень хороший человек.
    Он помог быстро проверить систему. В результате у меня сформировалось краткое HowTo о том, как быстро проверить свой сервер на предмет взлома. Уверен, что многим Храброчитателям оно будет полезно. Предполагается, что пользователь знаком с консолью Linux/Unix.

    Читать дальше →
  • jPlayer — плагин для проигрывания аудио и видео

      imageЯ уже писал про скрипт audio.js, позволяющий проигрывать аудио файлы использую возможности html5 и flash. Пост был встречен хорошо, поэтому сейчас я хочу рассказать про jPlayer — jQuery плагин для проигрывания аудио и видео.
      Читать дальше →
    • Как устроен AES

      О чём эта статья



      Долгое время я считал, что криптографические алгоритмы шифрования и хеширования, вроде AES и MD5, устроены очень сложно и написать их совсем не просто, даже имея под рукой полную документацию. Запутанные реализации этих алгоритмов на разных языках программирования только укрепляли это мнение. Но недавно у меня появилось много свободного времени и я решил разобраться в этих алгоритмах и написать их. Оказалось, что они очень просто устроены и для их реализации нужно совсем немного времени.

      В этой статье я напишу как устроен алгоритм шифрования AES (которого иногда называют Rijndael) и напишу его на JavaScript. Почему на JavaScript? Чтобы запустить программу на этом языке, нужен только браузер в котором вы читаете эту статью. Чтобы запустить программу, скажем, на C, нужен компилятор и найдётся совсем мало желающих, готовых потратить время на компиляцию кода из какой то статьи. В конце есть ссылка по которой можно скачать архив с html страницей и несколькими js файлами — это пример реализации AES на JavaScript.

      Читать дальше →
    • «Я не пишу юнит-тесты, потому что ...» — отговорки

      • Translation
      Я глубоко верю в методику TDD (разработка через тестирование), так как видел на практике пользу от неё. Она выводит разработку ПО на новый уровень качества и зрелости, хотя она до сих пор не стала повсеместно распространённой. Когда наступает момент выбора между функциональностью, временем и качеством, всегда страдает именно качество. Мы обычно не хотим потратить больше времени на тестирование и не хотим идти на уступки в количестве выпускаемой функциональности. Если вы не планировали использовать методику TDD с самого начала проекта, то потом очень трудно перейти на неё.

      Все мы слышали
      множество оправданий
    • Перехват вызовов API-функций

        — Папа, я бежал за троллейбусом и сэкономил пять копеек!
        — Сынок, бежал бы за такси — сэкономил бы пять рублей!


        Сегодня я хочу рассказать вам, как сэкономить 10 тысяч долларов. А заодно, что гораздо менее интересно – научить перехватывать вызовы Win32 API функций, и не только. Хотя, в первую очередь – конечно, именно их.
        Читать дальше →
      • Текущее состояние инструментов. Взгляд пользователя

          Предупреждение: Эта статья вас ничему не научит. Это очень высокоуровневый взгляд, мои мысли, моя рефлексия на вопрос, который для меня важен + небольшое этнографическое исследование по графическим клиентам git-а.

          Поговорим о распределенных системах управления версиями.

          CVS был грустным, медленным, неатомарным („ничего не трогайте, я коммичусь“), зато с нормальным клиентом в Эклипсе.

          SVN был медленным и поначалу веселым, но с появлением первой ветки тоже грустным („ничего не коммитьте, я мержусь“), с двумя разными клиентами в Эклипсе, баги которых нежно дополняли друг друга.

          Тогда я выучил git. Git — это такой нелогичный набор утилит командной строки, в котором ежедневные операции выполняются последовательностью из двух–четырех команд.
          Читать дальше →
        • Управление заданиями

            Наверное всякий nix-оид знает что запуская команду с амперсандом на конце — она уходит в фон, продолжая работу.
            Таким образом запущенная команда превращается в job (задание).
            Более продвинутые знают что можно вывести список запущенных заданий командой jobs, и переключиться между ними командами fg (вывести фоновую задачу в оболочку)/ bg (отправить остановленное задание в фон). Остальными командами пользуются куда реже, а большинство начинающих линуксоидов про них читали мельком, но забыли, или вообще никогда не знали. А между прочим кроме: jobs, fg и bg есть disown, wait и даже kill.
            Не считая тех, что можно использовать внутри задания или для управления написанными выше командами: enable, builtin.
            Итак если вам интересно как делается:
            1. Приостановка job-в. Остановка (kill).
            2. Запуск ранее приостановленного job-а.
            3. Advanced нумерация заданий.
            4. Ожидание завершения фоновых задач.
            5. Команда disown.
            прошу под кат
          • Почему я работаю на почасовой оплате

            • Translation
            Перевод статьи молодого греческого программиста «Why I bill hourly»

            Недавно ко мне обратился мой первый потенциальный клиент, который хотел добавить несколько возможностей в небольшое приложение на Django. Я огласил свою часовую ставку, чем крайне его шокировал — он-то хотел услышать фиксированную цену за нужные ему доработки. Что из этого получилось? Мы работаем вместе, он очень доволен как результатами, так и суммами, которые он на них тратит, а я не поступился своими принципами оплаты. Вот аргументы, которые я использовал в защиту мнения о том, почему почасовая ставка лучше для всех заинтересованных сторон — может быть, они помогут кому-то еще.

            Я люблю сравнивать разработку программного обеспечения с возведением здания, начиная с пустого земельного участка. Процесс выглядит примерно так:

            Клиент: Вот участок, на котором мы будем строиться. Вот наброски того, что мы хотим построить. Можете назвать точную стоимость постройки?

            Любой инженер-строитель шарахнется от такого предложения, программисты же в своей жажде заключить сделку прикинут смету, удвоят ее, добавят 30% и будут надеяться на лучшее. Как отвечаю на такой вопрос я?

            Читать дальше →
          • Кодировки


              Всем рано или поздно приходится работать с различными кодировками. Заметив в коде своей команды различные, порой странные, подходы к решению этих проблем, пришлось провести разъяснительную беседу. Ниже поделюсь своим видением правильной работы с не-ASCII символами в коде. Буду рад конструктивной критике.

              Читать дальше
            • Cloud Zoom: интересный плагин для увеличения изображений

                Cloud Zoom – это облегченный, быстро настраиваемый jQuery плагин, который позволяет увеличивать изображения на ваших веб-страницах. Можно использовать этот плагин для создания увеличенных изображений с различными характеристиками, такими как теневой эффект, внутреннее увеличение и размытое изображение. Этот плагин работает во всех браузерах, включая IE6.

                image

                Cloud Zoom очень прост в обращении и хорошо документирован. Можно легко изменить вид эскиза изображения, линзу и увеличительное окошко, используя CSS. Он предлагает несколько встроенных опций, позволяя изменять его поведение, включая: высоту, ширину и позицию увеличительного окошка; тень; прозрачность; степень сглаживания/искаженности увеличенного изображения при его движении; добавления заголовков.
                Читать дальше →