জবাবদিহি ভল্ট সিক্রেটসের জন্য গিট ক্লিন / স্মুড ফিল্টার


20

আমি উত্তরসূচক-ভল্ট কমান্ডের মাধ্যমে সিক্রেটযুক্ত ফাইলগুলির স্বয়ংক্রিয় এনক্রিপ্টিং এবং ডিক্রিপ্টিং পেতে গিটের মধ্যে পরিষ্কার / স্মুড ফিল্টার সেটআপ করার চেষ্টা করছি ।

জবাবদিহি-কমান্ড কমান্ডের বিশেষত্ব হ'ল এটি আদর্শবান নয় (প্রতিবার একই ডাটাতে ডাকা হলে এটি একটি আলাদা বাইনারি তৈরি করে)।

আমি এই ব্লগ পৃষ্ঠায় প্রস্তাবিত বাস্তবায়ন দিয়ে শুরু করেছি । দুর্ভাগ্যক্রমে এটি সঠিকভাবে কাজ করে না, যখনই স্মুড নামে ডাকা হয় (এটি গিট চেকআউট, বা কেবল গিট স্ট্যাটাস), গোপন ফাইলগুলি গিটের জন্য পরিবর্তিত হিসাবে দেখায়, তা না হলেও।

সুতরাং আমি ভাবলাম যে গিটটি সূচকটিতে তার যে বাইনারি রয়েছে তা পরিষ্কার ফিল্টার করা বর্তমান ফাইলের সাথে তুলনা করবে, এবং আমি এই স্ক্রিপ্টটি নীচের মতো তৈরি করার চেষ্টা করেছি:

#!/bin/sh -x
# clean filter, it is invoked with %f

if [ ! -r "$HOME/.vault_password" ]; then
  exit 1
fi

tmp=`mktemp`
cat > $tmp

# get the plain text from the binary in the index
tmphead=`mktemp`
git show HEAD:$1 > $tmphead
contenthead=`echo "embedded" | ansible-vault view $tmphead --vault-password-file=$HOME/.vault_password`
export PAGER=cat
echo -n "$contenthead" | tee $tmphead

# if current and index plain text version differ
if [ "`md5sum $tmp | cut -d' ' -f1`" != "`md5sum $tmphead | cut -d' ' -f1`" ]; then
  tmpcrypt=`mktemp`
  cp $tmp $tmpcrypt
  # generate a new crypted blob
  echo "embedded" | ansible-vault encrypt $tmpcrypt --vault-password-file=$HOME/.vault_password > /dev/null 2>&1
  cat "$tmpcrypt"
else
  # just return the HEAD version
  cat "$tmphead"
fi

rm $tmp $tmphead $tmpcrypt

এখানে পার্থক্যটি হ'ল এটি সরল পাঠের (এনক্রিপ্ট করা না হওয়া) গোপন ফাইলগুলির বর্তমান এবং প্রধান সংস্করণগুলির তুলনা করার চেষ্টা করে এবং কেবলমাত্র যদি তারা আউটপুট থেকে পৃথক হয় তবে উত্তরীয়-ভল্টের সাথে এনক্রিপ্ট করা একটি নতুন বাইনারি ব্লব রয়েছে।

দুর্ভাগ্যক্রমে, এই পরিবর্তনের পরে গিটটি ভাবতে থাকে যে গোপন ফাইলটি সর্বদা সংশোধিত হয়। এমনকি git addফাইলটি আবার ইনগ্রেট করার পরেও যাতে গিট ব্লবটি গণনা করা যায়, গিট ফাইলটি আলাদা বলে মনে করে এবং পরিবর্তনটি কমিটের মধ্যে যেতে দেয়। মনে রাখবেন git diffখালি পরিবর্তনগুলি যেমনটি হওয়া উচিত তেমন ফিরিয়ে দিন।

রেফারেন্সের জন্য, এটি ধাক্কা:

#!/bin/sh

if [ ! -r "$HOME/.vault_password" ]; then
  exit 1
fi

tmp=`mktemp`
cat > $tmp

export PAGER='cat'
CONTENT="`echo "embedded" | ansible-vault view "$tmp" --vault-password-file=$HOME/.vault_password 2> /dev/null`"

if echo "$CONTENT" | grep 'ERROR: data is not encrypted' > /dev/null; then
  echo "Looks like one file was commited clear text"
  echo "Please fix this before continuing !"
  exit 1
else
  echo -n "$CONTENT"
fi

rm $tmp

এবং এটি পৃথক:

#!/bin/sh

if [ ! -r "$HOME/.vault_password" ]; then
  exit 1
fi

export PAGER='cat'
CONTENT=`echo "embedded" | ansible-vault view "$1" --vault-password-file=$HOME/.vault_password 2> /dev/null`

if echo "$CONTENT" | grep 'ERROR: data is not encrypted' > /dev/null; then
  cat "$1"
else
  echo "$CONTENT"
fi

আমার কাছে আপডেট হওয়া স্ক্রিপ্টগুলি রয়েছে যা গিটটি ভল্টগুলিতে দ্বন্দ্বগুলি স্বয়ংক্রিয়ভাবে বাড়ানোর চেষ্টা করে যা আমি শীঘ্রই পোস্ট করব
ᴳᵁᴵᴰᴼ

1
সমুদ্রের দিকে বোতল নিক্ষেপ করা কিন্তু: ফাইলটি বিভিন্ন লাইন শেষ বা ভিন্ন কোড পৃষ্ঠার কারণে আলাদা হতে পারে?
তেনসিবাই

আমি -nস্মাগ ইকো থেকে মুছে ফেলার চেষ্টা করব , তবে এটি অনুমান। গিট ডিফের জন্য কোনও একক বিকল্প নেই যা এটি একক লাইনের সমাপ্তি উপেক্ষা করতে বলছে?
তেনসিবাই

তবুও আরেকটি ধারণা: github.com/dellis23/ansible-toolkit (আমি এই একদিন আরও গভীরভাবে খনন করব)
তেনসিবাই

উত্তর:


8

উত্তরসূত্র-ভল্ট এনক্রিপশনে এলোমেলো লবণের কারণে এখানে সমস্যা দেখা দেয়। জবাবদিহি-ভল্টের যুক্তি থেকে লবণ পাঠাতে আপনি ভল্টএডিটর শ্রেণিকে হ্যাক করতে পারেন। র্যান্ডম লবণ মধ্যে উৎপন্ন হয় lib/ansible/parsing/vault/__init__.pyএই লাইন । এটি lib / উত্তরযোগ্য / ক্লিপ / ভল্ট.পি থেকে বলা হয় যেখানে আপনি সহজেই নির্দিষ্ট লবণের জন্য যুক্তি যুক্ত করতে পারেন। আপনি যদি এটি পরিবর্তন করেন তবে অনুগ্রহ করে একটি প্রবাহের প্যাচ জমা দিন, আমি এটি ব্যবহার করতে পছন্দ করব।

এই সমস্যাটি এখানে হ্যাকার সংবাদের উপর আরও আলোচনা করা হয়েছে । এবং সরঞ্জামগুলির সাথে অন্যান্য বাস্তবায়ন রয়েছে যা স্থির লবণ গ্রহণ করে, যথা গিটক্রিপ্ট , ট্রান্সক্রিপ্ট । এখানে উত্তরীয়- ভল্টকে উত্তরীয়-ভল্ট-সরঞ্জামগুলি ব্যবহার করে আরও একটি বাস্তবায়নের একটি লিঙ্ক দেওয়া হয়েছে , তবে আমি জানি যতদূর জানি এই লবণের একই সমস্যা রয়েছে।


আপনি যদি কোডটি পরীক্ষা করেন, আমি ভেরিয়েবল লবণের ইস্যুটিকে কার্যকারিতা হিসাবে একটি চেকসাম ব্যবহার করছি ie প্রথমে একটি টিএমপি ফোল্ডারে হেড ভল্টটি ডিক্রিপ্ট করুন এবং নতুন বাইনারি ব্লব তৈরির আগে প্লেইন টেক্সট ফাইলগুলির চেকসামগুলি তুলনা করুন। এটি কিছুটা ধীর কিন্তু আসলে ঠিক। আমার সমস্যা এখন একীভূতকরণে রয়েছে; নির্দিষ্ট পরিস্থিতিতে এটি কাজ করে, অন্যদের মধ্যে আমি ব্লিবটি ডিক্রিপ্ট করার আগে এটি আরও বেড়ে যায় এবং এটি ভেঙে যায়।
ᴳᵁᴵᴰᴼ

আপনি যে তিনটি উদাহরণ আমি সংযুক্ত করেছি সেগুলি যদি খতিয়ে দেখেন তবে মার্জগুলিতেও কিছু কার্যক্রম রয়েছে। এবং এটি হ্যাকার সংবাদের মন্তব্যেও আলোচিত হচ্ছে।
জিরি ক্লাউদা

বিটিডাব্লিউ মার্জ করা খুব জটিল। আপনার যে বিষয়টি অনুধাবন করা দরকার তা হ'ল আপনি যখন মার্জ করার সময় আপনার সমস্ত পরিবর্তন বা প্রবাহ থেকে সমস্ত পরিবর্তনগুলি বেছে নেন, গিটটি হ্যাশ তুলনার মাধ্যমে তা নির্ধারণ করতে পারে, যা লবণের অধিকারী হলে কাজ করবে। টেম্প ফাইলটি ক্লিন / স্মাডে যথেষ্ট নয়। মার্জ করার ক্ষেত্রে এবং অ-বিরোধবিরোধী একীভূত হওয়ার ক্ষেত্রে গিট থেকে সঠিক ইতিমধ্যে এনক্রিপ্ট করা সংস্করণটি পরীক্ষা করতে হবে এবং নতুন এলোমেলো লবণের সাথে পুনরায় এনক্রিপ্ট করার বিরোধী হিসাবে এটিকে ব্যবহার করতে হবে।
জিরি ক্লাউদা

আপনি এখানে যা বলছেন তা আমি নিশ্চিত বুঝতে পারছি না; মার্জগুলি ভল্টের সরল পাঠ্যগুলিতে ঘটবে (যেমন এটি আলাদা হয়ে যায়), এবং গোপনীয়তাগুলি সর্বদা সংঘর্ষ হিসাবে চিহ্নিত হয়ে থাকে এমনকি স্ব-সংযুক্তির জন্য, সুতরাং কোনও মার্জ কমিটের মধ্যে মার্জ হওয়া পুনরায় এনক্রিপ্ট হওয়া গোপনীয়তা সহ, এটি না সত্যিই একটি সমস্যা প্রতিনিধিত্ব (আমার জন্য)।
ᴳᵁᴵᴰᴼ

আপনি কি তবে মার্জ ইস্যুতে নির্দিষ্ট হতে পারেন? আপনার পুনরুত্পাদনযোগ্য কেস সরবরাহ করা উচিত। তবে আমি উপরে উল্লিখিত 3 টি প্রকল্পের জন্য ধারণা অনুসন্ধান করার পরামর্শ দেব। মার্জ হওয়া সমস্যাগুলি হিসাবে, আপনি যখন কন্টেন্ট বি এর সাথে কন্টেন্ট এটিকে মার্জ করে ফেলেছেন এবং সংস্করণ নিয়ন্ত্রণ ব্যবস্থার জন্য আপনি সবসময় একটি বা সর্বদা বি নেওয়ার জন্য সমস্ত সংকল্প করেছেন এবং তারা কখনও কখনও সংস্করণটিকে একসাথে যুক্ত করে এটি করবে। গিট বিষয়বস্তুতে হ্যাশের মাধ্যমে এটি করে, সুতরাং এটি হ্যাশটি একই হবে বলে ধরে নেবে, তবে আপনি যদি পুনরায় এনক্রিপ্ট করেন তবে সামগ্রীগুলি সমস্ত এ থাকলেও হ্যাশটি একই হবে না। তবে আপনার অন্য সমস্যা হতে পারে
জিরি ক্লাউদা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.