Розширений сценарій у Bash (bash + md5) для захисту "чогось" (+ Детальне пояснення)

Кілька днів тому Я розповів їм про FlatPress, веб-додаток (CMS), за допомогою якого вони можуть вести щоденник або щось подібне, не використовуючи бази даних або не ускладнюючи 🙂

Ну, у мене на ноутбуці a FlatPress для особистих заміток, речей, про які я не хочу забувати, і тому я їх пишу в цьому особистому щоденнику. Але, як деякі з вас вже повинні знати ... Я дещо параноїк у безпеці, і, якщо це стосується безпеки МОЇХ думок, ви навіть не уявляєте, яким параноїком я можу бути

Тож я зіткнувся з проблемою: як за допомогою FlatPress я можу захистити весь вміст на ньому?

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

Зараз я покажу вам сценарій, який я зробив, який робить наступне:

Сценарій розроблений для робота в KDE, якщо їх немає KDE діалогові вікна їм не відображатимуться.

1. З’явиться діалогове вікно із запитом, чи ви KZKG ^ Гаара, якщо натиснути НІ, скрипт закриється, якщо натиснути ТАК, все триватиме як зазвичай.

2. Покажіть текстове поле із запитанням пароля:

3. Якщо натиснути кнопку Скасувати, сценарій закривається, тепер з’являється одна з хитрощів сценарію 😉 ...

3.1. Логіка полягає в тому, що сценарій порівнює пароль, який ми пишемо, з паролем, який вже визначений у тому ж сценарії, і якщо паролі збігаються, він продовжує працювати, а якщо паролі не збігаються, з’явиться повідомлення про помилку. Проблема полягає в тому, що якщо ми введемо правильний пароль всередину сценарію просто так, кожен, хто відкриє сценарій за допомогою текстового редактора, може дуже чітко побачити правильний пароль .. і це, мої друзі, це просто непростимий провал

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. Сценарій помістить пароль, який ви записали, у тимчасовий файл із назвою temp.txt, і він витягне MD5 із вмісту цього файлу за допомогою команди:

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

4.2. Якщо MD5 пароля, який ви щойно написали, НЕ збігається з тим самим, який він визначив (тобто тим, що написаний у сценарії), він закриється і видасть помилку:

4.3. Якщо пароль відповідає, ідеально ... сценарій продовжується 😀

5. Коли пароль збігається, сценарій виконає ряд кроків, у моєму випадку:

5.1. Він увійде в папку / home / shared / hosted / - » cd / home / shared / hosted /

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

рідкісний х - »Це робить декомпресію файлів і папок, зберігаючи той самий порядок, що і вони.

я.рідкісний - »Цей файл я хочу розпакувати.

-hp $ MWORD - »Тут я кажу вам, що для розпакування файлу потрібно використовувати пароль, а паролем є змінна $ MWORD (ця змінна - пароль, який ми вводили раніше)

5.3. Отже, якщо він був добре розпакований, я переходжу до видалення файлу me.rar ... чому? Ну, тому що немає сенсу, що .rar існує, якщо я працюю з файлами, які у мене були всередині, і ці файли змінюються, тому що я пишу нові речі в блозі - » rm me.rar

5.4. Я повинен змінити дозволи, щоб усе працювало добре - » chmod 777 -R я / (пам’ятайте, що папка me / - це те, що містило стислий me.rar)

5.5. Він покаже мені вікно, яке повідомляє, що у мене є 10 секунд, щоб відкрити "" браузер ... WTF!, Що це означає? ...

5.5 (a). Просто, дуже просто ... 🙂 ... Я відкриваю браузер (у цьому випадку rekonq), і я працюю над новою публікацією, але коли я закриваю браузер, скрипт знову стискає папку me / у .rar (залишається в мені.rar).

Це можливо, оскільки скрипт перевіряє кожні 3 секунди, чи відкритий Rekonq чи ні, якщо він виявляє, що він відкритий, сценарій нічого не робить, але якщо виявляє, що НЕ відкритий, виконує: rar a me.rar -hp $ MWORD me / * && rm -R me /

А це означає, що папка буде стиснута я / en я.рідкісний (і він введе пароль, який буде таким же, як ми вже бачили), а після стискання і якщо помилок не було, папку буде видалено я / з усім своїм змістом.

5.5 (b). Як це нам допомагає? ... просто, це дозволяє нам не пам’ятати, що ми повинні знову захищати наш вміст, оскільки нам потрібно лише припинити роботу над ним (закрити браузер), а всю іншу роботу зробить сценарій 😉

6. Готово, це все було пояснено загальним чином 🙂

... хоча є ще одна деталь 😀

Сценарій має ще більший захист, захист, який вимкнено (коментується), є такими рядками:

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 які знаходяться в цій папці, тобто вона самознищиться 😉

Це робиться для того, щоб хтось інший не виконував сценарій на іншому комп’ютері хе-хе-хе.

І добре, я не думаю, що є багато чого для пояснення, я залишаю сценарій:

Завантажити файл .SH
Дивіться сценарій у нашій Вставці

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

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

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

І так, сценарій все ще має деякі інші недоліки, наприклад, якщо сценарій розпаковує .rar, а потім хтось примусово закриває (вбиває) сценарій, вміст .rar буде незахищеним, є деякі деталі, які залишаються полірований ... але привіт, ми також повинні контролювати, щоб ніхто не міг перевірити наш комп’ютер 😀

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

Будь-які запитання щодо цього вони говорять мені, хоча сценарій може не служити їм, оскільки їм це не потрібно, вони завжди можуть навчитися з нього іншим порадам

привіт

PD: я це знаю елав він скаже, що я занадто параноїк ... або що я марную свій час, але це не так. Я хотів щось дуже конкретне, дуже конкретну систему безпеки, і я сам її запрограмував ... наскільки це виродково? … ЛОЛ!!


41 коментарі, залиште свій

Залиште свій коментар

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

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   Хаккан - сказав він

    Це цікаво, але я думаю, що питання так / ні дуже стосується xD
    І що ви думаєте, замість того, щоб використовувати власний rar, який не пропонує справжньої безпеки, замініть його на gpg, який є програмним забезпеченням безпеки, більш ніж перевіреним роками, і існує практично у всіх дистрибутивах 😉
    Інша справа, ви можете передати md5sum рядок, вам не потрібно створювати тимчасовий файл. Тут я також рекомендую вам піти на sha, що набагато безпечніше, спробуйте в терміналі: shasum

    На здоров’я!

    1.    KZKG ^ Гаара - сказав він

      Привіт і дякую за ваш коментар 😀
      GPG дозволяє упаковувати каталог із усім його вмістом? Це те, що я насправді використовував його лише для окремих файлів, а не для каталогів, що містять підкаталоги та файли.

      ооо ... чудово про шасум, я його не знала 😀
      Я продовжу модифікувати сценарій, щоб використовувати цей, і ... так !! правда, просто: ехо "$ ПАРОЛЬ" | шашум Я вже отримую рядок, справді немає необхідності записувати його у файл :)

      Щиро дякую за ваш коментар, я вже дізнався щось нове 🙂
      привіт

    2.    sieg84 - сказав він

      це те саме, про що я просив ...

      1.    KZKG ^ Гаара - сказав він

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

        Будь-яка ідея, як це зробити? 🙂

        1.    Хаккан - сказав він

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

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

          Будь-які питання, дайте відповідь на цей коментар 🙂

          Привіт!

          1.    Хаккан - сказав він

            ем, стережіться подвійних дефісів (-) та одинарних дефісів (-) ... чи є спосіб написати щось так, ніби це код, щоб це не змінило формат?
            prueba de codigo -- -
            [код] тестовий код - - [/ код]

          2.    Хаккан - сказав він

            Я проводжу це більш багатослівно

            стиснути та зашифрувати:
            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

            салюти!

          3.    KZKG ^ Гаара - сказав він

            Так, насправді вчора вдома я прочитав людину gpg і там було все, що мені потрібно 😀
            Насправді я не зовсім так робив, я не використовував ехо чи стиснення, я зробив допис про це, я просто розмістив його.

            Щиро дякую за допомогу, справді.

  2.   Добродушна жарт - сказав він

    Чудово! Я просто шукав щось подібне і натрапив на вашу статтю. Я збираюся протестувати його, щоб захистити свої дані. Що стосується комп’ютерної безпеки, то ніколи не можна бути занадто параноїчним. Дякую

    1.    KZKG ^ Гаара - сказав він

      Дякую ха-ха.
      Ви зрозуміли, як працює сценарій, так?

      Це здається набагато складнішим, ніж насправді, ха-ха.

      Дякую за коментар, справді 😀

      привіт

      PS: Справді, безпеки ніколи не буває достатньо ха-ха-ха.

      1.    Добродушна жарт - сказав він

        Мені знадобилося трохи, щоб це зрозуміти (я прочитав це 3 рази), оскільки я користувався Linux недовго. Але це насправді просто, і завжди приємно вчитися подібним речам. Вітаю і ще раз дякую.

        1.    KZKG ^ Гаара - сказав він

          Найголовніше - це зрозуміти хе-хе. Я намагався пояснити все надзвичайно детально, але, думаю, занадто багато виклав ха-ха-ха.
          Завдяки тобі 🙂

  3.   aroszx - сказав він

    Ого, сценарій дуже хороший 🙂

    PS: Параноя - понад 9000! xD

    1.    KZKG ^ Гаара - сказав він

      ха-ха-ха-ха-ха, це я ... ЛОЛ !!

  4.   Rafael - сказав він

    Дивлячись на ваш сценарій, я думаю, це можна зробити за допомогою xdialog, якщо у вас немає kde :)! Ура

    1.    KZKG ^ Гаара - сказав він

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

  5.   sieg84 - сказав він

    замість rar, чому б не використовувати tar.xz / gz та gpg?

    1.    Rafael - сказав він

      це тому, що у вас це вже є рідше, де у вас є ваша система управління вмістом

  6.   місто - сказав він

    Відмінно @ KZKG ^ Гаара дні тому я думав про щось подібне, але я на іспитах, тому ні на що не встиг, і раптом бачу вашу статтю ....
    Спробую наступного тижня 🙂

    1.    KZKG ^ Гаара - сказав він

      Дякую, будь-які деталі ось я am

  7.   truko22 - сказав він

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

    1.    KZKG ^ Гаара - сказав він

      Щоб отримувати повідомлення в сповіщеннях KDE, спробуйте встановити пакет: libnotify-bin
      Потім у термінал ви поміщаєте:
      notify-send "texto texto texto"

      І ви побачите, як круто 😀 ... і, це працює для KDE, Gnome, Unity, Cinnamon, Mate та Xfce 😉

      Однак у цьому сценарії я використовую не сповіщення як такі, а просто вікна KDialog. У терміналі типу:
      kdialog

      І ви побачите там допомогу 😉

      Вітаю 😀

      1.    truko22 - сказав він

        Велике спасибі o /

  8.   Джоель Антоніо Васкес - сказав він

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

    1.    KZKG ^ Гаара - сказав він

      Дякую 😀
      Насправді так, MD5 не ідеальний, і є ті, кому вдалося отримати паролі, я подивлюсь на цю програму 😉

      Дякуємо за ваш коментар.

  9.   sieg84 - сказав він

    з симетричним просто в kdialog він запитує у вас пароль
    а з асиметричним - за допомогою відкритого ключа.

    Потрібно пояснити, що у мене немає сліду програміста.

    1.    KZKG ^ Гаара - сказав він

      Так, мені вже вдалося зашифрувати за допомогою GPG (насправді я просто поставив допис про це) хе-хе.

  10.   Каро - сказав він

    KZKG ^ Гаара завжди читав ваш допис.
    Створіть один для використання з XFCE.
    Поцілунок. Дорого

    1.    KZKG ^ Гаара - сказав він

      Привіт і перш за все, ласкаво просимо до блогу 😀
      ха-ха-ха, дякую, я знаю, що іноді стає важко, бо я пишу дещо технічні речі, але завжди намагаюся пояснити все якомога чіткіше 🙂

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

      привіт

  11.   Елінкс - сказав він

    Досить корисна людина, дякую!

    Привіт!

  12.   Дам’ян Рівера - сказав він

    Дякую, це дуже допоможе мені захистити деякі файли

    Мені довелося адаптувати його до зенітності, тому що на даний момент у мене немає kde: \

    Тут я залишаю скелет, який я збираюся використовувати, адаптований до зенітності

    http://paste.desdelinux.net/4641

    Ще раз спасибі та вітаю 😀

    1.    KZKG ^ Гаара - сказав він

      оооо, чудово, велике спасибі 😀 😀
      Я пам’ятаю, хтось запитував це, але для Xfce, з Zenity це буде працювати в Xfce, так?

      1.    Дам’ян Рівера - сказав він

        Так, лише те, що залишилася команда для додавання команд, які потрібно виконати, після передачі пароля shasum або md5

        Його потрібно було б модифікувати для різних потреб кожної людини, щоб захистити різні речі різними маршрутами за допомогою різних команд

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

        Вітаю 😀

        1.    Дам’ян Рівера - сказав він

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

          http://paste.desdelinux.net/4644

          Чи можна його редагувати, якщо в ньому є помилка з пасти?

          Що трапляється, це те, що у мене є кілька графічних оболонок, і я не знаю, чи буде це працювати в чистому xfce, наприклад у xubuntu

          Вітаю 😀

  13.   Матіас Гастон - сказав він

    Цікаво че !!! Хороший внесок !!!!!!

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

    Що досить добре як перший крок до ускладнення життя потенційному зловмиснику, але перевірте наступні ідеї (які навіть можна застосувати одну поверх іншої)

    IDEA 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

    IDEA 3) Що робити, якщо ви встановите віртуальну умову в сценарії, де для цього потрібен пароль адміністратора?

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

    Ну, більше нічого ...
    Ура !!!!!!!! і утримуйте BASH.

    1.    KZKG ^ Гаара - сказав він

      HAHAHAHA Дякую 😀
      Насправді зараз я використовую 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, тому дозволи не є найкращим варіантом.

      Про заплутування баш-коду ... так, я думав про це, і ідея ВЕЛИКА, проблема в тому, що я не знаю, як це зробити, насправді навіть не знаю, чи можна це зробити HAHAHA.

      О, почекайте ... зараз я прочитав решту коментаря O_O ... хе-хе, я не знав, що ви можете це зробити. Я поняття не маю про C або C ++, але, можливо, варто спробувати ха-ха.

      Про ідею 3, непогано 😀

      З моменту опублікування цього допису я зробив кілька вдосконалень сценарію, 2 - це ті, про які я згадав у посиланнях на початку цього коментаря, інше - якщо ви зміните будь-який символ у сценарії, він буде видалений. І тепер я маю спробувати це, щоб затуманити код ха-ха-ха-ха.

      Дякуємо за ваш коментар і ... так, тривай, баш !!! ХАХА

    2.    KZKG ^ Гаара - сказав він

      WTF !!!
      Я вже використовував SHC… GE-NI-AL !!!! O_O

  14.   Афій - сказав він

    Дуже хороший сценарій, привіт, і якщо ви використовуєте перевірку кореневої системи, щоб мати можливість запустити сценарій як sudo ./script

    Вам просто потрібно було б додати цей код на початку

    http://paste.desdelinux.net/4663

    Вітання

  15.   Neo61 - сказав він

    KZKG ^ Гаара, мій друже, я думаю, що розробка пояснення не є проблемою, це добре для тих з нас, хто не має таких знань. Статті, які не викладають, були опубліковані саме тут, вони лише дають інформацію про те, що існує. Тож не виправдовуйтесь і нехай їх буде більше із розширеними поясненнями.

  16.   dhunter - сказав він

    Для таких речей я використовую http://www.truecrypt.org/

  17.   Абель - сказав він

    Хтось міг поділитися сценарієм? Мені цікаво, і всі посилання недоступні. 🙁

    Спасибо.