PASS(1) Password Store PASS(1)

pass - ذخیره، بازیابی، تولید و همگام‌سازی امن گذرواژه‌ها

pass [ دستور ] [ گزینه‌ها ]... [ آرگومان‌ها ]...

ابزار pass یک مخزن گذرواژه بسیار ساده است که گذرواژه‌ها را درون فایل‌های رمزنگاری‌شده توسط gpg2(1) در یک ساختار درختی پوشه‌ای ساده در مسیر ~/.password-store نگه‌داری می‌کند. ابزار pass مجموعه‌ای از دستورات را برای مدیریت مخزن گذرواژه فراهم می‌کند و به کاربر اجازه می‌دهد گذرواژه‌ها را اضافه، حذف، ویرایش، همگام‌سازی و تولید کند یا تغییر دهد.

اگر هیچ دستوری مشخص نشود، دستور به طور پیش‌فرض یکی از دو مورد show یا ls خواهد بود که بسته به نوع مشخص‌کننده در آرگومان‌ها تعیین می‌شود. همچنین اگر متغیر محیطی PASSWORD_STORE_ENABLE_EXTENSIONS برابر با "true" باشد و فایل .extensions/COMMAND.bash درون مخزن گذرواژه موجود و قابل اجرا باشد، به درون محیط بارگذاری شده (source) و تمام آرگومان‌ها و متغیرهای محیطی به آن منتقل می‌شوند. افزونه‌های موجود در پوشه سراسری سیستم، که تنها توسط مدیر سیستم قابل نصب هستند، همواره فعال می‌باشند.

در غیر این صورت، دستور باید یکی از دستورات معتبر فهرست‌شده در زیر باشد.

چندین مورد از دستورات زیر در صورتی که پوشه مخزن گذرواژه یک مخزن گیت (Git) نیز باشد، قابلیت‌های بیشتری ارائه داده یا به آن متکی هستند. اگر پوشه مخزن گذرواژه یک مخزن گیت باشد، تمام دستورات تغییردهنده مخزن گذرواژه، یک commit متناظر در گیت ثبت می‌کنند. زیرپوشه‌ها می‌توانند مخازن مجزا و تودرتوی گیت باشند، و pass درونی‌ترین پوشه متناسب با گذرواژه جاری را به کار می‌گیرد. برای توضیحات دقیق درباره استفاده از init و git(1) به بخش مثال پیشرفته گیت (EXTENDED GIT EXAMPLE) مراجعه فرمایید.

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

یک اسکریپت تکمیل خودکار (completion) برای bash جهت تکمیل خودکار نام گذرواژه‌ها با کلید Tab در bash(1) وجود دارد.

مقداردهی اولیه ذخیره‌ساز گذرواژه جدید و استفاده از gpg-id برای رمزنگاری. می‌توان چندین شناسه gpg را مشخص کرد تا هر گذرواژه با چندین شناسه رمزگذاری شود. این دستور باید ابتدا و پیش از استفاده از مخزن گذرواژه اجرا گردد. اگر gpg-id مشخص‌شده با کلید استفاده‌شده در فایل‌های موجود متفاوت باشد، آن فایل‌ها مجدداً با شناسه جدید رمزگذاری خواهند شد. توجه داشته باشید که استفاده از gpg-agent(1) توصیه می‌شود تا رمزگشایی دسته‌ای نیازمند مداخله مکرر کاربر نباشد. اگر --path یا -p همراه با یک آرگومان مشخص شود، یک شناسه یا مجموعه‌ای از شناسه‌های gpg برای آن زیرپوشه خاص از مخزن گذرواژه تعیین می‌گردد. اگر تنها یک gpg-id داده شود و آن یک رشته خالی باشد، فایل .gpg-id فعلی برای آن زیرپوشه (یا ریشه مخزن در صورت عدم تعیین) حذف خواهد شد.
فهرست کردن نام گذرواژه‌های موجود در ساختار درختی در subfolder با استفاده از ابزار tree(1). این دستور با نام جایگزین list نیز شناخته می‌شود.
جستجو در درون هر فایل گذرواژه رمزگشایی‌شده برای یافتن search-string، و نمایش خط شامل رشته منطبق‌شده به همراه نام فایل. برای تطابق از grep(1) استفاده می‌کند. گزینه‌های GREPOPTIONS عیناً به grep(1) فرستاده می‌شوند. (توجه: متغیر محیطی GREP_OPTIONS نیز پشتیبانی می‌شود).
فهرست کردن نام گذرواژه‌هایی در ساختار درختی که با pass-names تطابق دارند با استفاده از برنامه tree(1). این دستور با نام جایگزین search نیز شناخته می‌شود.
رمزگشایی و چاپ گذرواژه با نام pass-name. اگر --clip یا -c مشخص شود، گذرواژه چاپ نمی‌شود بلکه خط اول (یا خط مشخص‌شده) با استفاده از xclip(1) یا wl-clipboard(1) در کلیپ‌بورد کپی می‌شود و پس از ۴۵ ثانیه (یا مقدار PASSWORD_STORE_CLIP_TIME) کلیپ‌بورد بازنشانی می‌گردد. اگر --qrcode یا -q مشخص شود، گذرواژه چاپ نمی‌شود بلکه یک کد QR با استفاده از qrencode(1) در ترمینال یا به شکل گرافیکی (در صورت پشتیبانی) نمایش داده خواهد شد.
درج یک گذرواژه جدید با نام pass-name در مخزن گذرواژه. این کار گذرواژه جدید را از stdin می‌خواند. اگر --echo یا -e مشخص نشده باشد، اکوی صفحه‌کلید هنگام ورود گذرواژه غیرفعال شده و برای تایید دو بار پرسیده می‌شود. اگر --multiline یا -m مشخص شود، خطوط تا رسیدن به انتهای فایل (EOF) یا فشردن کلیدهای Ctrl+D خوانده می‌شوند. در غیر این صورت تنها یک خط از stdin خوانده می‌شود. پیش از بازنویسی روی گذرواژه موجود تاییدیه خواسته می‌شود، مگر آنکه --force یا -f مشخص شده باشد. این دستور با نام جایگزین add نیز در دسترس است.
درج گذرواژه جدید یا ویرایش گذرواژه موجود با استفاده از ویرایشگر متنی پیش‌فرض که در متغیر محیطی EDITOR تعیین شده یا ویرایشگر vi(1) به عنوان جایگزین پیش‌فرض. این حالت از فایل‌های موقت برای ویرایش بهره می‌برد، اما تضمین می‌کند که فایل‌های موقت در /dev/shm ایجاد شوند تا از نوشتن روی سکتورهای دیسک که پاک‌سازی آن‌ها دشوار است جلوگیری گردد. اگر /dev/shm در دسترس نباشد، از مسیر معمول TMPDIR استفاده شده و هشداری چاپ می‌شود.
تولید گذرواژه تصادفی جدید با استفاده از /dev/urandom به طول pass-length (یا طول پیش‌فرض PASSWORD_STORE_GENERATED_LENGTH در صورت عدم تعیین) و درج آن در pass-name. اگر --no-symbols یا -n داده شود، از هیچ نویسه غیر الفبایی-عددی در گذرواژه تولیدی استفاده نمی‌شود. مجموعه نویسه‌های استفاده‌شده در تولید گذرواژه را می‌توان با متغیرهای محیطی PASSWORD_STORE_CHARACTER_SET و PASSWORD_STORE_CHARACTER_SET_NO_SYMBOLS تغییر داد. اگر --clip یا -c مشخص شود، گذرواژه چاپ نشده بلکه به کمک xclip(1) یا wl-clipboard(1) در کلیپ‌بورد کپی می‌شود و پس از ۴۵ ثانیه (یا به میزان PASSWORD_STORE_CLIP_TIME) بازنشانی می‌گردد. اگر --qrcode یا -q مشخص شود، کد QR به کمک qrencode(1) نمایش داده می‌شود. پیش از بازنویسی روی گذرواژه موجود سوال پرسیده می‌شود، مگر اینکه --force یا -f داده شده باشد. اگر --in-place یا -i داده شود، بدون پرسش تعاملی، تنها خط اول فایل با گذرواژه تولیدی جدید جایگزین شده و باقی خطوط فایل دست‌نخورده باقی می‌مانند.
حذف گذرواژه با نام pass-name از مخزن گذرواژه. این دستور با نام‌های جایگزین remove یا delete نیز در دسترس است. اگر --recursive یا -r داده شود، چنانچه pass-name یک پوشه باشد به صورت بازگشتی حذف می‌شود. اگر --force یا -f داده شود، بدون درخواست تایید تعاملی عملیات حذف انجام می‌پذیرد.
تغییر نام گذرواژه یا دایرکتوری از old-path به new-path. این دستور با نام جایگزین rename نیز شناخته می‌شود. اگر --force مشخص شود، در صورت وجود new-path روی آن بازنویسی می‌شود. اگر انتهای new-path به یک اسلش / ختم شود، همواره به عنوان دایرکتوری در نظر گرفته خواهد شد. گذرواژه‌ها متناسب با کلیدهای مقصد جدیدشان مجدداً رمزگذاری می‌شوند.
کپی کردن گذرواژه یا دایرکتوری از old-path به new-path. این دستور با نام جایگزین copy نیز شناخته می‌شود. اگر --force مشخص شود، در صورت وجود new-path روی آن بازنویسی می‌شود. اگر انتهای new-path به یک اسلش / ختم شود، همواره به عنوان دایرکتوری در نظر گرفته خواهد شد. گذرواژه‌ها متناسب با کلیدهای مقصد جدیدشان مجدداً رمزگذاری می‌شوند.
اگر مخزن گذرواژه یک مخزن گیت باشد، آرگومان‌های git-command-args را به عنوان دستورات git(1) در مخزن گذرواژه اجرا می‌کند. اگر دستور داده‌شده init باشد، علاوه بر مقداردهی اولیه مخزن گیت، محتوای جاری مخزن گذرواژه را در قالب یک commit اولیه به مخزن اضافه می‌نماید. اگر کلید تنظیمات گیت pass.signcommits به true تنظیم شده باشد، تمام commitها با استفاده از user.signingkey یا کلید پیش‌فرض امضای گیت امضا می‌شوند. این تنظیم را می‌توان با دستور زیر فعال نمود: `pass git config --bool --add pass.signcommits true`
نمایش پیام راهنما و نحوه استفاده.
نمایش اطلاعات نسخه.

مقداردهی اولیه مخزن گذرواژه
zx2c4@laptop ~ $ pass init Jason@zx2c4.com
mkdir: created directory ‘/home/zx2c4/.password-store’
Password store initialized for Jason@zx2c4.com.
فهرست کردن گذرواژه‌های موجود در مخزن
zx2c4@laptop ~ $ pass
Password Store
├── Business
│ ├── some-silly-business-site.com
│ └── another-business-site.net
├── Email
│ ├── donenfeld.com
│ └── zx2c4.com
└── France
├── bank
├── freebox
└── mobilephone

همچنین می‌توان از "pass ls" استفاده نمود.

یافتن گذرواژه‌های منطبق بر com. در مخزن
zx2c4@laptop ~ $ pass find .com
Search Terms: .com
├── Business
│ ├── some-silly-business-site.com
└── Email
├── donenfeld.com
└── zx2c4.com

همچنین می‌توان از "pass search .com" استفاده نمود.

نمایش گذرواژه موجود
zx2c4@laptop ~ $ pass Email/zx2c4.com
sup3rh4x3rizmynam3
کپی کردن گذرواژه در کلیپ‌بورد
zx2c4@laptop ~ $ pass -c Email/zx2c4.com
Copied Email/jason@zx2c4.com to clipboard. Will clear in 45 seconds.
افزودن گذرواژه به مخزن
zx2c4@laptop ~ $ pass insert Business/cheese-whiz-factory
Enter password for Business/cheese-whiz-factory: omg so much cheese what am i gonna do
افزودن گذرواژه چندخطی به مخزن
zx2c4@laptop ~ $ pass insert -m Business/cheese-whiz-factory
Enter contents of Business/cheese-whiz-factory and press Ctrl+D when finished:

Hey this is my
awesome
multi
line
passworrrrrrrrd.
^D

تولید گذرواژه جدید
zx2c4@laptop ~ $ pass generate Email/jasondonenfeld.com 15
The generated password to Email/jasondonenfeld.com is:
$(-QF&Q=IN2nFBx
تولید گذرواژه الفبایی-عددی جدید
zx2c4@laptop ~ $ pass generate -n Email/jasondonenfeld.com 12
The generated password to Email/jasondonenfeld.com is:
YqFsMkBeO6di
تولید گذرواژه جدید و کپی آن در کلیپ‌بورد
zx2c4@laptop ~ $ pass generate -c Email/jasondonenfeld.com 19
Copied Email/jasondonenfeld.com to clipboard. Will clear in 45 seconds.
حذف گذرواژه از مخزن
zx2c4@laptop ~ $ pass remove Business/cheese-whiz-factory
rm: remove regular file ‘/home/zx2c4/.password-store/Business/cheese-whiz-factory.gpg’? y
removed ‘/home/zx2c4/.password-store/Business/cheese-whiz-factory.gpg’

در اینجا، یک مخزن گذرواژه جدید را مقداردهی اولیه کرده، یک مخزن گیت ایجاد می‌کنیم و سپس به مدیریت و همگام‌سازی گذرواژه‌ها می‌پردازیم. به آرگومان‌های فراخوانی اول دستور pass git push توجه نمایید؛ برای اطلاعات بیشتر به git-push(1) مراجعه کنید.

zx2c4@laptop ~ $ pass init Jason@zx2c4.com
mkdir: created directory ‘/home/zx2c4/.password-store’
Password store initialized for Jason@zx2c4.com.

zx2c4@laptop ~ $ pass git init
Initialized empty Git repository in /home/zx2c4/.password-store/.git/
[master (root-commit) 998c8fd] Added current contents of password store.
1 file changed, 1 insertion(+)
create mode 100644 .gpg-id

zx2c4@laptop ~ $ pass git remote add origin kexec.com:pass-store

zx2c4@laptop ~ $ pass generate Amazon/amazonemail@email.com 21
mkdir: created directory ‘/home/zx2c4/.password-store/Amazon’
[master 30fdc1e] Added generated password for Amazon/amazonemail@email.com to store.
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 Amazon/amazonemail@email.com.gpg
The generated password to Amazon/amazonemail@email.com is:
<5m,_BrZY`antNDxKN<0A

zx2c4@laptop ~ $ pass git push -u --all
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 921 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
To kexec.com:pass-store
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

zx2c4@laptop ~ $ pass insert Amazon/otheraccount@email.com
Enter password for Amazon/otheraccount@email.com: som3r3a11yb1gp4ssw0rd!!88**
[master b9b6746] Added given password for Amazon/otheraccount@email.com to store.
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 Amazon/otheraccount@email.com.gpg

zx2c4@laptop ~ $ pass rm Amazon/amazonemail@email.com
rm: remove regular file ‘/home/zx2c4/.password-store/Amazon/amazonemail@email.com.gpg’? y
removed ‘/home/zx2c4/.password-store/Amazon/amazonemail@email.com.gpg’
rm 'Amazon/amazonemail@email.com.gpg'
[master 288b379] Removed Amazon/amazonemail@email.com from store.
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 Amazon/amazonemail@email.com.gpg

zx2c4@laptop ~ $ pass git push
Counting objects: 9, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 1.25 KiB, done.
Total 7 (delta 0), reused 0 (delta 0)
To kexec.com:pass-store

~/.password-store
دایرکتوری پیش‌فرض برای ذخیره‌سازی گذرواژه‌ها.
~/.password-store/.gpg-id
شامل شناسه کلید gpg پیش‌فرض مورد استفاده برای رمزنگاری و رمزگشایی. چندین کلید gpg را می‌توان در این فایل به صورت خط به خط درج کرد. اگر این فایل در هر یک از زیرپوشه‌ها وجود داشته باشد، گذرواژه‌های درون آن زیرپوشه با آن کلیدها رمزنگاری می‌شوند. این فایل باید با استفاده از دستور init تنظیم شود.
~/.password-store/.extensions
دایرکتوری شامل فایل‌های افزونه.

دایرکتوری پیش‌فرض ذخیره‌سازی گذرواژه‌ها را بازنویسی می‌کند.
شناسه پیش‌فرض کلید gpg تنظیم‌شده توسط init را بازنویسی می‌کند. کلیدها نباید شامل فاصله باشند؛ از این رو استفاده از اثر انگشت هگزادسیمال کلید توصیه می‌شود. چندین کلید را می‌توان با فاصله از یکدیگر مشخص کرد.
گزینه‌های اضافی که به تمام فراخوانی‌های GPG ارسال می‌شوند.
انتخاب ارسالی به xclip را بازنویسی می‌کند، که به طور پیش‌فرض clipboard است. برای اطلاعات بیشتر به xclip(1) مراجعه فرمایید.
تعداد ثانیه‌های انتظار پیش از بازنشانی و پاک‌کردن کلیپ‌بورد را مشخص می‌کند، که به طور پیش‌فرض 45 ثانیه است.
مقدار umask تمام فایل‌های تغییریافته توسط pass را تنظیم می‌کند، که به طور پیش‌فرض 077 است.
طول پیش‌فرض گذرواژه در صورتی که پارامتر pass-length در دستور generate مشخص نشده باشد.
مجموعه نویسه‌های مورد استفاده در تولید گذرواژه برای دستور generate. این مقدار توسط دستور tr تفسیر می‌شود. برای اطلاعات بیشتر به tr(1) مراجعه نمایید.
مجموعه نویسه‌های مورد استفاده در تولید گذرواژه بدون نماد برای دستور generate هنگامی که گزینه --no-symbols یا -n مشخص شده باشد. این مقدار توسط tr(1) تفسیر می‌شود.
برای فعال‌سازی افزونه‌ها، این متغیر محیطی باید به "true" تنظیم شود.
مسیری که فایل‌های اجرایی افزونه‌ها در آن جستجو می‌شوند؛ به صورت پیش‌فرض PASSWORD_STORE_DIR/.extensions است.
اگر این متغیر محیطی تنظیم شده باشد، تمام فایل‌های .gpg-id و فایل‌های افزونه غیرسیستمی باید با یک امضای جداگانه (detached signature) با استفاده از کلید GPG مشخص‌شده توسط اثر انگشت ۴۰ کاراکتری و حروف بزرگ در این متغیر امضا شوند. اگر چندین اثر انگشت با فاصله مشخص شده باشد، امضا باید حداقل با یکی از آن‌ها تطابق داشته باشد. دستور init امضاهای فایل‌های .gpg-id را به‌روز نگه خواهد داشت.
مسیر ویرایشگر متن مورد استفاده توسط edit.

gpg2(1), tr(1), git(1), xclip(1), wl-clipboard(1), qrencode(1).

ابزار pass توسط Jason A. Donenfeld نوشته شده است. برای دریافت به‌روزرسانی‌ها و اطلاعات تکمیلی، صفحه پروژه در وب جهانی در نشانی زیر موجود است: World Wide Web.

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید طبق شرایط مجوز عمومی همگانی گنو (GNU GPL) که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است (یا نسخه ۲ این مجوز یا به انتخاب خود هر نسخه بعدی)، آن را بازتوزیع نموده یا تغییر دهید.

این برنامه به این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی ضمانت ضمنی قابلیت فروش یا مناسب بودن برای یک مقصود معین. برای جزئیات بیشتر به مجوز عمومی همگانی گنو مراجعه کنید.

شما باید یک نسخه از مجوز عمومی همگانی گنو را همراه با این برنامه دریافت کرده باشید؛ در غیر این صورت به نشانی زیر بنویسید: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

2014 March 18 ZX2C4