Recovering Files From ecryptfs Encrypted Home

ผมเจอปัญหาว่ามีเครื่องเสีย ผมต้องเข้าไปช่วยกู้ข้อมูลในดิสก์ที่เสีย แต่ก็พบว่า home directory ได้ทำ encrypt ไว้ในตอนติดตั้ง ubuntu 10.04 desktop ผมจึงค้นหาดูพบหลายบทความ แต่มาลงตัวที่บทความนี้ http://www.kaijanmaki.net/2009/10/26/recovering-files-from-ecryptfs-encrypted-home/ เป็นจุดเริ่มต้นให้ลองทำตามดู

ผมทำ Virtual Machine เป็น guest ใน Oracle VM VirtualBox โดยติดตั้ง ubuntu 10.04 desktop (จะลองกับ 12.04 หรืออื่นๆก็คงได้) แล้วลองสร้างไฟล์ test.txt, test2.txt จากนั้น shutdown เครื่อง guest แล้วบูตอีกทีด้วยไฟล์ ubuntu-10.04.4-desktop-i386.iso แล้วเลือก Try ubuntu

เมื่อเข้าถึงหน้ากราฟิกแล้ว คลิกเมนู places, เลือก disk ที่ต้องการ จากนั้นเปิด terminal เพื่อออกไปทำงานในโหมด command line

ใช้คำสั่ง df ดูจะเห็นว่าดิสก์ถูก mount เป็นชื่อ ดังนี้

/dev/sda1 /media/c460e698-ae7a-478e-a9fa-7ea4beb4f7c6

ให้เข้าทำงานเป็น root

ubuntu@ubuntu:~$ sudo su

ลองตรวจสอบดูว่ามีอะไรอยู่ข้างในบ้างด้วยคำสั่งข้างล่างนี้

root@ubuntu:~# ls -l /media/c460e698-ae7a-478e-a9fa-7ea4beb4f7c6/home/mama/
 total 0
 lrwxrwxrwx 1 1000 1000 56 2013-04-10 08:52 Access-Your-Private-Data.desktop -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.desktop
 lrwxrwxrwx 1 1000 1000 52 2013-04-10 08:52 README.txt -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.txt

ตรวจสอบดูว่าไฟล์ต่างๆ น่าจะซ่อนอยู่ที่ไหนก็พบว่าอยู่ที่นี่

root@ubuntu:~# ls -l /media/c460e698-ae7a-478e-a9fa-7ea4beb4f7c6/home/.ecryptfs/mama/.Private/
 total 276
 -rw-r--r-- 1 1000 1000 12288 2013-04-10 09:10 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmC1PAe3rM36mt8nRtyRWtxlE--
 drwxr-xr-x 4 1000 1000  4096 2013-04-10 09:06 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmC2Yj-dqfvpHuYFJe32oPmP---
 drwx------ 4 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmC3kM22hNF7litgpIAwtmwtU--
 drwx------ 2 1000 1000  4096 2013-04-10 09:11 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmC7W8YJQSLe20t0XJHf6xjB---
 -rw-r--r-- 1 1000 1000 12288 2013-04-10 08:52 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmC9cPIgv52y7AFWY.H1WCtTE--
 -rw------- 1 1000 1000 12288 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmC9dcmZbWv.pjpzikXKTE2xU--
 lrwxrwxrwx 1 1000 1000   104 2013-04-10 08:52 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmC9u1V-uJOrNxm7ZdoXYvX5E-- -> ECRYPTFS_FNEK_ENCRYPTED.FXaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCGOuByR46pE4zxC1IyPOC1XMuz8uG9d.Y91Nys0NXy1o-
 drwx------ 2 1000 1000  4096 2013-04-10 09:06 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCBinhrU4ijNIOXaDLIUmz6---
 drwxr-xr-x 6 1000 1000  4096 2013-04-10 09:08 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCbQymH7oV5njbGxrao6qK.E--
 drwx------ 2 1000 1000  4096 2013-04-10 09:11 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCcib.jfkdAKRfPUX3SRC3PE--
 drwx------ 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCd8fDbrGkyQn76SLx7OFbWk--
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCf9KXChgI4vRxtQINyM5f2U--
 -rw-r--r-- 1 1000 1000 12288 2013-04-10 09:08 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmC.FSa4ytf8l5gxGoCy5Z.hU--
 -rw-r--r-- 1 1000 1000 12288 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCHD.zza5bDIfbpJCBK20OEk--
 drwx------ 7 1000 1000  4096 2013-04-10 09:11 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCHMmbRJdm8bOuKAIY9l2nNE--
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCI0txn1fN.CnTaplNnnfw-E--
 -rw-r--r-- 1 1000 1000 12288 2013-04-10 09:10 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCinSVUy2qcWnG4Fkkvq3TbE--
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCJCe9LKWs69b5Gm7sz9l8bk--
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCkjHGX5Z.4t2crv-B-HErFE--
 drwx------ 3 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCkL2EHaUs.epFv6xhN2RgnE--
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCNnJ2nY9cMM4vKFU6acxrIE--
 drwx------ 3 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmC-NphMDal80t55pvvVnvyiE--
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCNYJp37Rmr3eJHZWw-yuZiE--
 -rw------- 1 1000 1000 12288 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCRIV.WMwNJ.HPDn2Qm9Is4---
 -rw------- 1 1000 1000 12288 2013-04-10 09:11 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCRqHIvRgijJ2kR4EkiHAV.U--
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCTnsCL.MmBrnuuZJB7rUqu---
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCt-qx19u1J7cqrJdDeAcGXU--
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCtrtmC.5pOzU71mXW9lsBTU--
 -rw-r--r-- 1 1000 1000 12288 2013-04-10 08:52 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCtZB8bfkkrg5Vwn12I0a36k--
 -rw-r--r-- 1 1000 1000 12288 2013-04-10 08:52 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCugEFlA5kzGzGdCrk98SRdk--
 -rw------- 1 1000 1000 12288 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCUvV.UqheVgE8ii35hI1CD---
 drwxr-xr-x 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCwkbU8zR9wlpqaW.qpSOOG---
 -rw-r--r-- 1 1000 1000 12288 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCWmtlLdW3Fscyzdv92P7ya---
 drwx------ 2 1000 1000  4096 2013-04-10 09:05 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCxb3ohG01RPLQKdGf5aGO0k--
 lrwxrwxrwx 1 1000 1000   104 2013-04-10 08:52 ECRYPTFS_FNEK_ENCRYPTED.FWaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCY20y7DesFofU3WXsupOCaU-- -> ECRYPTFS_FNEK_ENCRYPTED.FXaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCHlpTqADLNpd4HnYAdygClBA6cPCLon7WcZ6N6OFCv8g-
 -rw------- 1 1000 1000 12288 2013-04-10 09:11 ECRYPTFS_FNEK_ENCRYPTED.FXaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCpbeOQivGSuvqOu51OftghDjzC0ltpVNARnFgkWRBi-2-
 -rw------- 1 1000 1000 12288 2013-04-10 09:11 ECRYPTFS_FNEK_ENCRYPTED.FXaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCpmXGVsVsyK8V95y22w4vq88Zp17vcB8FLxmDpAeLfzM-
 -rw-r--r-- 1 1000 1000 12288 2013-04-10 08:52 ECRYPTFS_FNEK_ENCRYPTED.FXaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCpmXGVsVsyK8V95y22w4vqAzU.HY0GIf1CP9WH.239TU-
 drwx------ 2 1000 1000  4096 2013-04-10 09:09 ECRYPTFS_FNEK_ENCRYPTED.FXaiRtz3Ag4mTURWaW1nT.6mYpw-PkyvsXmCpmXGVsVsyK8V95y22w4vq-Qwp5WNWvevyfXuTlIfkN2-

เข้าสู่ขั้นตอนการกู้ข้อมูล โดยสร้างไดเรกทอรีใน /mnt ดังนี้

root@ubuntu:/home/ubuntu# cd /mnt
root@ubuntu:/mnt# mkdir oldhome
root@ubuntu:/mnt# ln -s /media/c460e698-ae7a-478e-a9fa-7ea4beb4f7c6/home/.ecryptfs/mama/.Private oldprivate

ตรวจสอบดูว่าได้ผลตามต้องการ

root@ubuntu:/mnt# ls -l /mnt
total 12
drwx------ 24 mama mama 4096 2013-04-10 16:11 oldhome
lrwxrwxrwx  1 root root   72 2013-04-10 20:51 oldprivate -> /media/c460e698-ae7a-478e-a9fa-7ea4beb4f7c6/home/.ecryptfs/mama/.Private

เราจะต้องเข้าไปสร้าง passphase จากรหัสผ่านของบัญชีผู้ใช้งาน ในที่นี่คือ username ชื่อ mama มีรหัสผ่าน 123456 โดยการเข้าไปใช้คำสั่ง ecryptfs-unwrap-passphrase กับไฟล์ wrapped-passphrase ซึ่งตามความเป็นจริง เราจะต้องรู้ passphase ยาวๆนี้อยู่แล้ว แต่ไม่รู้ก็ไม่เป็นไร

เข้าไปไดเรกทอรีเพื่อจะได้ไม่ต้องพิมพ์คำสั่งยาวๆ

root@ubuntu:/mnt# cd /media/c460e698-ae7a-478e-a9fa-7ea4beb4f7c6/home/

ใช้คำสั่งเพื่อสร้าง passphase

root@ubuntu:/media/c460e698-ae7a-478e-a9fa-7ea4beb4f7c6/home# ecryptfs-unwrap-passphrase .ecryptfs/mama/.ecryptfs/wrapped-passphrase
Passphrase: 123456

ตรงนี้ใส่รหัสผ่านของ username ที่มี home directory encrypted คือ mama มีรหัสผ่าน 123456 ไว้

ได้ผลคือได้ passphase ยาวๆ ออกมา ซึ่งจะถูกนำไปใช้ต่อไป

44dcd2be32726c9925eb2403e295aa2e

ออกจากไดเรกทอรี

root@ubuntu:/media/c460e698-ae7a-478e-a9fa-7ea4beb4f7c6/home# cd

ตอนนี้จะมีการถาม passphase อีก หากใช้วิธี copy และ paste ได้จะสะดวกกว่าคีย์ทั้งหมดทีละตัว

root@ubuntu:~# ecryptfs-add-passphrase --fnek
Passphrase: ใส่ 44dcd2be32726c9925eb2403e295aa2e ที่ได้มา

ได้ผลลัพธ์

Inserted auth tok with sig [f09d3c0aedc95c7b] into the user session keyring
Inserted auth tok with sig [ae779fc532c1b27e] into the user session keyring

เราจะใช้ค่า ae779fc532c1b27e ในขั้นตอนต่อไป

root@ubuntu:~# mount -t ecryptfs /mnt/oldprivate /mnt/oldhome
Passphrase: ใส่ 44dcd2be32726c9925eb2403e295aa2e ที่ได้มา
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
2) blowfish: blocksize = 16; min keysize = 16; max keysize = 56 (not loaded)
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 (not loaded)
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16 (not loaded)
Selection [aes]: กด Enter
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]:  กด Enter
Enable plaintext passthrough (y/n) [n]: n
Enable filename encryption (y/n) [n]: y
Filename Encryption Key (FNEK) Signature [f09d3c0aedc95c7b]: ae779fc532c1b27e ใส่ค่านี้
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_fnek_sig=ae779fc532c1b27e
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=f09d3c0aedc95c7b
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
Would you like to append sig [f09d3c0aedc95c7b] to
[/root/.ecryptfs/sig-cache.txt]
in order to avoid this warning in the future (yes/no)? : no
Not adding sig to user sig cache file; continuing with mount.
Mounted eCryptfs

หากได้บรรทัด Mounted eCryptfs ก็ไชโยได้ แต่ถ้าไม่สำเร็จจะฟ้องเป็น error ก็เพราะระบุตำแหน่ง directory ที่มีไฟล์ encrypted ไม่ถูกต้องในขั้นตอนแรกๆ ที่เป็นคำสั่ง ln -s

หากทำสำเร็จ เราลอง ใช้คำสั่งดูรายชื่อไฟล์

root@ubuntu:~# ls -l /mnt/oldhome/
total 80
drwxr-xr-x 2 mama mama 4096 2013-04-10 16:05 Desktop
drwxr-xr-x 2 mama mama 4096 2013-04-10 16:05 Documents
drwxr-xr-x 2 mama mama 4096 2013-04-10 16:05 Downloads
-rw-r--r-- 1 mama mama  179 2013-04-10 15:52 examples.desktop
drwxr-xr-x 2 mama mama 4096 2013-04-10 16:05 Music
-rw-r--r-- 1 mama mama   33 2013-04-10 16:08 mypassphase
drwxr-xr-x 2 mama mama 4096 2013-04-10 16:05 Pictures
drwxr-xr-x 2 mama mama 4096 2013-04-10 16:05 Public
drwxr-xr-x 2 mama mama 4096 2013-04-10 16:05 Templates
-rw-r--r-- 1 mama mama   16 2013-04-10 16:10 test2.txt
-rw-r--r-- 1 mama mama   15 2013-04-10 16:10 test.txt
drwxr-xr-x 2 mama mama 4096 2013-04-10 16:05 Videos

จะเห็นไฟล์ตามปกติ ซึ่งมีไฟล์ที่ผมสร้างไว้คือ test.txt และ test2.txt

ผมเคยเก็บ passphase ไว้เพื่อเปรียบเทียบ ซึ่งก็ตรงกับที่เราสร้าง passphase ในขั้นตอนด้านบนจากรหัสผ่านของ username mama

root@ubuntu:~# cat /mnt/oldhome/mypassphase
44dcd2be32726c9925eb2403e295aa2e

ถึงตอนนี้ หากเป็นการกู้ข้อมูล ก็ทำการคัดลอกไฟล์ตามสะดวก

เมื่อคัดลอกไฟล์ที่ต้องการแล้ว ก็ทำการ unmount เพื่อเลิกใช้ดิสก์นั้น

root@ubuntu:~# umount /mnt/oldhome

หวังว่าคงเป็นประโยชน์สำหรับ ใครที่บังเอิญติดตั้งแบบ encrypted home directory เอาไว้ แล้ววันหนึ่งต้องกู้ข้อมูล หรือใครจะลองทำดูก็ได้นะ

หากโชคดีไฟล์ wrapped-passphrase ไม่เสียหาย ก็จะทำได้สำเร็จครับ

Comments

2 responses to “Recovering Files From ecryptfs Encrypted Home”

  1. สายลมแสงแดด Avatar
    สายลมแสงแดด

    ถ้าเป็น user ที่เราไม่ทราบ password จะทำอย่างไรครัย

  2. วิบูลย์ วราสิทธิชัย Avatar
    วิบูลย์ วราสิทธิชัย

    ต้องทราบอยู่แล้วครับ เพราะเราเป็นคนใช้งานนี่ครับ ก็ลง ubuntu แล้วตั้ง username คนแรกไง พร้อมรหัสผ่าน ที่ใช้อยู่ประจำ ผมเข้าใจอย่างนี้นะครับ

Leave a Reply

Your email address will not be published. Required fields are marked *