LINUX.ORG.RU

git, bash, madskillz. Недопускаем утечки паролей через git.

 , , , ,


0

3

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

Идея возникла такая — в корне репозитория лежит зашифрованный файл с регекспами(.pass_rx_file.gpg, этот файл понятное дело в .gitignore и никуда не льётся), которыми должны проверяться все коммиты во все ветки, кроме ветки local-security.
Так же должны проверяться все коммиты со всех веток перед push'ем.

Пока что сделал так:

gpg -o - .pass_rx_file.gpg:

.*?test.*?120.*?password?.*
.*?10crack[[:digit:]]*?me.*


cat .git/hooks/commit-msg
#!/bin/bash

pass_rx_file=".pass_rx_file.gpg"
message_file="$1"

exec 1>&2

if gpg -o - "$pass_rx_file"|grep -E -f - "$message_file" > /dev/null; then
    echo "[ERROR] Your commit message contain a sensible information!"
    exit 1
fi

exit $?


cat .git/hooks/pre-commit
pass_rx_file=".pass_rx_file.gpg"

exec 1>&2

file_names=`git diff --cached --name-only | sed -e 's/^\|$/'"'"'/g'`
results=`echo "$pass_rx_file" "$file_names"|xargs sh -c 'gpg -o - "$0"|grep -E -f - "${@:1}"'`

if [ -n "$results" ]; then
    echo "Error: Attempt to add files containing a sensible information:
    $results"
	exit 1
fi

exec git diff-index --check --cached $against --

Можно ли сделать красивее всю эту ерунду с gitом, sedом, xargsом, sh, gpg, grepом ?)
Как тут лучше всего проверить ветку, в которую осуществляется коммит?
Кроме того текущая реализация будет проверять файлы целиком, а лучше бы оно проверяло только дифы. Как это всё слепить в кучу?

Тест:
mkdir test_hooks
cd test_hooks
git init

cp pre-commit commit-msg .git/hooks/

echo '.*?test.*?120.*?password?.*
.*?10crack[[:digit:]]*?me.*' > pass_rx_file

gpg -c pass_rx_file

mkdir testdir
echo 'sad fdf test1120-w3password)' > testdir/fi\ le
echo test >> testf

git add testf testdir/fi\ le

git commit -a -m 'message 10crack4me of no interest'


К pre-push хуку пока не знаю как и подступиться.

Ну и подскажите баги, подводные ками(да, gpg можно поменять на gpg2, чтобы постоянно не вводить пароли), делитесь своими полезными хуками). Может кто уже делал такое?

★★★★★

Последнее исправление: Bad_ptr (всего исправлений: 2)

Ответ на: комментарий от Black_Shadow

Пардон, что вмешиваюсь,

но иногда не оставляют выбора.

К примеру, вы не знаете, можно ли авторизироваться по ключу на Гуглопочте?

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)

Сколько раз твердили — `git diff`, потом `git commit`, потом `git push;`. Никак не `git add . && git commit -am «moar stuffz» && git push -f`.

Читай изменения глазами. Греп «pass» тебя не спасёт. И не подкладывай свинью другим людям в виде пиара своего костыля как волшебной пилюли, которая спасёт их от факапов и позволит не читать диффы.

ChALkeR ★★★★★
()
Ответ на: комментарий от ChALkeR

`git diff`, потом `git commit`, потом `git push;`

ну спасибо, кэп. Так и делаю.
А если там мегатонны изменений? Нет предела паранойе. Автоматические проверки понятное дело не дают право отключать мозг совсем(ну если только на самую чуточку снизить градус напряжения).

Bad_ptr ★★★★★
() автор топика
Ответ на: комментарий от Bad_ptr

А если там мегатонны изменений?

То читать мегатонны постепенно и добавлять постепенно. Или бить на более мелкие коммиты.

ChALkeR ★★★★★
()
Ответ на: комментарий от quantum-troll

в одном коммите

читать мегатонны постепенно и добавлять постепенно. Или бить на более мелкие коммиты.

время. Время человеческой жизни ограничено(внимательность тоже плавает от настроения). Нельзя всё всегда сделать правильно.

Bad_ptr ★★★★★
() автор топика
Последнее исправление: Bad_ptr (всего исправлений: 1)
Ответ на: комментарий от anonymous

просто снизит вероятность ошибки
на 100% вообще ничто ничего не решит

Вообще с каких пор айтишники против небольшой автоматизации?(а впрочем всегда на ЛОРе обитали луддиты и консерваторы, лишь бы покритиковать) Я вот считаю что любая дополнительная автоматическая проверка — это хорошо.

Bad_ptr ★★★★★
() автор топика
Ответ на: комментарий от Bad_ptr

Это даст тебе ложное ощущение безопасности. Я не уверен, что тут лучше, а что хуже.

ChALkeR ★★★★★
()
Ответ на: комментарий от Bad_ptr

Вообще с каких пор айтишники против небольшой автоматизации?

Вообще у меня все конфиги на GH в виде шаблонов, а явки/пароли накатываются на них скриптом. Можно пойти дальше и оркестровку использовать, но для локалхоста это оверкилл. А ты со своим грепом можешь дальше бубнить про «на 100% вообще ничто ничего не решит».

anonymous
()
Ответ на: комментарий от anonymous

Вообще у меня все конфиги на GH в виде шаблонов, а явки/пароли накатываются на них скриптом.

А ссылка есть, на твои конфиги?

Bad_ptr ★★★★★
() автор топика
Ответ на: комментарий от anonymous

угу. Но на самом деле мне больше нравится такое

все конфиги на GH в виде шаблонов, а явки/пароли накатываются на них скриптом

Кто знает такой шаблонизатор, чтобы прошёл по всем файлам и заменил там все «специальные поля», при этом спросив у пользователя на что заменить, если не установлена «переменная для поля»? И ещё чтобы это не зависело от всяких рубей/питонов и не надо было ничего устанавливать.

в репу же положил example

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

Bad_ptr ★★★★★
() автор топика
Ответ на: комментарий от anonymous

короче нужно делать ещё и post-commit и post-rewrite хуки
и в них искать, если произошли изменения в файлах с именем *.example
то переписывать ими файлы без .example и запускать шаблонизатор, который всё нужное подменит, прочитав перед этим конфиг с подстановками, а если подходящей подстановки нет — то спросит у юзера и сохранит в конфиг. Конфиг, ясное дело локальный шифрованный и гитигнорируемый.
Вот как то так.

Bad_ptr ★★★★★
() автор топика
Ответ на: комментарий от Bad_ptr

Есть такая. Но в любом случае example максимально нейтрален должен быть. А поднятие моего окружения — моя проблема.

anonymous
()
Ответ на: комментарий от Black_Shadow

А авторизацию по ключам почему не хочешь использовать?

можно ли авторизироваться по ключу на Гуглопочте?

Понятия не имею.

Хорошо, а вообще какой из распространенных почтовых операторов позволяет авторизацию по ключу?

Zmicier ★★★★★
()
Ответ на: комментарий от Bad_ptr

И ещё чтобы это не зависело от всяких рубей/питонов и не надо было ничего устанавливать.

m4?

quantum-troll ★★★★★
()
Ответ на: комментарий от Black_Shadow

Ну вы же спросили «почему не хочешь использовать ключи вместо паролей», думал, можете что-то посоветовать.

Вот я бы например хотел, в свое время даже в браузере использовал на ряде сайтов — MyOpenID это позволял. MyOpenID закрыли, теперь по ключу в ЖЖ не авторизуешься. Или есть варианты?

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Пипец. Во-первых, я не говорил использовать ключи вместо паролей. Во-вторых, я говорил об авторизации в git, а не (СЮРПРИЗ!) в почте. То есть, допустить, что в репозиторий попадут пароли, но сам репозиторий - не публичный, а с доступом по ключам. Не думал, что мою фразу о ключах можно трактовать как-то по-другому.

Black_Shadow ★★★★★
()
Ответ на: комментарий от Black_Shadow

Пипиец.

Воистину пипец.

То есть, допустить, что в репозиторий попадут пароли, но сам репозиторий - не публичный, а с доступом по ключам. Не думал,

что мою фразу о ключах можно трактовать как-то по-другому.

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

Однако спасибо, ответ понятен.

Zmicier ★★★★★
()
Ответ на: комментарий от quantum-troll

Ну можно ее скрывать до первого прокола, а начиная со второго по ее результатам штрафовать.

t184256 ★★★★★
()

проверяться все коммиты во все ветки, кроме ветки local-security.

Не стоит так делать. Можно забыв легко запушить все ветки или вмержить в мастер.

German_1984 ★★
()

Все пароли в отдельном файле, который в .gitignore. Других вариантов нет. Можно соорудить хуку, которая перед коммитом генерит example-файл из реального файла с паролями. А можно и ручками так делать. А вот эти ваши проверки на регекспах - это всё от лукавого.

WARNING ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.