GOCRYPTFS(1) GOCRYPTFS(1)

gocryptfs - ایجاد یا سوار کردن یک سامانه فایل رمزنگاری‌شده

gocryptfs -init [OPTIONS] CIPHERDIR

gocryptfs [OPTIONS] CIPHERDIR MOUNTPOINT [-o COMMA-SEPARATED-OPTIONS]

fusermount -u MOUNTPOINT

gocryptfs -passwd [OPTIONS] CIPHERDIR

gocryptfs -fsck [OPTIONS] CIPHERDIR

gocryptfs -info [OPTIONS] CIPHERDIR

دستور gocryptfs یک سامانه فایل لایه‌ای (overlay) رمزنگاری‌شده است که با زبان Go نوشته شده است. فایل‌های رمزنگاری‌شده در CIPHERDIR ذخیره می‌شوند و با سوار کردن سامانه فایل در نقطه اتصال MOUNTPOINT، نمایی با متن خام (plaintext) ارائه می‌گردد.

برنامه gocryptfs با الهام از encfs(1) طراحی شده است و می‌کوشد در عین ارائه کارایی و سرعت بالا، مشکلات امنیتی آن را برطرف کند.

در صورتی که هیچ‌یک از پرچم‌های عملیات زیر مشخص نشود، عملیات پیش‌فرض سوار کردن سامانه فایل خواهد بود (بخش خلاصه دستور را ببینید).

بررسی یکپارچگی دایرکتوری CIPHERDIR. در صورت یافتن خرابی، کد خروج ۲۶ خواهد بود.

چاپ متن راهنمای کوتاه که گزینه‌های پرکاربردتر را نمایش می‌دهد.

نمایش متن راهنمای طولانی شامل تمامی گزینه‌های موجود.

نمایش خوانا و ساختاریافته محتوای فایل پیکربندی موجود در CIPHERDIR برای کاربر، همراه با حذف داده‌های حساس.

مثال:

$ gocryptfs -info my_cipherdir
Creator:      gocryptfs v2.0-beta2
FeatureFlags: GCMIV128 HKDF DirIV EMENames LongNames Raw64
EncryptedKey: 64B
ScryptObject: Salt=32B N=65536 R=8 P=1 KeyLen=32

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

تغییر گذرواژه. ابتدا گذرواژه پیشین درخواست شده و صحت آن بررسی می‌شود، سپس گذرواژه جدید دریافت می‌گردد.

اگر گذرواژه را فراموش کرده‌اید اما کلید اصلی (master key) را دارید، می‌توانید از این گزینه به همراه -masterkey استفاده کنید. توجه داشته باشید که بدون گذرواژه قدیمی، gocryptfs نمی‌تواند درستی کلید اصلی را تشخیص دهد و فایل پیکربندی قبلی را بدون درنگ بازنویسی خواهد کرد. با این وجود، یک نسخه پشتیبان از فایل پیکربندی قدیمی به نام gocryptfs.conf.bak ایجاد می‌کند. پس از حصول اطمینان از دسترسی به فایل‌ها با گذرواژه جدید، می‌توانید این فایل پشتیبان را حذف کنید.

اجرای آزمون سنجش سرعت رمزنگاری. آزمون سنجش کارایی الگوریتم توکار GCM در Go در برابر OpenSSL (در صورت وجود). کتابخانه‌ای که در صورت تعیین «-openssl=auto» (حالت پیش‌فرض) انتخاب می‌شود، مشخص می‌گردد.

چاپ اطلاعات نسخه و خروج. خروجی شامل سه فیلد است که با «;» از یکدیگر جدا شده‌اند. مثال: «gocryptfs v1.1.1-5-g75b776c; go-fuse 6b801d3; 2016-11-01 go1.7.3». فیلد ۱ نسخه gocryptfs، فیلد ۲ نسخه کتابخانه go-fuse و فیلد ۳ تاریخ کامپایل و نسخه Go استفاده‌شده است.

گزینه‌های موجود برای -init در زیر فهرست شده‌اند. معمولاً به هیچ‌کدام نیاز نخواهید داشت؛ مقادیر پیش‌فرض مناسب هستند.

استفاده از حالت رمزنگاری AES-SIV. این حالت کندتر از AES-GCM است اما با نانس‌های قطعی مورد استفاده در حالت «-reverse» ایمن است.

دستور gocryptfs -speed را اجرا کنید تا از میزان تفاوت سرعت مطلع شوید.

غیرفعال کردن تصادفی‌سازی نام فایل‌ها و ایجاد فایل‌های gocryptfs.diriv. این گزینه می‌تواند از تداخل همگام‌سازی هنگام سنکرون کردن فایل‌ها جلوگیری کند، اما اطلاعات مربوط به نام‌های فایل یکسان را در دایرکتوری‌های مختلف فاش می‌سازد (بخش «Identical names leak» را در https://nuetzlich.net/gocryptfs/comparison/#file-names ببینید).

در فایل gocryptfs.conf حاصل، ویژگی «DirIV» در «FeatureFlags» موجود نخواهد بود.

منسوخ شده و در gocryptfs نسخه 2.2 و بعد از آن نادیده گرفته می‌شود.

برای اطلاعات پیش‌زمینه به https://github.com/rfjakob/gocryptfs/commit/f3c777d5eaa682d878c638192311e52f9c204294 و https://github.com/rfjakob/gocryptfs/issues/596 مراجعه کنید.

استفاده از HKDF برای اشتقاق کلیدهای جداگانه محتوا و نام فایل از کلید اصلی. پیش‌فرض true است.

integer value, allowed range 62...255

هش کردن نام‌هایی که طول آن‌ها (در حالت رمزنگاری‌شده) از این مقدار فراتر می‌رود. مقدار پیش‌فرض ۲۵۵ است که با محدودیت معمول طول نام فایل در لینوکس همخوانی داشته و بهترین کارایی را فراهم می‌آورد.

با این وجود، سرویس‌های ذخیره‌سازی ابری ممکن است محدودیت‌های کمتری روی طول نام فایل و/یا مسیر اعمال کنند. در این وضعیت، تنظیم -longnamemax روی مقداری کمتر می‌تواند راهگشا باشد.

هرچه مقدار کمتر باشد، فایل‌های اضافی .name بیشتری باید ایجاد شوند که این امر فهرست‌گیری دایرکتوری‌ها را کند می‌کند.

مقادیر کمتر از ۶۲ مجاز نیستند زیرا نام هش‌شده طولانی‌تر از نام اصلی خواهد شد.

مثال:

-longnamemax 100

عدم رمزنگاری نام فایل‌ها و مقصدهای پیوندهای نمادین.

استفاده از کدگذاری بدون پدینگ base64 برای نام فایل‌ها. این کار نویسه‌های انتهایی «==» را حذف می‌کند. سامانه فایل ایجادشده با این گزینه فقط توسط gocryptfs نسخه 1.2 و بالاتر قابل سوار کردن است. پیش‌فرض true است.

حالت معکوس، نمایی فقط‌خواندنی و رمزنگاری‌شده از یک دایرکتوری با متن خام را ارائه می‌دهد. متضمن گزینه -aessiv است.

اگر می‌خواهید نمای رمزنگاری‌شده را با استفاده از -masterkey سوار کنید، باید گزینه -aessiv را مشخص نمایید.

استفاده از رمزنگاری محتوای فایل با XChaCha20-Poly1305. این حالت در پردازنده‌هایی که فاقد شتاب سخت‌افزاری AES هستند بسیار سریع‌تر از AES-GCM خواهد بود.

برای اطلاع از میزان تفاوت سرعت، دستور gocryptfs -speed را اجرا کنید.

گزینه‌های موجود برای سوار کردن در زیر فهرست شده‌اند. معمولاً به هیچ‌یک نیازی نیست؛ مقادیر پیش‌فرض مناسب هستند.

فعال‌سازی اعمال کنترل دسترسی (ACL). هنگامی که می‌خواهید از ACL استفاده کنید، باید این گزینه را فعال کنید.

به‌طور پیش‌فرض، هسته لینوکس از دسترسی هر کاربر دیگری (حتی root) به یک سامانه فایل FUSE متصل جلوگیری می‌کند. تنظیم این گزینه، امکان دسترسی دیگر کاربران را مشروط به بررسی مجوزهای فایل فراهم می‌سازد. تنها در صورتی کار می‌کند که user_allow_other در /etc/fuse.conf تنظیم شده باشد. این گزینه معادل «allow_other» به‌علاوه «default_permissions» توصیف‌شده در fuse(8) است.

هنگامی که gocryptfs با نام فایل «نامعتبر» مواجه می‌شود (نامی که قابل رمزگشایی نیست یا پس از رمزگشایی به نویسه‌های نامفهوم تبدیل می‌شود)، هشداری ثبت شده و فایل از نمای متن خام پنهان می‌گردد.

با گزینه -badname، می‌توانید نام‌های نامعتبر را مشخص کنید تا به جای پنهان شدن، همچنان در نمای متن خام نمایش داده شوند. به انتهای نام چنین فایل‌هایی عبارت GOCRYPTFS_BAD_NAME افزوده خواهد شد.

الگوی انطباق سراسری (Glob). می‌تواند چندین بار برای الگوهای مختلف تکرار شود.

مثال‌ها:

تداخل‌های همگام‌سازی در Dropbox:

-badname '*conflicted copy*'

تداخل‌های همگام‌سازی در Syncthing:

-badname '*.sync-conflict*'

نمایش تمام نام‌های نامعتبر فایل‌ها:

-badname '*'

تنظیم بافتار امنیتی SELinux. برای جزئیات به mount(8) مراجعه کنید.

این گزینه جهت سازگاری با آزمون‌های xfstests افزوده شده است که این گزینه را با -o context="system_u:object_r:root_t:s0" تعیین می‌کند.

تنها هنگام سوار کردن به عنوان کاربر root کار می‌کند، در غیر این صورت این خطا را از fusermount3 دریافت خواهید کرد:

fusermount3: unknown option 'context="system_u:object_r:root_t:s0"'

ایجاد یک سوکت کنترلی در مسیر مشخص‌شده. از این سوکت می‌توان برای رمزگشایی و رمزنگاری مسیرها در داخل سامانه فایل استفاده کرد. هنگام استفاده از این گزینه، مطمئن شوید که دایرکتوری حاوی سوکت برای همگان قابل دسترس نباشد. برای نمونه، مسیری مانند /run/user/UID/my.socket مناسب خواهد بود.

فعال‌سازی (-dev) یا غیرفعال‌سازی (-nodev) فایل‌های دستگاه در نقطه اتصال gocryptfs (پیش‌فرض: -nodev). در صورت تعیین هر دو، -nodev اولویت خواهد داشت. برای استفاده از -dev به مجوزهای کاربر ریشه (root) نیاز است.

تنها برای حالت معکوس: مستثنی کردن مسیر نسبی متن خام از نمای رمزنگاری‌شده، با تطبیق تنها از ریشه سامانه فایل سوارشده. می‌تواند چندین بار ارسال شود.

مثالی که دایرکتوری‌های «Music» و «Movies» را از دایرکتوری ریشه مستثنی می‌کند:

gocryptfs -reverse -exclude Music -exclude Movies /home/user /mnt/user.encrypted

همچنین گزینه‌های -exclude-wildcard، -exclude-from و بخش «مستثنی کردن فایل‌ها» را ببینید.

تنها برای حالت معکوس: مستثنی کردن مسیرها از نمای رمزنگاری‌شده مطابق با نحو gitignore(5)، با پشتیبانی از کاراکترهای عمومی. می‌تواند چندین بار برای تعیین چندین الگو مشخص شود.

مثال برای مستثنی کردن تمامی فایل‌های .mp3 در هر دایرکتوری:

gocryptfs -reverse -exclude-wildcard '*.mp3' /home/user /mnt/user.encrypted

مثال برای مستثنی کردن همه‌چیز به جز دایرکتوری `important` در دایرکتوری ریشه:

gocryptfs -reverse -exclude-wildcard '*' -exclude-wildcard '!/important' /home/user /mnt/user.encrypted

همچنین گزینه -exclude-from و بخش «مستثنی کردن فایل‌ها» را ببینید.

تنها برای حالت معکوس: خواندن الگوهای gitignore از یک فایل. می‌تواند چندین بار تکرار شود. مثال:

gocryptfs -reverse -exclude-from ~/crypt-exclusions /home/user /mnt/user.encrypted

همچنین گزینه‌های -exclude، -exclude-wildcard و بخش «مستثنی کردن فایل‌ها» را ببینید.

فعال‌سازی (-exec) یا غیرفعال‌سازی (-noexec) اجرای فایل‌های اجرایی در سامانه فایل gocryptfs (پیش‌فرض: -exec). در صورت تعیین هر دو، -noexec اولویت دارد.

ماندن در پیش‌زمینه به جای رفتن به پس‌زمینه (daemonize شدن). جهت سازگاری، «-f» نیز پذیرفته می‌شود، اما «-fg» ارجح است.

مگر در حالتی که -notifypid مشخص شده باشد، لاگ‌ها به جای syslog به stdout و stderr فرستاده می‌شوند.

در صورت دریافت رشته‌ای به شکل «uid:gid» (که در آن «uid» و «gid» با اعداد صحیح مثبت جایگزین شده‌اند)، مالکیت تمامی فایل‌ها را بدون توجه به مالکیت واقعی آن‌ها، به عنوان uid و gid مشخص‌شده نمایش می‌دهد. متضمن گزینه «allow_other» است.

این رفتار به‌ندرت مورد نیاز است: کاربر معمولاً باید gocryptfs را با همان کاربری اجرا کند که مالک فایل‌های ذخیره‌سازی پشتیبان است، که این حساب معمولاً باید با حساب کاربری که قصد دسترسی به محتوای رمزگشایی‌شده را دارد یکی باشد. نمونه‌ای که این گزینه می‌تواند در آن سودمند باشد وضعیتی است که در آن محتوا روی سامانه فایلی ذخیره شده که از مالکیت و مجوزهای یونیکس به‌درستی پشتیبانی نمی‌کند.

منسوخ شده و در gocryptfs نسخه 2.2 و بالاتر نادیده گرفته می‌شود.

برای اطلاع از اینکه این گزینه چه بود و چرا حذف شد به پیوند زیر مراجعه نمایید: https://github.com/rfjakob/gocryptfs/commit/d023cd6c95fcbc6b5056ba1f425d2ac3df4abc5a

بازنویسی نام سامانه فایل (ستون اول در df -T). می‌تواند به صورت «-o fsname=» نیز ارسال شود و معادل گزینه‌ای با همین نام در libfuse است. به‌طور پیش‌فرض از CIPHERDIR استفاده می‌شود.

فعال کردن خروجی اشکال‌زدایی کتابخانه fuse.

فقط برای حالت مستقیم: پیاده کردن خودکار سامانه فایل در صورتی که برای مدت مشخص‌شده بدون فعالیت (بیکار) بوده باشد. مدت‌زمان می‌تواند مانند «500s» یا «2h45m» مشخص شود. مقدار ۰ (پیش‌فرض) به معنای متصل ماندن دائمی است.

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

فعال کردن گزینه kernel_cache در سامانه فایل FUSE؛ برای جزئیات به fuse(8) مراجعه فرمایید.

ارسال گزینه‌های سوار کردن اضافی به هسته (فهرست جداشده با کاما). سامانه‌های فایل FUSE به‌طور پیش‌فرض با «nodev,nosuid» متصل می‌شوند. اگر gocryptfs با کاربر root اجرا شود، می‌توانید فایل‌های دستگاه را با ارسال گزینه متضاد «dev» فعال کنید، و اگر می‌خواهید باینری‌های دارای پرچم suid فعال باشند، «suid» را ارسال نمایید. گزینه‌های «ro» (معادل گزینه «-ro») و «noexec» نیز می‌توانند مفید باشند. برای فهرست کامل، بخش FILESYSTEM-INDEPENDENT MOUNT OPTIONS را در mount(8) ببینید. در مک‌اواس (macOS)، گزینه «local» قابلیت سطل زباله مبتنی بر حجم را فعال می‌کند اگر پوشه .Trashes در ریشه حجم وجود داشته باشد (ممکن است نیاز به ساخت دستی باشد). توجه کنید که «local» در مستندات osxfuseبه عنوان «آزمایشی» علامت خورده است؛ همچنین گزینه‌های «noapplexattr» و «noappledouble» ممکن است سودمند باشند.

توجه کنید که برخلاف «-o»، گزینه «-ko» یک گزینه معمولی است و باید پیش از دایرکتوری‌ها ارسال شود. مثال:

gocryptfs -ko noexec /tmp/foo /tmp/bar

ذخیره نام‌های طولانی‌تر از ۱۷۵ بایت در فایل‌های اضافی (پیش‌فرض true).

این پرچم تنها هنگام بازیابی سامانه‌های فایل بسیار قدیمی gocryptfs (نسخه 0.8 و قبل از آن) با استفاده از «-masterkey» مفید است. در غیر این صورت نادیده گرفته می‌شود (روی پیش‌فرض می‌ماند).

به -dev, -nodev مراجعه کنید.

به -exec, -noexec مراجعه کنید.

قرار داشتن گزینه nofail در /etc/fstab به systemd اعلام می‌کند که حتی در صورت شکست عملیات سوار کردن، بوت سیستم به‌طور عادی ادامه یابد (به man systemd.fstab مراجعه کنید).

این گزینه توسط خود gocryptfs نادیده گرفته می‌شود و خارج از /etc/fstab اثری ندارد.

اجازه اتصال روی دایرکتوری‌های غیرخالی. سامانه FUSE به‌طور پیش‌فرض برای جلوگیری از پنهان‌سازی تصادفی فایل‌ها، این کار را مجاز نمی‌داند.

غیرفعال‌سازی پیش‌تخصیص فضا پیش از نوشتن. به‌طور پیش‌فرض، gocryptfs فضایی را که نوشتن بعدی اشغال می‌کند با استفاده از fallocate(2) در حالت FALLOC_FL_KEEP_SIZE پیش‌تخصیص می‌دهد. این کار تضمین می‌کند که در میانه نوشتن فضا کم نیاید؛ رخدادی که باعث خراب و غیرقابل‌خواندن شدن آخرین بلوک 4kB می‌شود.

در سامانه فایل ext4، پیش‌تخصیص سریع است و افت کارایی محسوسی ایجاد نمی‌کند. متأسفانه در Btrfs، پیش‌تخصیص بسیار کند است، به‌ویژه روی دیسک‌های مغناطیسی چرخشی (HDD). گزینه «-noprealloc» این امکان را فراهم می‌کند که مقاومت در برابر خطاهای کمبود فضا با افزایش چشمگیر سرعت مبادله شود.

برای بنچمارک‌ها و جزئیات بیشتر به پیوند زیر مراجعه کنید: https://github.com/rfjakob/gocryptfs/issues/63

به -suid, -nosuid مراجعه کنید.

پیام‌های عیب‌یابی معمولاً پس از رفتن gocryptfs به حالت پس‌زمینه (daemonize) به syslog فرستاده می‌شوند. این گزینه این تغییر مسیر را غیرفعال کرده و پیام‌ها همچنان در stdout و stderr چاپ خواهند شد.

ارسال سیگنال USR1 به فرایند مشخص‌شده پس از سوار کردن موفقیت‌آمیز. این گزینه به‌طور داخلی برای رفتن فرایند به پس‌زمینه استفاده می‌شود.

عدم عبور از مرزهای سامانه‌های فایل (مشابه گزینه --one-file-system در rsync). نقاط اتصال به صورت دایرکتوری‌های خالی نمایش داده می‌شوند.

تنها در حالت معکوس کاربرد دارد.

محدودیت: تک‌فایل‌های سوارشده پنهان نخواهند شد.

سوار کردن سامانه فایل به صورت خواندن/نوشتن (-rw، پیش‌فرض) یا فقط‌خواندنی (-ro). در صورت مشخص شدن هر دو، -ro اولویت دارد.

به بخش -reverse در «گزینه‌های مقداردهی اولیه» مراجعه کنید. باید گزینه -reverse را هم در هنگام -init و هم هنگام سوار کردن مشخص کنید.

هسته معمولاً چندین درخواست خواندن هم‌روند را برای پاسخ‌گویی به درخواست‌های فضای کاربری و خواندن پیشاپیش (readahead) ارسال می‌کند. برنامه gocryptfs به آن‌ها به‌صورت هم‌روند و با ترتیب دلخواه پاسخ می‌دهد. روی فضاهای ذخیره‌سازی که کارایی ضعیفی برای خواندن‌های هم‌روند یا نامنظم دارند (مانند Amazon Cloud Drive)، این رفتار می‌تواند موجب افت شدید سرعت خواندن شود.

گزینه -serialize_reads دو کار انجام می‌دهد: (۱) درخواست‌های خواندن یکی‌یکی (بدون هم‌روندی) ارسال خواهند شد و (۲) gocryptfs تلاش می‌کند خواندن‌ها را به ترتیب آفست فایل مرتب سازد.

این ترتیب‌دهی مستلزم آن است که gocryptfs پیش از ارسال خواندن، مدت‌زمان معینی درنگ کند. سریالی‌سازی قفل‌گذاری اضافی تحمیل می‌کند. این عوامل سرعت انتقال داده را به زیر 70MB/s محدود می‌سازند.

برای جزئیات بیشتر به پیوند زیر مراجعه کنید: https://github.com/rfjakob/gocryptfs/issues/92

فعال‌سازی سازوکارهای تطبیقی به منظور کارکرد بهتر gocryptfs زمانی که دایرکتوری پشتیبان به‌طور هم‌زمان توسط چندین نمونه از gocryptfs مورد دسترسی قرار می‌گیرد.

در حال حاضر، این گزینه دو کار انجام می‌دهد:

1.
غیرفعال‌سازی کش‌گذاری stat() تا تغییرات در فضای ذخیره‌سازی پشتیبان بلافاصله نمایان شوند.
2.
غیرفعال‌سازی ردیابی پیوندهای سخت (hard links)، زیرا شماره‌های inode روی ذخیره‌ساز پشتیبان در صورت حذف و ساخت مجدد فایل‌ها در پشت صحنه پایدار نیستند. در غیر این صورت، این وضعیت خطاهای عجیب «file does not exist» و خطاهای دیگر را تولید می‌کرد.

هنگامی که «-sharedstorage» فعال باشد، کارایی کاهش یافته و پیوندهای سخت قابل ایجاد نخواهند بود.

حتی با فعال بودن این پرچم، ممکن است گهگاه با مشکلاتی روبرو شوید. اجرای gocryptfs روی فضای ذخیره‌سازی مشترک به اندازه حالت کاربرد اختصاصی مورد آزمایش قرار نگرفته است. لطفاً حجم کاری خود را از قبل بیازمایید و هرگونه مشکلی را گزارش دهید.

اطلاعات بیشتر: https://github.com/rfjakob/gocryptfs/issues/156

فعال‌سازی (-suid) یا غیرفعال‌سازی (-nosuid) فایل‌های اجرایی suid و sgid در نقطه اتصال gocryptfs (پیش‌فرض: -nosuid). در صورت تعیین هر دو، -nosuid اولویت خواهد داشت. برای استفاده از -suid به مجوزهای کاربر ریشه نیاز دارید.

استفاده از کلید اصلی ساختگی متشکل از تمام بایت‌های صفر. این گزینه فقط برای آزمایش‌های خودکار در نظر گرفته شده است زیرا هیچ‌گونه امنیتی ارائه نمی‌دهد.

گزینه‌هایی که برای بیش از یک عملیات کاربرد دارند در زیر آمده‌اند. برای هر گزینه مشخص شده است که در چه مواردی کاربرد دارد. مجدداً، معمولاً به هیچ‌یک از آن‌ها نیازی نخواهید داشت.

استفاده از فایل پیکربندی مشخص‌شده به جای CIPHERDIR/gocryptfs.conf.

کاربرد: تمامی عملیاتی که از یک فایل پیکربندی استفاده می‌کنند: سوار کردن، -fsck، -passwd، -info و -init.

نوشتن نمایه مصرف پردازنده (CPU profile) در فایل مشخص‌شده.

کاربرد: تمامی عملیات‌ها.

فعال کردن خروجی اشکال‌زدایی.

کاربرد: تمامی عملیات‌ها.

استفاده از یک برنامه خارجی (مانند ssh-askpass) برای اعلان دریافت گذرواژه. برنامه باید گذرواژه را در خروجی استاندارد ارائه دهد؛ خط جدید انتهایی توسط gocryptfs حذف می‌شود. اگر فقط می‌خواهید گذرواژه را از یک فایل بخوانید، گزینه -passfile را ببینید.

هنگامی که -extpass یک بار مشخص شود، آرگومان رشته‌ای بر اساس فاصله‌ها تفکیک می‌گردد. برای مثال، -extpass "md5sum my password.txt" به صورت "md5sum" "my" "password.txt" اجرا می‌شود که مسلماً خروجی مطلوب شما نیست.

گزینه -extpass را دو بار یا بیشتر مشخص کنید تا آرگومان‌های رشته‌ای دست‌نخورده استفاده شوند. برای مثال، فراخوانی مطلوب به این شکل خواهد بود: -extpass "md5sum" -extpass "my password.txt".

اگر می‌خواهید از تفکیک بر اساس فاصله جلوگیری کنید اما نمی‌خواهید آرگومانی به برنامه ارسال نمایید، از "--" استفاده کنید که توسط اکثر برنامه‌ها پذیرفته می‌شود: -extpass "my program" -extpass "--"

کاربرد: تمامی عملیاتی که گذرواژه درخواست می‌کنند.

اشکال: در حالت -extpass -X، مقدار -X به عنوان --X تفسیر خواهد شد. لطفاً برای جلوگیری از آن از -extpass=-X استفاده کنید. برای جزئیات به بخش تکرار خط تیره در بخش اشکالات (BUGS) مراجعه کنید.

استفاده از توکن امنیتی FIDO2 برای مقداردهی اولیه و بازگشایی قفل سامانه فایل. از دستور fido2-token -L برای دریافت مسیر دستگاه توکن FIDO2 استفاده کنید. در لینوکس، بسته fido2-tools مورد نیاز است.

کاربرد: تمامی عملیاتی که گذرواژه درخواست می‌کنند.

گزینه‌های ارسال‌شده به fido2-assert همراه با گزینه -t. این گزینه می‌تواند چندین بار تکرار شود و هر بار دو آرگومان -t و OPTION را به fido2-assert اضافه می‌کند. برای بررسی گزینه‌های پشتیبانی‌شده به man fido2-assert مراجعه کنید.

مثال‌ها:

ایجاد یک سامانه فایل بدون اعتبارسنجی پین (PIN):

gocryptfs -init -fido2 DEVICE_PATH -fido2-assert-option pin=false CIPHERDIR

ایجاد یک سامانه فایل با هر دو اعتبارسنجی کاربر و اعتبارسنجی پین:

gocryptfs -init -fido2 DEVICE_PATH -fido2-assert-option uv=true -fido2-assert-option pin=true CIPHERDIR

ایجاد یک سامانه فایل با هر دو حضور کاربر و اعتبارسنجی کاربر:

gocryptfs -init -fido2 DEVICE_PATH -fido2-assert-option up=true -fido2-assert-option uv=true CIPHERDIR

استفاده از یک کلید اصلی صریح مشخص‌شده در خط فرمان یا اگر مقدار ویژه «stdin» به کار رود، خواندن کلید اصلی از stdin، به جای خواندن فایل پیکربندی و درخواست گذرواژه.

توجه داشته باشید که خط فرمان و در نتیجه کلید اصلی برای هر کاربری در سیستم که بتواند دستور «ps -auxwww» را اجرا کند قابل رؤیت است. برای اجتناب از این خطر از «-masterkey=stdin» استفاده کنید.

گزینه masterkey به عنوان گزینه‌ای برای بازیابی در شرایط اضطراری در نظر گرفته شده است، مانند زمانی که گذرواژه را فراموش کرده یا فایل پیکربندی را از دست داده‌اید.

حتی در صورت وجود فایل پیکربندی، از آن استفاده نخواهد شد. تمام تنظیمات غیرپیش‌فرض باید در خط فرمان ارسال شوند: -aessiv هنگام سوار کردن سامانه فایلی که با حالت معکوس ایجاد شده است، یا -plaintextnames برای سامانه فایلی که با آن گزینه ساخته شده است.

مثال ۱: سوار کردن سامانه فایلی که با گزینه‌های پیش‌فرض ایجاد شده است:

gocryptfs -masterkey=6f717d8b-6b5f8e8a-fd0aa206-778ec093-62c5669b-abd229cd-241e00cd-b4d6713d cipher mnt
gocryptfs -masterkey=stdin cipher mnt

مثال ۲: سوار کردن سامانه فایل gocryptfs -reverse (توجه داشته باشید که باید گزینه -aessiv را مشخص کنید):

gocryptfs -masterkey=stdin -aessiv cipher mnt

کاربرد: تمامی عملیاتی که گذرواژه درخواست می‌کنند.

نوشتن نمایه حافظه در فایل مشخص‌شده. این گزینه هنگام بررسی و اشکال‌زدایی مصرف حافظه gocryptfs سودمند است.

کاربرد: تمامی عملیات‌ها.

جهت سازگاری با mount(1)، گزینه‌ها به صورت «-o COMMA-SEPARATED-OPTIONS» در انتهای خط فرمان نیز پذیرفته می‌شوند. برای مثال، «-o q,zerokey» معادل با ارسال «-q -zerokey» است.

توجه داشته باشید که با «-o» تنها می‌توانید گزینه‌هایی را ارسال کنید که توسط gocryptfs شناخته می‌شوند. اگر می‌خواهید پرچم‌های ویژه‌ای به هسته بفرستید، باید از «-ko» (گزینه هسته) استفاده کنید. این موضوع با سامانه‌های فایل مبتنی بر libfuse تفاوت دارد که گزینه‌های ناشناخته «-o» را به‌طور خودکار به هسته ارسال می‌کنند.

مثال:

gocryptfs /tmp/foo /tmp/bar -o q,zerokey

کاربرد: تمامی عملیات‌ها.

استفاده از OpenSSL به جای کتابخانه رمزنگاری توکار Go (پیش‌فرض «auto»). استفاده از کتابخانه توکار Go حدود ۴ برابر کندتر است، مگر اینکه پردازنده شما دستورالعمل‌های سخت‌زاری AES داشته باشد و از نسخه Go 1.6 یا بالاتر استفاده کنید. در حالت «auto»، برنامه gocryptfs گزینه سریع‌تر را انتخاب می‌کند.

کاربرد: تمامی عملیات‌ها.

خواندن گذرواژه از فایل متنی ساده مشخص‌شده. فایل باید دقیقاً شامل یک سطر باشد (از فایل‌های دودویی استفاده نکنید!). در صورت وجود بیش از یک سطر، هشداری چاپ شده و تنها سطر اول استفاده می‌شود. وجود یک نویسه خط جدید انتهایی مجاز است و باعث هشدار نمی‌شود.

این گزینه را چندین بار ارسال کنید تا سطر اول از چند فایل خوانده شود. آن‌ها برای تشکیل گذرواژه مؤثر به یکدیگر متصل می‌شوند.

مثال:

echo hello > hello.txt
echo world > world.txt
gocryptfs -passfile hello.txt -passfile world.txt

گذرواژه مؤثر «helloworld» خواهد بود.

کاربرد: تمامی عملیاتی که گذرواژه درخواست می‌کنند.

حالت بی‌صدا - عدم نمایش پیام‌های اطلاعاتی.

کاربرد: تمامی عملیات‌ها.

برنامه gocryptfs از الگوریتم scrypt برای درهم‌سازی (هش کردن) گذرواژه هنگام سوار کردن استفاده می‌کند که آن را در برابر حملات جستجوی فراگیر (brute-force) محافظت می‌نماید.

گزینه -scryptn پارامتر هزینه «N» در scrypt را کنترل می‌کند که به صورت scryptn=log2(N) بیان می‌شود. مقادیر مجاز از -scryptn=10 تا -scryptn=28 متغیر بوده و بیانگر N=2^10 تا N=2^28 است.

تنظیم این مقدار روی عددی کمتر سرعت سوار کردن را افزایش داده و مصرف حافظه را کاهش می‌دهد، اما گذرواژه را در برابر حملات جستجوی فراگیر آسیب‌پذیرتر می‌سازد. مقدار پیش‌فرض ۱۶ است.

میزان مصرف حافظه برای scrypt در حین سوار کردن به شرح زیر است:

scryptn     Memory Usage  
=======     ============
10          1   MiB
11          2 
12          4 
13          8 
14          16  
15          32  
16          64  
17          128 
18          256 
19          512 
20          1   GiB
21          2 
22          4 
23          8 
24          16  
25          32  
26          64  
27          128 
28          256 

کاربرد: -init، -passwd

همچنین ببینید: بنچمارک‌های موجود در کد منبع gocryptfs در پوشه internal/configfile.

نوشتن ردگیری اجرا در فایل. ردگیری را با استفاده از دستور «go tool trace FILE» مشاهده کنید.

کاربرد: تمامی عملیات‌ها.

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

کاربرد: تمامی عملیات‌ها.

پایان پردازش گزینه‌ها. زمانی مفید است که نام دایرکتوری CIPHERDIR با خط‌تیره «-» آغاز شود.

کاربرد: تمامی عملیات‌ها.

در حالت معکوس، امکان مستثنی کردن فایل‌ها از نمای رمزنگاری‌شده با استفاده از گزینه‌های -exclude، -exclude-wildcard و -exclude-from وجود دارد.

گزینه -exclude مسیرهای کامل را تطبیق می‌دهد، بنابراین -exclude file.txt تنها فایلی به نام file.txt را در ریشه سامانه فایل سوارشده مستثنی می‌کند؛ فایل‌هایی به نام file.txt در زیردایرکتوری‌ها همچنان قابل مشاهده خواهند بود. کاراکترهای عمومی پشتیبانی نمی‌شوند. این گزینه برای حفظ سازگاری با رفتار نسخه‌های تا 1.6.x حفظ شده است. کاربران جدید باید به جای آن از -exclude-wildcard استفاده کنند.

گزینه -exclude-wildcard از نحو gitignore استفاده می‌کند و فایل‌ها را در هر مکانی تطبیق می‌دهد، بنابراین -exclude-wildcard file.txt فایل‌هایی به نام file.txt را در هر دایرکتوری مستثنی می‌سازد. اگر می‌خواهید مسیرهای کامل را تطبیق دهید، می‌توانید نام فایل را با پیشوند / آغاز کنید: -exclude-wildcard /file.txt تنها file.txt را در ریشه سامانه فایل سوارشده مستثنی می‌کند.

اگر موارد استثنا زیاد باشند، می‌توانید از -exclude-from برای خواندن الگوهای gitignore از یک فایل استفاده کنید. مشابه -exclude-wildcard، از یک / ابتدایی برای تطبیق مسیرهای کامل استفاده کنید.

قواعد مستثنی‌سازی همان قواعد مربوط به gitignore هستند. به‌طور خلاصه:

1.
یک سطر خالی با هیچ فایلی تطبیق پیدا نمی‌کند، بنابراین می‌تواند به عنوان فاصله‌انداز برای خوانایی عمل کند.
2.
سطری که با # آغاز شود به عنوان توضیح در نظر گرفته می‌شود. برای الگوهایی که با علامت شارپ آغاز می‌شوند، یک بک‌اسلش (\) جلوی شارپ نخست قرار دهید.
3.
فاصله‌های خالی انتهایی نادیده گرفته می‌شوند مگر آنکه با بک‌اسلش (\) نقل‌قول شوند.
4.
یک پیشوند اختیاری ! الگو را نفی می‌کند؛ هر فایل مطابقی که با الگوی قبلی مستثنی شده بود، مجدداً مشمول خواهد شد. اگر دایرکتوری والد یک فایل مستثنی شده باشد، مشمول کردن مجدد آن فایل ممکن نیست. برای الگوهایی که با علامت واقعی ! شروع می‌شوند، یک بک‌اسلش (\) در ابتدای آن قرار دهید؛ برای مثال: \!important!.txt.
5.
اگر الگو به یک اسلش ختم شود، برای اهداف توصیف زیر اسلش حذف می‌شود، اما تنها با دایرکتوری‌ها مطابقت خواهد یافت. به عبارت دیگر، foo/ با دایرکتوری foo و مسیرهای زیر آن مطابقت دارد، اما با فایل عادی یا پیوند نمادین با نام foo مطابقت ندارد.
6.
اگر الگو شامل اسلش / نباشد، به عنوان الگوی انطباق شل تلقی شده و برای تطبیق با مسیر نسبی نسبت به ریشه سامانه فایل سوارشده بررسی می‌شود.
7.
در غیر این صورت، الگو به عنوان الگوی شل مناسب برای پردازش توسط fnmatch(3) با پرچم FNM_PATHNAME در نظر گرفته می‌شود: کاراکترهای عمومی در الگو با / در نام مسیر مطابقت نخواهند داشت. برای مثال، Documentation/*.html با Documentation/git.html تطبیق دارد اما با Documentation/ppc/ppc.html یا tools/perf/Documentation/perf.html مطابقت ندارد.
8.
یک اسلش در ابتدای الگو با شروع نام مسیر مطابقت دارد. برای مثال، /*.c با cat-file.c تطبیق دارد اما با mozilla-sha1/sha1.c مطابقت ندارد.
9.
دو ستاره متوالی (**) در الگوهایی که در برابر مسیر کامل مطابقت داده می‌شوند ممکن است معنای خاصی داشته باشند:
یک ** ابتدایی که به دنبال آن یک اسلش آمده باشد به معنای تطبیق در تمامی دایرکتوری‌ها است. برای مثال، **/foo با فایل یا دایرکتوری foo در هر مکانی تطبیق دارد، مشابه الگوی foo. الگوی **/foo/bar با فایل یا دایرکتوری bar در هر جایی که مستقیماً در زیر دایرکتوری foo باشد تطبیق می‌یابد.
یک /** انتهایی با تمام محتویات داخل آن تطبیق دارد. برای مثال، abc/** با تمام فایل‌های داخل دایرکتوری abc با عمق نامحدود مطابقت پیدا می‌کند.
یک اسلش که به دنبال آن دو ستاره متوالی و سپس یک اسلش دیگر بیاید با صفر یا چند دایرکتوری تطبیق می‌یابد. برای مثال، a/**/b با a/b، a/x/b، a/x/y/b و نظایر آن مطابقت دارد.
سایر موارد ستاره‌های متوالی نامعتبر تلقی می‌شوند.

ایجاد یک سامانه فایل رمزنگاری‌شده در دایرکتوری «mydir.crypt» و سوار کردن آن روی «mydir»:

mkdir mydir.crypt mydir
gocryptfs -init mydir.crypt
gocryptfs mydir.crypt mydir

سوار کردن نمای رمزنگاری‌شده دایرکتوری خانه joe با استفاده از حالت معکوس:

mkdir /home/joe.crypt
gocryptfs -init -reverse /home/joe
gocryptfs -reverse /home/joe /home/joe.crypt

افزودن این سطر به /etc/fstab موجب می‌شود /tmp/cipher هنگام بالا آمدن سیستم در /tmp/plain با استفاده از گذرواژه موجود در /tmp/passfile سوار شود. از دستور sudo mount -av برای آزمایش این سطر بدون نیاز به راه‌اندازی مجدد استفاده کنید. مسیر gocryptfs را بر اساس خروجی دستور which gocryptfs تنظیم کنید. حتماً از گزینه nofail استفاده کنید تا در صورت بروز خطا در سوار کردن سامانه فایل gocryptfs، بوت سیستم مختل نشود (برای جزئیات به گزینه -nofail مراجعه کنید).

/tmp/cipher /tmp/plain fuse./usr/local/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0

در صورت تنظیم NO_COLOR (صرف‌نظر از مقدار آن)، خروجی رنگی غیرفعال می‌شود (به https://no-color.org مراجعه کنید).

0: موفقیت

6: دایرکتوری CIPHERDIR خالی نیست (در «-init»)

10: نقطه اتصال MOUNTPOINT دایرکتوری خالی نیست

12: گذرواژه نادرست است

22: گذرواژه خالی است (در «-init»)

23: امکان خواندن gocryptfs.conf وجود نداشت

24: امکان نوشتن gocryptfs.conf وجود نداشت (در «-init» یا «-password»)

26: دستور fsck خطاهایی یافت

سایر موارد: لطفاً پیام خطا را بررسی کنید

همچنین ببینید: https://github.com/rfjakob/gocryptfs/blob/master/internal/exitcodes/exitcodes.go

برنامه gocryptfs در نسخه 2.1 برای تجزیه خط فرمان به کتابخانه pflag مهاجرت کرد تا از پرچم‌ها و آرگومان‌های مکانی با هر ترتیبی پشتیبانی کند. برای حفظ سازگاری با گزینه‌های بلند تک‌خط‌تیره مانند -extpass، خط فرمان پیش‌پردازش شده و تمامی گزینه‌های دارای تک‌خط‌تیره به دوخط‌تیره تبدیل می‌شوند.

متأسفانه این بدان معناست که در دستور:

gocryptfs -extpass myapp -extpass -X

برنامه gocryptfs گزینه -X را به --X تبدیل کرده و برنامه extpass را به صورت myapp --X فراخوانی می‌کند.

برای رفع این مشکل، لطفاً از فرمت زیر استفاده کنید:

gocryptfs -extpass myapp -extpass=-X

mount(2) fuse(8) fallocate(2) encfs(1) gitignore(5)

github.com/rfjakob.

Aug 2017