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)
Ответ на: комментарий от anonymous

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

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

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

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

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

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

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

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

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

m4?

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