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 ไม่เสียหาย ก็จะทำได้สำเร็จครับ

2 comments for “Recovering Files From ecryptfs Encrypted Home

  1. สายลมแสงแดด
    April 10, 2013 at 11:28 pm

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

  2. วิบูลย์ วราสิทธิชัย
    April 10, 2013 at 11:31 pm

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

Leave a Reply