Расширенный скрипт в Bash (bash + md5) для защиты «чего-то» (+ подробное объяснение)

Несколько дней назад Я рассказал им о Флэтпресс, una aplicación web (CMS) mediante el cual pueden tener un blog o algo similar sin necesidad de usar bases de datos, ni complicarse mucho 

Ну, у меня на ноутбуке есть Флэтпресс para apuntes personales, cosas que no quiero olvidar y por eso los escribo en esta bitácora personal. Pero, como varios ya deben saber… yo soy algo paranoico con la seguridad, y, si es referente a la seguridad de MIS pensamientos, no tienen idea de qué tan paranoico puedo llegar a ser 

Итак, я столкнулся с проблемой: как с помощью FlatPress я могу защитить весь контент на нем?

Я подумал о нескольких приложениях, которые позволяют шифрование данных, но… ни одно из них не делало именно то, что я хотел, поэтому я взял на себя задачу программирования того, что хотел сам.

Теперь я покажу вам созданный мной сценарий, который выполняет следующие функции:

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

1. Он показывает диалоговое окно с вопросом, являетесь ли вы KZKG ^ Gaara, если вы нажмете NO, скрипт закроется, если вы нажмете YES, все будет продолжаться как обычно.

2. Показать текстовое поле с вопросом, какой пароль:

3. Si presionas Cancelar se cierra el script, ahora viene uno de los trucos del script  …

3.1. La lógica es que el script compare el password que escribimos con uno que esté predefinido dentro del mismo script ya, y si los passwords concuerdan entonces sigue ejecutándose, y si los passwords no concuerdan pues que aparezca un mensaje de error. El problema es que, si ponemos el password correcto dentro del script así sin más, cualquiera que abra el script con un editor de texto podría ver muy claramente el password correcto.. y esto amigos míos, es simplemente una falla imperdonable 

3.2. Чтобы не вводить такой пароль в скрипт в виде обычного текста, я использовал MD5. То есть в начале скрипта я заявил, что правильный пароль - «2dac690b816a43e4fd9df5ee35e3790d«, А это MD5:«desdelinux«. ... Я ничего не понимаю!! … 

Давайте поподробнее. Если я сейчас напишу в файл (например, ~ / pass.txt) текста: desdelinux

Если в терминале я пишу: md5sum ~ / pass.txt

Он вернется ко мне: 2dac690b816a43e4fd9df5ee35e3790d sum

И ... как вы можете видеть, этот первый столбец, в котором много цифр и букв в произвольном порядке, идентичен столбцу, который я поместил выше, и это столбец в объявленном скрипте.

Ну, этот первый столбец - это MD5 desdelinux

Если они поставят следующее, он вернет только 1-й столбец, который нас интересует: md5sum ~/pass.txt | awk '{print $1}'

4. Итак, работа скрипта в этой конкретной части:

4.1. Скрипт поместит пароль, который вы написали, во временный файл с именем темп.txt, и он извлечет MD5 из содержимого этого файла с помощью команды:

md5sum temp.txt | awk '{print $1}'

4.2. Если MD5 пароля, который вы только что написали, НЕ идентичен тому, который он определил (то есть, тот, который записан в скрипте), он закроется и выдаст ошибку:

4.3. Si el password coincide, perfecto… el script continúa 

5. Когда пароль совпадает, скрипт выполнит ряд шагов, в моем случае:

5.1. Он войдет в папку / домашний / общий / размещенный / - » компакт-диск / домашний / общий / размещенный /

5.2. Папка FlatPress называется «я», и она сжата в .RAR и защищена паролем (пароль тот же, что и должен был быть установлен раньше), поэтому сценарий распакует этот файл (me.rar) - » rar x me.rar -hp $ MWORD

рар х - »Он распаковывает файлы и папки в том же порядке, что и они.

я.rar - »Это файл, который я хочу распаковать.

-hp $ MWORD - »Здесь я говорю вам, что вы должны использовать пароль для распаковки файла, а пароль - это переменная $ MWORD (эта переменная - это пароль, который мы ввели ранее)

5.3. Итак, если он был хорошо разархивирован, я удалю файл me.rar ... почему? Ну, потому что нет никакого смысла в существовании .rar, если я работаю с файлами, которые у меня были внутри, и эти файлы меняются, потому что я пишу новинки в блоге - » поговори со мной.rar

5.4. Я должен изменить разрешения, чтобы все работало нормально - » chmod 777 -R me / (помните, что папка me / - это то, что содержало сжатый файл me.rar)

5.5. Он покажет мне окно, в котором говорится, что у меня есть 10 секунд, чтобы открыть "браузер"…. WTF !, что это значит? ...

5.5 (а). Simple, muy simple…  … Yo abro el navegador (en este caso Реконк), и я работаю над новым постом, но когда я закрываю браузер, скрипт снова сжимает папку me / в .rar (оставаясь в me.rar).

Это возможно, потому что скрипт каждые 3 секунды проверяет, открыт ли Rekonq или нет, если он обнаруживает, что он открыт, скрипт ничего не делает, но если он обнаруживает, что он НЕ открыт, он выполняет: rar a me.rar -hp $ MWORD me / * && rm -R me /

Это означает, что он сжимает папку мне/ en я.rar (и он поставит пароль, который будет таким же, как мы уже видели), и как только вы его сожмете и если ошибок не было, он удалит папку мне/ со всем его содержанием.

5.5 (б). ¿Esto en qué nos ayuda? … simple, esto nos evita tener que acordarnos de que debemos volver a proteger nuestro contenido, pues solo necesitamos dejar de trabajar en él (cerrar el navegador) y el script hará todo el resto del trabajo 

6. Listo, esto viene siendo todo explicado de forma general 

… aunque aún hay otro detalle 

Скрипт имеет еще большую защиту, защита, которая отключена (прокомментирована), это следующие строки:

if [ "$USER" != "$ME" ]; then
rm *.sh
kdialog --error "Sorry but u are not me. Auto-destroying..." --title "Im Me..."
exit
fi

Это просто. Переменная $ USER является глобальной переменной системы, если в терминале поставить:

echo $USER

Вы увидите то, что показывает вам ваш пользователь ... ну, логика этих строк проста.

Если $ USER не соответствует переменной $ ME (а она была объявлена ​​мной в сценарии, а это: "gaara"), сценарий удалит ВСЕ файлы .sh que estén en esa carpeta, o sea, se autodestruirá 

Это сделано для того, чтобы кто-то другой не мог выполнить сценарий на другом компьютере, хехехе.

И что ж, я не думаю, что есть что-то еще объяснять, я оставляю сценарий:

.SH загрузка файла
Смотрите сценарий в нашей вставке

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

Esto lo hice para suplir una necesidad muy específica mía, lo comparto esperando que alguna que otra línea o idea acá explicada le pueda servir a alguien 

Между прочим, скрипт предназначен для KDE, поскольку отображаемые диалоги (окна) взяты из KDE (с использованием KDialog), но его можно адаптировать для Gnome / Unity / Cinnamon / Mate с помощью Зенити, или используйте его на 100% в терминале, используя просто командный диалог.

Y sí, aún el script tiene alguna que otra falla, por ejemplo si el script descomprime el .rar, y luego alguien cierra a la fuerza (mata) el script, el contenido del .rar quedará desprotegido, son algunos detalles que quedan por pulir… pero eh!, que también nosotros debemos controlar que nadie pueda revisar nuestro ordenador 

Para finalizar quiero aclarar que yo NO soy programador ni mucho menos, no me considero tal, imagino que se puede optimizar líneas en el código, o usar alguna función para mejorar el funcionamiento del script… pero lo dicho, no soy programador 

Cualquier duda que tengan al respecto me dicen, si bien el script puede que no les sirva pues no lo necesitan, siempre podrán aprender algún que otro tip de él 

привет

PD: Я знаю что Elav он скажет, что я слишком параноик ... или что я зря трачу время, но это не так. Я хотел что-то очень специфическое, очень специфическую систему безопасности, и я сам это запрограммировал… Как это круто? … СМЕШНО!!


Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

      Хаккан сказал

    Это интересно, но я думаю, что вопрос да / нет очень пердит xD
    И как вы думаете, вместо того, чтобы использовать rar, который является проприетарным и не обеспечивает истинной безопасности, замените его на gpg, программное обеспечение безопасности, которое более чем проверено годами и существует практически во всех дистрибутивах 😉
    Другое дело, вы можете передать md5sum строку, вам не нужно создавать временный файл. Здесь я также рекомендую вам перейти на sha, который намного безопаснее, попробуйте в терминале: shasum

    Saludos!

         КЗКГ ^ Гаара сказал

      Привет и спасибо за комментарий 😀
      GPG позволяет мне упаковать каталог со всем его содержимым? Дело в том, что я действительно использовал его только для отдельных файлов, а не для каталогов, содержащих подкаталоги и файлы.

      ооо ... отлично насчет шампанского, я его не знала 😀
      Я продолжу модифицировать скрипт, чтобы использовать этот, и… да !! правда, просто: echo "$ PASSWORD" | шасум Строку уже получил, правда в файл писать не надо :)

      Большое спасибо за комментарий, я уже узнал кое-что новое 🙂
      привет

         Зиг84 сказал

      это то же самое, о чем я спрашивал ...

           КЗКГ ^ Гаара сказал

        Что вам нужно, так это выяснить, как GPG зашифровать файл и передать ему пароль в той же строке ... например:
        gpg -e file.tar.gz –password elpassword неважно

        Есть идеи, как это сделать? 🙂

             Хаккан сказал

          Чтобы зашифровать каталог c / gpg, вы должны сначала упаковать его tar.
          тогда в этом случае удобно использовать симметричное шифрование с параметром -c (см. разницу между симметричным и асимметричным шифрованием в Википедии).
          тогда это будет примерно так:
          tar -czf destination.tgz исходный_каталог / && echo $ passwd | gpg –batch –compress-level 0 -c –passphrase-fd 0
          это создаст сжатый файл с именем "destination.tgz" и зашифрованный файл с именем "destination.tgz.gpg". как исходный каталог, так и сам компресс должны быть удалены в целях безопасности (проверьте команду shred)

          расшифровать:
          echo $ passwd | gpg –batch -d –passphrase-fd 0 encryption_file.tgz.gpg | tar -xz
          который извлечет файлы в текущий каталог (затем mv можно использовать для перемещения их в другое место)

          Есть вопросы, ответьте на этот комментарий 🙂

          привет!

               Хаккан сказал

            эм, остерегайтесь двойных дефисов (-) и одинарных дефисов (-) ... есть ли способ написать что-то, как если бы это был код, чтобы формат не изменился?
            prueba de codigo -- -
            [code] тестовый код - - [/ code]

               Хаккан сказал

            Я трачу его более подробно

            сжать и зашифровать:
            tar -czf destino.tgz directorio_fuente/ && echo $passwd | gpg –batch –compress-level 0 -c –passphrase-fd 0
            Обратите внимание, что это два шага: сначала создайте сжатый файл, а затем, если ошибки не было, продолжите шифрование (соединение с помощью &&)

            расшифровать и разархивировать:
            echo $passwd | gpg –batch -d –passphrase-fd 0 archivo_cifrado.tgz.gpg | tar -xz

            салюты!

               КЗКГ ^ Гаара сказал

            Да, вообще-то вчера дома я читал gpg man и там было все необходимое necesitaba
            На самом деле я не совсем так делал, я не использовал эхо или сжатие, я написал об этом, я просто опубликовал его.

            Большое спасибо за помощь, друг, правда.

      Джош сказал

    Замечательный! Я просто искал что-то подобное и наткнулся на вашу статью. Я собираюсь протестировать его, чтобы защитить свои данные. Когда дело касается компьютерной безопасности, нельзя быть слишком параноиком. Спасибо

         КЗКГ ^ Гаара сказал

      Спасибо, ха-ха.
      Вы ведь поняли, как работает сценарий?

      Кажется, это намного сложнее, чем есть на самом деле.

      Спасибо за комментарий, правда 😀

      привет

      PS: Действительно, безопасности никогда не бывает, хахаха.

           Джош сказал

        Понять это стоило мне немного (я читал 3 раза), так как давно не пользуюсь linux. Но это действительно просто, и всегда приятно учиться подобным вещам. Приветствую и еще раз спасибо.

             КЗКГ ^ Гаара сказал

          Важно понять это хе-хе. Я пытался объяснить все предельно подробно, но думаю, что слишком много расширил, хахаха.
          Спасибо тебе 🙂

      Auroszx сказал

    Вау, сценарий очень хороший 🙂

    PS: Паранойя больше 9000! xD

         КЗКГ ^ Гаара сказал

      хахахахахахаха это я… LOL !!

      Рафаэль сказал

    Глядя на ваш скрипт, я думаю, что это можно сделать с помощью xdialog, если у вас нет kde :)! Ура

         КЗКГ ^ Гаара сказал

      О, я не знал про xdialog ... Надо взглянуть, чтобы увидеть 😀
      Спасибо за информацию.

      Зиг84 сказал

    почему бы не использовать tar.xz / gz и gpg вместо rar?

         Рафаэль сказал

      это потому, что у вас уже есть это в rar, где у вас есть ваша CMS

      Ситукс сказал

    Отлично @ KZKG ^ Gaara несколько дней назад я думал о чем-то в этом роде, но я на экзаменах, поэтому у меня нет времени ни на что, и вдруг я вижу вашу статью…
    Попробую на следующей неделе 🙂

         КЗКГ ^ Гаара сказал

      Спасибо, подробности здесь я 😀

      Truko22 сказал

    xD Я ничего не понял uu, но если я хочу, как правильно использовать kdialog в скриптах, как получить сообщение в уведомлении KDE

         КЗКГ ^ Гаара сказал

      Чтобы получать сообщения в уведомлениях KDE, попробуйте установить пакет: libnotify-bin
      Затем в терминале вы помещаете:
      notify-send "texto texto texto"

      И вы увидите, как круто 😀… и это работает для KDE, Gnome, Unity, Cinnamon, Mate и Xfce 😉

      Однако в этом скрипте я не использую уведомления как таковые, а просто окна KDialog. В терминальном типе:
      kdialog

      И там вы увидите помощь 😉

      Привет 😀

           Truko22 сказал

        Большое спасибо o /

      Хоэль антонио васкес сказал

    Привет, хороший пост, просто предложение, это нормально, что с md5 это не видно невооруженным глазом, но некоторые любопытные могут использовать радужную таблицу, чтобы увидеть, находится ли там пароль, преобразованный в md5, я рекомендую использовать bcrypt (http://bcrypt.sourceforge.net/), это всего лишь предложение, можно использовать по любому поводу, Приветствую.

         КЗКГ ^ Гаара сказал

      Спасибо 😀
      На самом деле да, MD5 не идеален и есть те, кому удалось получить пароли, я посмотрю это приложение 😉

      Спасибо за ваш комментарий.

      Зиг84 сказал

    с симметричным только в kdialog он запрашивает пароль
    а с асимметричным - с использованием открытого ключа.

    Сразу уточню, что программиста в помине нет.

         КЗКГ ^ Гаара сказал

      Да, уже успел зашифровать с помощью GPG (по сути я только что выложил об этом пост) хе-хе.

      Дорогой сказал

    КЗКГ ^ Гаара всегда читаю твой пост.
    Создайте один для использования с XFCE.
    Поцелуй. Дорого

         КЗКГ ^ Гаара сказал

      Здравствуйте и прежде всего добро пожаловать в блог 😀
      хахаха спасибо, я знаю, что иногда это сложно, потому что я пишу несколько технических вещей, но я всегда стараюсь все объяснить как можно яснее

      Я немного поэкспериментирую с XDialog или Zenity, чтобы увидеть, работает ли он для Xfce, ха-ха, я проведу тесты в виртуальном Xubuntu 🙂

      привет

      Элинкс сказал

    Довольно полезный мужик, спасибо!

    Привет!

      Дамиан Ривера сказал

    Спасибо, мне очень поможет защитить некоторые файлы

    Мне пришлось адаптировать его к zenity, потому что у меня сейчас нет kde: \

    Здесь я оставляю скелет, который собираюсь использовать, адаптированный к зенити.

    http://paste.desdelinux.net/4641

    Еще раз спасибо и привет 😀

         КЗКГ ^ Гаара сказал

      оооо здорово, спасибо тебе большое 😀 😀
      Я помню, как кто-то просил об этом, но для Xfce с Zenity это будет работать в Xfce, верно?

           Дамиан Ривера сказал

        Да только что оставалась команда добавить команды для выполнения, после передачи пароля shasum или md5

        Его нужно было бы модифицировать для разных нужд каждого человека, чтобы защитить разные вещи на разных маршрутах с разными командами.

        Или, может быть, добавление другой части (GUI) для создания конфигурации безопасности нашего файла

        Привет 😀

             Дамиан Ривера сказал

          У меня было время и xfce (в Archlinux), и я уже полностью адаптировал сценарий, как он был, для xfce с использованием zenity (я думаю), поскольку тот, который я оставил выше, был только скелетом, который я использовал

          http://paste.desdelinux.net/4644

          Можно ли его редактировать, если в нем баг из пасты?

          Случается, что у меня есть несколько графических оболочек, и я не знаю, будет ли они работать в чистом xfce, например в xubuntu.

          Привет 😀

      Матиас Гастон сказал

    Интересно че !!! Хороший вклад !!!!!!

    Я новичок в программировании, я изучаю BASH понемногу ... но некоторые вещи приходили мне в голову, и они могут быть вам полезны, а могут и не оказаться.
    Когда вы говорите, что очищенный скрипт имеет встроенный пароль, и кому-то было бы непростительно открыть его и прочитать оттуда ... вы предлагаете весь этот трюк по внедрению MD5 в качестве меры защиты.

    Это неплохо в качестве первого шага к тому, чтобы усложнить жизнь потенциальному злоумышленнику, но обратите внимание на следующие идеи (которые можно даже применить друг к другу)

    ИДЕЯ 1) Что делать, если вы сохраняете пароль в файле на своей машине, а не размещаете его в скрипте?

    EJ: в txt поместите ключ и сохраните его в / home / /bla/bla/key.txt
    В вашем скрипте вы вызываете ключ как KEY = "$ (cat $ HOME / blah / bla / key.txt)", затем вы бросаете if $ questionkey = $ KEY, затем ... и т. Д.

    Таким образом, вы получаете 3 вещи +1 преимущество:
    1) Чтобы пароля не было в скрипте. (Вы избегаете MD5)
    2) Путь, где находится пароль, зависит от имени пользователя. (Любой, кто хочет его открыть, перенаправляет куда угодно) В 99.9% случаев скрипт не работает.
    3) Если вы хотите большей безопасности, удалите все права доступа к файлу key.txt для всех остальных пользователей, кроме вашего.
    4) Преимущество: возможность смены пароля в любое время без редактирования скрипта. Потому что проверка осуществляется извне через файл.

    ИДЕЯ 2) Как насчет обфускации всего сценария bash, чтобы его даже нельзя было открыть?

    Один из способов сделать это - воспользоваться тем фактом, что вам нужно компилировать на C.
    Затем он вводит сценарий внутри кода C, и все, что он делает, это вызывает этот сценарий (но он находится внутри программы). Во время компиляции ... все остается внутри, и ваш вывод является исполняемым ... и больше не скриптом. Есть человек, который уже сделал «скрипт», который выполняет процесс обфускации, что очень практично.

    Больше информации здесь: http://es.wikibooks.org/wiki/El_Manual_de_BASH_Scripting_B%C3%A1sico_para_Principiantes/Compilar_%28ofuscar%29_BASH_scripts_con_C_-_SHC

    ИДЕЯ 3) Что, если вы поместите виртуальное условие в скрипт, где оно требует пароля администратора?

    Например, выполните условие с помощью «sudo», а затем продолжите выполнение сценария, если не остановите его.
    Таким образом, вся защита станет мостом через ваш пароль ROOT.

    Ну не более того ...
    Ура !!!!!!!! и удерживайте BASH.

         КЗКГ ^ Гаара сказал

      ХАХАХАХА Спасибо 😀
      На самом деле сейчас я использую SHA512, потому что он намного лучше, чем MD5: https://blog.desdelinux.net/como-saber-la-suma-md5-o-sha-de-una-palabra-oracion-o-archivo/
      А также GPG как средство защиты вместо сжатия с .RAR: https://blog.desdelinux.net/como-proteger-datos-con-gpg-de-forma-simple/

      Проблема с помещением пароля в другой файл заключается в том, что он помещает пароль в другое место, да, но будет ли он в виде обычного текста? Если мне нужно его зашифровать (что рекомендуется), я оставлю его в том же скрипте, ну ... Я оооочень сильно сомневаюсь, что кто-то может сломать SHA512 хахахаха (см. 1-ю ссылку, и вы поймете 😉)

      Что касается разрешений, если кто-то использует LiveCD, он может открыть .txt, используя корень LiveCD, поэтому разрешения - не совсем лучший вариант.

      Насчет обфускации кода Bash ... да, я думал об этом, и идея ВЕЛИКАЯ, проблема в том, что я не знаю, как это сделать, на самом деле я даже не знаю, можно ли это сделать ХАХАХА.

      Ой, погоди ... теперь я прочел оставшуюся часть комментария О_О ... хе-хе, я не знал, что ты можешь это сделать. Я понятия не имею о C или C ++, но стоит попробовать, lol.

      Насчет идеи 3, неплохо 😀

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

      Спасибо за комментарий и… да, держись, бас !!! ХАХА

         КЗКГ ^ Гаара сказал

      WTF!
      Я уже использовал SHC… GE-NI-AL !!!! О_О

      Атейус сказал

    Очень хороший скрипт, эй, и если вы используете корневую проверку, чтобы иметь возможность запускать скрипт как sudo ./script

    Вам просто нужно добавить этот код в начале

    http://paste.desdelinux.net/4663

    Приветствие

      Neo61 сказал

    KZKG ^ Гаара, мой друг, я думаю, что расширение объяснения не проблема, это хорошо для тех из нас, кто не обладает такими знаниями. Здесь публикуются не обучающие статьи, а только информация о том, что существует. Так что не извиняйтесь, и есть еще кое-что с расширенными объяснениями.

      Данхантер сказал

    Для подобных вещей я использую http://www.truecrypt.org/

      Абель сказал

    Может кто-нибудь поделится сценарием? Мне любопытно, но все ссылки не работают. 🙁

    Спасибо.