GIT-CRYPT(1) git-crypt GIT-CRYPT(1)

git-crypt - رمزنگاری شفاف فایل‌ها در گیت

git-crypt [OPTIONS] COMMAND [ARGS...]

git-crypt init

git-crypt status

git-crypt lock

git-crypt add-gpg-user GPG_USER_ID

git-crypt unlock

git-crypt export-key OUTPUT_KEY_FILE

git-crypt unlock KEY_FILE

دستور git-crypt امکان رمزنگاری و رمزگشایی شفاف فایل‌ها را در یک مخزن گیت فراهم می‌کند. فایل‌هایی که برای محافظت انتخاب می‌کنید هنگام کامیت شدن رمزنگاری شده و هنگام بازبینی (checkout) رمزگشایی می‌شوند. git-crypt به شما امکان می‌دهد مخزنی شامل ترکیبی از محتوای عمومی و خصوصی را آزادانه به اشتراک بگذارید. git-crypt به‌گونه‌ای منعطف سازگار می‌شود که توسعه‌دهندگان بدون کلید مخفی همچنان می‌توانند مخزنی با فایل‌های رمزنگاری‌شده را کلون کرده و تغییرات خود را کامیت کنند. این قابلیت به شما اجازه می‌دهد اطلاعات محرمانه خود (مانند کلیدها یا گذرواژه‌ها) را بدون نیاز به قفل کردن کل مخزن، در همان مخزن و کنار کدهای خود ذخیره نمایید.

دستور git-crypt از نظر منطقی به چندین زیردستور تقسیم شده است که کارهای مجزایی انجام می‌دهند. هر زیردستور و آرگومان‌های آن در ادامه توضیح داده شده‌اند. توجه داشته باشید که آرگومان‌ها و گزینه‌های مربوط به زیردستورها باید در خط فرمان پس از نام زیردستور مشخص شوند.

init [OPTIONS]

تولید یک کلید و آماده‌سازی مخزن گیت جاری برای استفاده از git-crypt.

گزینه‌های زیر پشتیبانی می‌شوند:

-k KEY_NAME, --key-name KEY_NAME

راه‌اندازی کلید مشخص‌شده به جای کلید پیش‌فرض. git-crypt از چند کلید در هر مخزن پشتیبانی می‌کند، که به شما امکان می‌دهد فایل‌های مختلف را با گروه‌های متفاوتی از همکاران به اشتراک بگذارید.

status [OPTIONS]

نمایش فهرستی از فایل‌های موجود در مخزن، همراه با وضعیت آن‌ها (رمزنگاری‌شده یا رمزنگاری‌نشده).

گزینه‌های زیر پشتیبانی می‌شوند:

-e

فقط فایل‌های رمزنگاری‌شده را نمایش می‌دهد.

-u

فقط فایل‌های رمزنگاری‌نشده را نمایش می‌دهد.

-f, --fix

رمزنگاری فایل‌هایی که باید رمزنگاری شوند اما بدون رمزنگاری به مخزن کامیت شده یا به نمایه (index) اضافه شده‌اند. (این حالت ممکن است زمانی رخ دهد که فایلی قبل از راه‌اندازی git-crypt یا قبل از اضافه شدن آن به فایل gitattributes اضافه شده باشد.)

add-gpg-user [OPTIONS] GPG_USER_ID...

افزودن کاربرانی با شناسه‌های کاربری GPG مشخص‌شده به عنوان همکار. به‌طور مشخص، git-crypt از gpg(1) برای رمزنگاری کلید متقارن مشترک با کلیدهای عمومی هر شناسه کاربری GPG استفاده کرده و کلیدهای رمزنگاری‌شده با GPG را در دایرکتوری .git-crypt در ریشه مخزن ذخیره می‌کند.

GPG_USER_ID می‌تواند یک شناسه کلید، یک اثرانگشت کامل، یک نشانی ایمیل یا هر چیز دیگری باشد که یک کلید عمومی را به‌صورت یکتا برای GPG مشخص کند (بخش "HOW TO SPECIFY A USER ID" در صفحه راهنمای gpg(1) را ببینید).

گزینه‌های زیر پشتیبانی می‌شوند:

-k KEY_NAME, --key-name KEY_NAME

اعطای دسترسی به کلید داده‌شده به جای کلید پیش‌فرض.

-n, --no-commit

تغییرات دایرکتوری .git-crypt را به‌طور خودکار کامیت نمی‌کند.

--trusted

فرض می‌کند که کلیدهای GPG مشخص‌شده در خط فرمان مورد اعتماد هستند؛ یعنی در واقع متعلق به همان کاربرانی هستند که ادعا می‌شود.

بدون این گزینه، git-crypt از همان مدل اعتماد GPG استفاده می‌کند که به‌طور پیش‌فرض مبتنی بر شبکه اعتماد (Web of Trust) است. تحت این مدل، git-crypt کلیدهای GPG را که فاقد امضاهای مورد اعتماد باشند رد خواهد کرد.

اگر نمی‌خواهید از شبکه اعتماد استفاده کنید، می‌توانید با تنظیم گزینه trust-model در فایل ~/.gnupg/gpg.conf مدل اعتماد GPG را تغییر دهید (صفحه راهنمای gpg(1) را ببینید)، یا در هر مورد به‌طور جداگانه از گزینه --trusted در دستور add-gpg-user استفاده نمایید.

unlock [KEY_FILE...]

رمزگشایی مخزن. اگر یک یا چند فایل کلید در خط فرمان مشخص شده باشند، git-crypt تلاش می‌کند با استفاده از آن کلیدهای متقارن مشترک عملیات رمزگشایی را انجام دهد. اگر هیچ فایل کلیدی مشخص نشده باشد، git-crypt تلاش می‌کند با استفاده از یک کلید رمزنگاری‌شده با GPG که در دایرکتوری .git-crypt مخزن ذخیره شده است، عملیات رمزگشایی را انجام دهد.

این دستور هیچ گزینه‌ای نمی‌پذیرد.

export-key [OPTIONS] FILENAME

برون‌بری کلید متقارن مشترک مخزن در فایل داده‌شده.

گزینه‌های زیر پشتیبانی می‌شوند:

-k KEY_NAME, --key-name KEY_NAME

برون‌بری کلید داده‌شده به جای کلید پیش‌فرض.

help [COMMAND]

نمایش راهنما برای COMMAND داده‌شده، یا مروری بر همه دستورها در صورتی که دستوری مشخص نشده باشد.

version

چاپ نسخه فعلی نصب‌شده از git-crypt. قالب خروجی همیشه به صورت "git-crypt" همراه با یک فاصله و سپس شماره نسخه نقطه‌دار است.

ابتدا، با اجرای دستور git-crypt init یک مخزن را برای استفاده از git-crypt آماده می‌کنید.

سپس، با ایجاد یک فایل gitattributes(5) فایل‌هایی را که می‌خواهید رمزنگاری شوند مشخص می‌نمایید. به هر فایلی که می‌خواهید رمزنگاری شود باید مشخصه‌های "filter=git-crypt diff=git-crypt" اختصاص داده شود. برای مثال:

secretfile filter=git-crypt diff=git-crypt
*.key filter=git-crypt diff=git-crypt

همانند یک فایل .gitignore، فایل‌های .gitattributes می‌توانند با الگوهای عام (wildcards) مطابقت داشته باشند و باید در مخزن کامیت شوند. مطمئن شوید که به اشتباه خود فایل .gitattributes (یا سایر فایل‌های گیت نظیر .gitignore یا .gitmodules) را رمزنگاری نکنید. حتماً اطمینان حاصل کنید که قوانین .gitattributes شما پیش از افزودن فایل‌های حساس مستقر شده باشند، در غیر این صورت آن فایل‌ها رمزنگاری نخواهند شد!

برای به اشتراک گذاشتن مخزن با دیگران (یا با خودتان) با استفاده از GPG، این دستور را اجرا کنید:

git-crypt add-gpg-user GPG_USER_ID

شناسه GPG_USER_ID می‌تواند یک شناسه کلید، یک اثرانگشت کامل، یک نشانی ایمیل یا هر چیز دیگری باشد که یک کلید عمومی را به‌طور یکتا برای GPG مشخص کند. توجه: git-crypt add-gpg-user یک فایل کلید رمزنگاری‌شده با GPG را در دایرکتوری .git-crypt در ریشه مخزن شما افزوده و کامیت می‌کند.

در روشی دیگر، می‌توانید یک کلید مخفی متقارن را برون‌بری کنید، که باید آن را با روشی امن به همکاران برسانید (نیازی به GPG نیست و هیچ فایلی به مخزن شما افزوده نمی‌شود):

git-crypt export-key /path/to/key

پس از کلون کردن مخزنی با فایل‌های رمزنگاری‌شده، با استفاده از GPG قفل آن را باز کنید:

git-crypt unlock

یا با یک کلید متقارن:

git-crypt unlock /path/to/key

این تمام کاری است که باید انجام دهید - پس از راه‌اندازی git-crypt (چه با git-crypt init و چه با git-crypt unlock)، می‌توانید طبق روال معمول از git استفاده کنید - رمزنگاری و رمزگشایی به‌صورت شفاف انجام می‌شوند.

فایل .gitattributes در gitattributes(5) مستند شده است. قالب الگوی فایل مشابه قالب به‌کاررفته در .gitignore، همان‌گونه که در gitignore(5) مستند شده، می‌باشد؛ با این تفاوت که تنها مشخص کردن یک دایرکتوری (مثلاً "/dir/") برای رمزنگاری همه فایل‌های درون آن کافی نیست.

همچنین توجه داشته باشید که الگوی "dir/*" با فایل‌های واقع در زیردایرکتوری‌های dir/ مطابقت پیدا نمی‌کند. برای رمزنگاری کل زیرشاخه dir/، عبارت زیر را در dir/.gitattributes قرار دهید:

* filter=git-crypt diff=git-crypt
.gitattributes !filter !diff

الگوی دوم برای اطمینان از این‌که خود .gitattributes رمزنگاری نشود، ضروری است.

علاوه بر کلید پیش‌فرض ضمنی، git-crypt از کلیدهای جایگزین نیز پشتیبانی می‌کند که می‌توان از آن‌ها برای رمزنگاری فایل‌های خاص استفاده کرد و آن‌ها را با کاربران مشخصی از GPG به اشتراک گذاشت. این قابلیت زمانی مفید است که بخواهید به همکاران مختلف، دسترسی به مجموعه‌های متفاوتی از فایل‌ها را اعطا نمایید.

برای تولید یک کلید جایگزین به نام KEYNAME، گزینه -k KEYNAME را به صورت زیر به git-crypt init ارسال کنید:

git-crypt init -k KEYNAME

برای رمزنگاری یک فایل با استفاده از یک کلید جایگزین، فیلتر git-crypt-KEYNAME را در فایل .gitattributes به شکل زیر به کار ببرید:

secretfile filter=git-crypt-KEYNAME diff=git-crypt-KEYNAME

برای برون‌بری یک کلید جایگزین یا به اشتراک گذاشتن آن با یک کاربر GPG، گزینه -k KEYNAME را به صورت زیر به git-crypt export-key یا git-crypt add-gpg-user ارسال کنید:

git-crypt export-key -k KEYNAME /path/to/keyfile
git-crypt add-gpg-user -k KEYNAME GPG_USER_ID

برای باز کردن قفل مخزن با یک کلید جایگزین، دستور git-crypt unlock را به صورت عادی به کار ببرید. git-crypt به‌طور خودکار تشخیص خواهد داد که کدام کلید در حال استفاده است.

git(1), gitattributes(5), صفحه اصلی git-crypt[1], مخزن GitHub[2]

Andrew Ayer <agwa@andrewayer.name>

1.
صفحه اصلی git-crypt
2.
مخزن GitHub
2022-04-21 git-crypt 0.8.0