ابزار eCryptfs، یک سیستم رمزنگاری سازگار با سیستم عامل POSIX برای لینوکس است. در این مقاله، آموزش‌هایی پیرامون اینکه این ابزار چیست و چگونه عمل می‌کند، ارائه شده است.

 

eCryptfs، مانند dm-crypt یک زیر سیستم رمزگذاری full disk در سطح هسته نیست. در مکانیزم رمزگذاری full disk، کل پارتیشن یا دیسک که سیستم فایل در آن قرار دارد، رمزگذاری می‌شود. اما eCryptfs یک سیستم رمزنگاری است که می‌تواند بر روی هر دایرکتوری و در بالای سیستم فایل اصلی قرار بگیرد.

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

 

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

 

eCryptfs، به خوبی بر روی سیستم فایل‌های محلی مانند EXT3 ،EXT4 ،XFS ،JFS ،ReiserFS و ... کار می‌کند. علاوه‌براین، از سیستم فایل‌های شبکه مانند NFS ،CIFS ،Samba و WebDAV پشتیبانی می‌نماید. اما با این حال، کاملاً کاربردی نیست؛ زیرا بر روی سیستم فایل‌های محلی کار می‌کند.

eCryptfs، داده‌های رمزنگاری را در سرآیند فایل‌ها ذخیره می‌نماید؛ بنابراین داده‌های رمز شده به راحتی می‌توانند، بین کاربران مختلف و حتی سیستم‌ها جابجا شوند. eCryptfs، از نسخه 2.6.19 به بعد در هسته لینوکس گنجانده شده است.

سیستم eCryptfs از Erez Zadok Cryptfs و چارچوب FiST برای سیستم فایل‌های انباشته مشتق شده است. این ابزار، در اصل توسط Michael Halcrow و مرکز فناوری IBM Linux ایجاد شده است و اکنون توسط Dustin Kirkland و Tyler Hicks از شرکت والد اوبونتو یعنی Canonical نگهداری می‌شود.

 

نصب eCryptfs در لینوکس

eCryptfs، برای بسیاری از سیستم عامل‌های لینوکس ارائه شده است و در مخازن پیش فرض موجود است.

برای نصب eCryptfs در Arch Linux و انواع آن، مانند Manjaro Linux کافیست دستور زیر را اجرا کنید:

$ sudo pacman -S ecryptfs-utils

در Debian ،Ubuntu و Linux Mint از دستور زیر استفاده نمایید:

$ sudo apt-get install ecryptfs-utils

در Fedora دستور زیر را وارد کنید:

$ sudo dnf install ecryptfs-utils

در openSUSE از دستور زیر استفاده نمایید:

$ sudo zypper --install ecryptfs-utils

 

رمزگذاری دایرکتوری‌ها با eCryptfs در لینوکس

در این بخش می‌خواهیم، یک دایرکتوری با نام ostechnix رمزگذاری کنیم. دقت کنید که با این ابزار ابتدا باید یک دایرکتوری خالی را رمزگذاری کنید. در غیراین‌صورت، داده‌های موجود در آن، رمزگذاری نشده باقی می‌مانند، یا داده‌ها غیر قابل دسترسی خواهند بود. بنابراین اگر دایرکتوری مورد نظر شامل داده است، آن‌ها را به مکان دیگری منتقل کرده و سپس دایرکتوری را رمزگذاری نمایید. پس از رمزگذاری دایرکتوری، نسخه پشتیبان را به دایرکتوری رمزگذاری شده منتقل کنید.

برای رمزگذاری دایرکتوری ostechnix با سیستم فایل ecryptfs، دستور زیر را به عنوان کاربر sudo یا root اجرا نمایید:

$ sudo mount -t ecryptfs ~/ostechnix/ ~/ostechnix/

 

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

[sudo] password for sk: 
Passphrase: <----- Enter your passphrase
Select cipher: 
 1) aes: blocksize = 16; min keysize = 16; max keysize = 32
 2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
 3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
 4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
 5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
 6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
Selection [aes]: <----- Press ENTER
Select key bytes: 
 1) 16
 2) 32
 3) 24
Selection [16]: <----- Press ENTER
Enable plaintext passthrough (y/n) [n]: <----- Press ENTER
Enable filename encryption (y/n) [n]: <----- Press ENTER
Attempting to mount with the following options:
  ecryptfs_unlink_sigs
  ecryptfs_key_bytes=16
  ecryptfs_cipher=aes
  ecryptfs_sig=8567ee2ae5880f2d
WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],
it looks like you have never mounted with this key 
before. This could mean that you have typed your 
passphrase wrong.

Would you like to proceed with the mount (yes/no)? : yes <----- Type "yes" and press ENTER
Would you like to append sig [8567ee2ae5880f2d] to
[/root/.ecryptfs/sig-cache.txt] 
in order to avoid this warning in the future (yes/no)? : yes <----- Type "yes" and press ENTER
Successfully appended new sig to user sig cache file
Mounted eCryptfs

در این مرحله، دایرکتوری ostechnix با eCryptf رمزگذاری شده و به طور خودکار mount می‌شود.

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

یک فایل امضا به نام sig-cache.txt در دایرکتوری /root/.ecryptfs/ ایجاد می‌شود. این فایل، برای شناسایی پسورد mount در حلقه کلید هسته استفاده می‌شود.

اکنون که ابزار مدیریت فایل خود را باز نمایید، مشاهده خواهید کرد که دایرکتوری رمز شده، mount شده است.

همچنین با استفاده از دستور Mount نیز می‌توانید، از طریق خط فرمان متوجه شوید که دایرکتوری رمز شده mount شده است یا خیر.

$ mount

در انتهای خروجی این دستور، خط زیر را مشاهده خواهید کرد:

/home/sk/ostechnix on /home/sk/ostechnix type ecryptfs (rw,relatime,ecryptfs_sig=8567ee2ae5880f2d,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)

اکنون می‌توانید، همه فایل‌ها و پوشه‌های مهم خود را به داخل دایرکتوری رمز شده منتقل نمایید. تا زمانی که این دایرکتوری با این ابزار mount شده باشد، شما می‌توانید داده‌های ذخیره شده در این دایرکتوری را بخوانید و بنویسید. پس از unmount شدن دایرکتوری، اگرچه باز هم می‌توانید آنچه را که در دایرکتوری ذخیره شده است، مشاهده کنید؛ اما نمی‌توانید آن‌ها را بخوانید.

 

Mount و Unmount کردن دایرکتوری‌های رمزگذاری شده

برای unmount کردن دایرکتوری eCryptfs کافیست دستور زیر را اجرا کنید:

$ sudo umount ~/ostechnix

سپس برای اینکه مجدداً آن را mount نمایید، دستور زیر را اجرا کنید:

$ sudo mount -t ecryptfs ~/ostechnix/ ~/ostechnix/

اکنون، پسورد mount را وارد کرده و سپس سیستم رمزنگاری و بایت‌های کلید را انتخاب نمایید. توجه داشته باشید که باید همان مقادیری را وارد کنید که هنگام ایجاد دایرکتوری رمزگذاری شده، وارد نمودید.

Passphrase: 
Select cipher: 
 1) aes: blocksize = 16; min keysize = 16; max keysize = 32
 2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
 3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
 4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
 5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
 6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
Selection [aes]: 
Select key bytes: 
 1) 16
 2) 32
 3) 24
Selection [16]: 
Enable plaintext passthrough (y/n) [n]: 
Enable filename encryption (y/n) [n]: 
Attempting to mount with the following options:
  ecryptfs_unlink_sigs
  ecryptfs_key_bytes=16
  ecryptfs_cipher=aes
  ecryptfs_sig=8567ee2ae5880f2d
Mounted eCryptfs

اکنون دایرکتوری رمزگذاری شده مجدداً mount می‌شود.

 

تست کردن دایرکتوری رمز شده

یک فایل متنی جدید با نام encrypt.txt در دایرکتوری رمزگذاری شده ایجاد نمایید:

$ nano ~/ostechnix/encrypt.txt

اطلاعاتی را به آن اضافه کنید. به عنوان مثال در اینجا، خط زیر را اضافه می‌نماییم:

This is an encrypted file saved in ostechnix.com.

تغییرات را ذخیره کرده و فایل را ببندید.

و سپس دایرکتوری رمزگذاری شده را unmount کنید:

$ sudo umount ~/ostechnix

 

اکنون سعی کنید، فایل را با استفاده از ویرایشگرهای متن یا با استفاده از دستور cat مشاهده نمایید:

$ cat ~/ostechnix/encrypt.txt

در این صورت، کاراکترهای بدون معنی و عجیب و غریب مشاهده خواهید کرد.

برای مشاهده محتوای واقعی فایل باید مجدداً دایرکتوری را mount کنید.

$ sudo mount -t ecryptfs ~/ostechnix/ ~/ostechnix/

اکنون می‌توانید، محتوای واقعی فایل ذخیره شده در دایرکتوری رمزگذاری شده را مشاهده نمایید.

تغییر رمز عبور mount

اگر می‌خواهید رمز عبور mount را تغییر دهید، فایل /root/.ecryptfs/sig-cache.txt را حذف کنید. این فایل، زمانی که برای اولین بار دایرکتوری را رمزگذاری می‌کنید، ایجاد می‌شود و برای شناسایی پسورد mount در حلقه کلید هسته استفاده می‌گردد.

$ sudo rm /root/.ecryptfs/sig-cache.txt

اکنون، همان دستوری را اجرا نمایید که برای ایجاد یک پسورد جدید به‌منظور رمزگذاری دایرکتوری استفاده می‌کنید:

$ sudo mount -t ecryptfs ~/ostechnix/ ~/ostechnix/

 

Mount کردن خودکار دایرکتوری رمز شده هنگام ریبوت

ممکن است، شما دوست نداشته باشید که در هر راه اندازی مجدد سیستم، دایرکتوری رمزگذاری شده را به صورت دستی mount کنید. بدین منظور، یک روش آسان برای mount کردن خودکار پوشه رمزگذاری شده وجود دارد که در آن، برای ذخیره امضا و مسیر فایل پسورد، به یک درایو USB نیاز است.

درایو USB خود را به سیستم متصل نمایید. مطابق شکل زیر، یک نقطه mount ایجاد کرده و درایو USB را در نقطه mount قرار دهید:

$ sudo mkdir /mnt/usb
$ sudo mount /dev/sdb1 /mnt/usb/

در اینجا، /dev/sdb1 درایو USB است.

 

سپس به جزئیات فایل امضا نیاز دارید. فایل متنی /root/.ecryptfs/sig-cache.txt ایجاده شده در اولین مرتبه رمزگذاری دایرکتوری را باز کرده و امضا را مشاهده نمایید:

$ sudo cat /root/.ecryptfs/sig-cache.txt

خروجی این دستور به صورت زیر خواهد بود:

8567ee2ae5880f2d

برای ذخیره پسورد mount، یک فایل متنی جدید با نام password.txt در آن دایرکتوری که USB را قرار دادید، ایجاد کنید.

$ sudo nano /mnt/usb/password.txt

پسورد خود را در این فایل وارد نمایید. به عنوان مثال در اینجا، از پسورد زیر استفاده شده است:

P@ssw0rd123#@!

تغییرات را ذخیره کرده و فایل را ببندید.

 

به منظور ذخیره تمام گزینه‌های مورد نیاز برای mount کردن پوشه رمزگذاری شده، فایلی به نام /root/.ecryptfsrc ایجاد کنید:

$ sudo nano /root/.ecryptfsrc

خطوط زیر را در آن اضافه نمایید:

key=passphrase:passphrase_passwd_file=/mnt/usb/password.txt
ecryptfs_sig=8567ee2ae5880f2d
ecryptfs_cipher=aes
ecryptfs_key_bytes=16
ecryptfs_passthrough=n
ecryptfs_enable_filename_crypto=n

توجه داشته باشید که باید همان مقادیری را بدهید که هنگام ایجاد دایرکتوری رمزگذاری شده، ارائه نموده‌اید. تغییرات را ذخیره کرده و فایل را ببندید.

سپس /etc/fstab را باز کرده و خطوط زیر را اضافه نمایید:

/dev/sdb1       /mnt/usb        ext3    ro      0 0
/home/sk/ostechnix /home/sk/ostechnix ecryptfs defaults 0 0

درایو USB باید قبل از پارتیشن رمزگذاری شده، mount شود؛ زیرا شامل پسورد مربوط به mount کردن دایرکتوری رمزگذاری شده است. بنابراین، باید خط usb را قبل از خط دایرکتوری رمزگذاری شده در فایل /etc/fstab قرار دهید.

در آخر، سیستم خود را مجدداً راه‌اندازی کنید. از این پس، home/sk/ostechnix/ باید به صورت خودکار هنگام راه‌اندازی سیستم mount شود.

 

 

منبع:

ostechnix