19.16. Дискний хуваалтуудыг шифрлэх нь

Хувь нэмэр болгон оруулсан Лаки Грийн.

FreeBSD нь өгөгдөлд зөвшөөрөгдөөгүй хандах хандалтын эсрэг маш сайн шууд хамгаалалтуудыг санал болгодог. Файлын зөвшөөрлүүд болон Mandatory Access Control (MAC) буюу Албадмал Хандалт Хяналт (Бүлэг 17-г үзнэ үү) нь компьютер ассан, үйлдлийн систем идэвхтэй байх үед зөвшөөрөлгүй гуравдагч нөхдүүдийг өгөгдөлд хандахаас хамгаалахад тусалдаг. Гэхдээ хэрэв халдагч компьютерт физик хандалт олж аван компьютерийн хатуу хөтчийг өөр систем уруу зөөн эмзэг өгөгдлийг хуулж шинжилгээ хийж чадах бол үйлдлийн системийн мөрдүүлдэг зөвшөөрлүүд нь хамааралгүй болох юм.

Халдагч хэрхэн хатуу диск эсвэл унтраасан компьютерийг эзэмшсэнээс үл хамаарч FreeBSD дээрх GEOM Based Disk Encryption (gbde) буюу GEOM дээр тулгуурласан дискний шифрлэлт болон geli криптограф дэд системүүд нь компьютерийн файлын системүүд дээрх өгөгдлийг бүр чухал эх үүсвэрүүд бүхий, зорилгодоо хүрэхээр ихээхэн чармайсан халдагчдаас хамгаалж чадах юм. Зөвхөн тухайн файл бүрийг шифрлэдэг ярвигтай шифрлэлтийн аргуудаас ялгаатай нь gbde болон geli нь бүх файлын системүүдийг харагдаж мэдэгдэхгүйгээр шифрлэдэг. Хатуу дискний хавтгайд цэвэр текст хэзээ ч бичигддэггүй.

19.16.1. gbde-ээр диск шифрлэх

  1. root болно

    gbde-г тохируулахад супер хэрэглэгчийн эрхүүдийг шаарддаг.

    % su -
    Password:
    
  2. Цөмийн тохиргооны файлдаа gbde(4) дэмжлэгийг нэмнэ

    Дараах мөрийг цөмийн тохиргооны файлдаа нэмнэ:

    options GEOM_BDE

    Цөмөө Бүлэг 9-д тайлбарласны дагуу дахин бүтээнэ.

    Шинэ цөм уруугаа дахин ачаална.

  3. Цөмийг дахин бүтээхээс өөр нэг арга нь kldload ашиглаж gbde(4)-г ачаалах явдал юм:

    # kldload geom_bde
    

19.16.1.1. Шифрлэгдсэн хатуу хөтчүүдийг бэлдэх нь

Дараах жишээ нь таныг өөрийн систем уруу шинэ хатуу хөтөч нэмж ганц шифрлэгдсэн хуваалтыг агуулна гэж тооцдог. Энэ хуваалт нь /private гэж холбогдох болно. gbde нь /home болон /var/mail-г бас шифрлэхэд ашиглагддаг боловч энэ нь энэ танилцуулгын хүрээнээс хальж илүү төвөгтэй заавруудыг шаарддаг.

  1. Шинэ хатуу хөтчийг нэмнэ

    Шинэ хөтчийг систем уруу Хэсэг 19.3-д тайлбарласны дагуу нэмнэ. Энэ жишээн дээр шинэ хатуу хөтчийн хуваалт /dev/ad4s1c гэж нэмэгдсэн байгаа. /dev/ad0s1* төхөөрөмжүүд нь жишээ систем дээр байгаа стандарт FreeBSD хуваалтуудыг харуулж байна.

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4
    
  2. gbde цоож файлуудыг агуулах санг үүсгэнэ

    # mkdir /etc/gbde
    

    gbde цоож файл нь шифрлэгдсэн хуваалтуудад хандахад gbde-д шаардагдах мэдээллийг агуулдаг. Цоож файлд хандах боломжгүй бол gbde нь шифрлэгдсэн хуваалтын агуулсан өгөгдлийг хөндлөнгийн их хүч шаардсан оролцоогүйгээр буцааж тайлж чадахгүй юм. Үүнийг програм хангамж дэмждэггүй. Шифрлэгдсэн хуваалт бүр тусдаа цоож файл ашигладаг.

  3. gbde хуваалтыг эхлүүлнэ

    gbde хуваалт ашиглагдаж эхлэхээсээ өмнө эхэлж тохируулагдсан байх шаардлагатай. Энэ эхний тохируулга нь зөвхөн нэг удаа хийгдэх ёстой:

    # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock
    

    gbde(8) нь загварт төрөл бүрийн тохиргооны сонголтуудыг зааж өгөх боломжийг танд өгч таны засварлагчийг онгойлгох болно. UFS1 эсвэл UFS2-той ашиглахын тулд sector_size-г 2048 гэж заана:

    # $FreeBSD: src/sbin/gbde/template.txt,v 1.1.36.1 2009/08/03 08:13:06 kensmith Exp $
    #
    # Sector size is the smallest unit of data which can be read or written.
    # Making it too small decreases performance and decreases available space.
    # Making it too large may prevent filesystems from working.  512 is the
    # minimum and always safe.  For UFS, use the fragment size
    #
    sector_size     =       2048
    [...]
    

    gbde(8) нь өгөгдлийг аюулгүй болгоход хэрэглэгдэх ёстой нэвтрэх үгийг хоёр удаа бичихийг танаас хүснэ. Нэвтрэх үг нь хоёуланд нь адил байх ёстой. gbde-ийн таны өгөгдлийг хамгаалах чадвар таны сонгосон нэвтрэх үгийн чанараас бүхэлдээ хамаарна. [1]

    gbde init тушаал нь таны gbde хуваалтад зориулж цоож файлыг үүсгэх бөгөөд энэ жишээн дээр /etc/gbde/ad4s1c.lock гэж хадгалагдсан байна. gbde цоож файлууд нь /etc/rc.d/gbde эхлүүлэх скриптээр зөв танигдахын тулд “.lock” гэж төгсөх ёстой.

    Анхааруулга: gbde цоож файлууд нь шифрлэгдсэн хуваалтуудын агуулгатай цуг нөөцлөгдөх ёстой. Зөвхөн цоож файлыг устгах нь шийдсэн халдагч gbde хуваалтыг буцааж тайлахаас хамгаалж чаддаггүй бөгөөд цоож файлгүйгээр хууль ёсны эзэмшигч нь шифрлэгдсэн хуваалт дээрх өгөгдөлд gbde(8) болон түүнийг зохиогчийн ерөөсөө дэмждэггүй, их хүч шаардсан ажиллагаагүйгээр хандаж чадахгүй болох юм.

  4. Шифрлэгдсэн хуваалтыг цөмд залгана

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
    

    Шифрлэгдсэн хуваалтыг эхэлж тохируулж байх үед таны сонгосон нэвтрэх үгийг оруулахыг танаас асуух болно. Шинэ шифрлэгдсэн төхөөрөмж /dev дотор /dev/device_name.bde гэж гарч ирнэ:

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4        /dev/ad4s1c.bde
    
  5. Шифрлэгдсэн төхөөрөмж дээр файлын систем үүсгэнэ

    Шифрлэгдсэн төхөөрөмж цөмд залгагдсаны дараа та энэ төхөөрөмж дээр файлын систем үүсгэж болно. Шифрлэгдсэн төхөөрөмж дээр файлын систем үүсгэхийн тулд newfs(8)-г ашиглана. Хуучин UFS1 файлын системийг эхлүүлснээс шинэ UFS2 файлын системийг эхлүүлэх нь хамаагүй хурдан учраас newfs(8)-O2 тохируулгатай хэрэглэхийг зөвлөдөг.

    # newfs -U -O2 /dev/ad4s1c.bde
    

    Тэмдэглэл: newfs(8) тушаал нь төхөөрөмжийн нэрэндээ *.bde гэж өргөтгөлөөр танигдах залгагдсан gbde хуваалт дээр хийгдэх ёстой.

  6. Шифрлэгдсэн хуваалтыг холбоно

    Шифрлэгдсэн файлын системд зориулж холбох цэгийг үүсгэнэ.

    # mkdir /private
    

    Шифрлэгдсэн файлын системийг холбоно.

    # mount /dev/ad4s1c.bde /private
    
  7. Шифрлэгдсэн файлын систем байгаа эсэхийг шалгана

    Шифрлэгдсэн файлын систем одоо df(1)-д харагдаж ашиглахад бэлэн болох ёстой.

    % df -H
    Filesystem        Size   Used  Avail Capacity  Mounted on
    /dev/ad0s1a      1037M    72M   883M     8%    /
    /devfs            1.0K   1.0K     0B   100%    /dev
    /dev/ad0s1f       8.1G    55K   7.5G     0%    /home
    /dev/ad0s1e      1037M   1.1M   953M     0%    /tmp
    /dev/ad0s1d       6.1G   1.9G   3.7G    35%    /usr
    /dev/ad4s1c.bde   150G   4.1K   138G     0%    /private
    

19.16.1.2. Байгаа шифрлэгдсэн файлын системүүдийг холбох нь

Ачаалалт бүрийн дараа ямар ч шифрлэгдсэн файлын системүүдийг ашиглаж эхлэхээсээ өмнө цөмд дахин залгаж, алдааг нь шалгаж холбож болно. Шаардлагатай тушаалуудыг root хэрэглэгч ажиллуулах ёстой гэж үздэг.

  1. gbde хуваалтыг цөмд залгана

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
    

    Шифрлэгдсэн gbde хуваалтыг эхэлж тохируулж байх үед таны сонгосон нэвтрэх үгийг оруулахыг танаас асуух болно.

  2. Файлын систем дээр алдааг шалгана

    Шифрлэгдсэн файлын системүүд нь автоматаар холбогдохын тулд /etc/fstab файлд одоохондоо жагсаагдах боломжгүй учир файлын системүүд дээр алдаа байгаа эсэхийг шалгаж тэдгээрийг холбохоос өмнө fsck(8)-г гараар ажиллуулах ёстой.

    # fsck -p -t ffs /dev/ad4s1c.bde
    
  3. Шифрлэгдсэн файлын системийг холбоно

    # mount /dev/ad4s1c.bde /private
    

    Шифрлэгдсэн файлын систем одоо ашиглахад бэлэн боллоо.

19.16.1.2.1. Шифрлэгдсэн хуваалтуудыг автоматаар холбох нь

Шифрлэгдсэн хуваалтыг автоматаар залган шалгаж холбох скриптийг үүсгэж болох боловч аюулгүй байдлын шалтгаанаас болоод скрипт нь gbde(8) нууц үгийг агуулсан байх ёсгүй. Харин эдгээр скриптүүдийг гараар ажиллуулж нууц үгийг консол эсвэл ssh(1)-ээр оруулахыг зөвлөдөг.

Өөр нэг арга нь rc.d скрипт байдаг. Энэ скриптийн нэмэлт өгөгдлүүдийг rc.conf(5)-оор дамжуулж болно, жишээ нь:

gbde_autoattach_all="YES"
gbde_devices="ad4s1c"
gbde_lockdir="/etc/gbde"

Энэ нь gbde нэвтрэх үгийг ачаалах үед оруулахыг шаарддаг. Зөв нэвтрэх үгийг бичсэний дараа gbde шифрлэгдсэн хуваалт автоматаар холбогдох болно. Энэ нь gbde-г зөөврийн компьютер дээр хэрэглэж байгаа үед их ашигтай байдаг.

19.16.1.3. gbde-ийн ажиллуулдаг криптограф хамгаалалтууд

gbde(8) нь 128-bit AES-ийг CBC горимд ашиглан сектор ачааг шифрлэдэг. Диск дээрх сектор бүр өөр өөр AES түлхүүрээр шифрлэгддэг. Секторын түлхүүрүүд хэрэглэгчийн оруулсан нэвтрэх үгээс хэрхэн гаргагддаг зэрэг gbde-ийн криптограф дизайны талаар дэлгэрэнгүйг gbde(4)-ээс үзнэ үү.

19.16.1.4. Нийцтэй байдлын асуудлууд

sysinstall(8) нь gbde-шифрлэгдсэн төхөөрөмжүүдтэй нийцгүй байдаг. Бүх *.bde төхөөрөмжүүдийг sysinstall(8) эхлүүлэхээс өмнө цөмөөс салгасан байх ёстой бөгөөд ингэхгүй бол энэ нь төхөөрөмжүүдийг шалгаж эхлэхдээ сүйрэх болно. Бидний жишээн дээр ашиглагдсан шифрлэгдсэн төхөөрөмжийг салгахдаа дараах тушаалыг ашиглана:

# gbde detach /dev/ad4s1c

Мөн vinum(4) нь geom(4) дэд системийг ашигладаггүйг анхаараарай, та gbdevinum эзлэхүүнүүдтэй ашиглаж болохгүй.

19.16.2. geli-ээр диск шифрлэх нь

Хувь нэмэр болгон оруулсан Даниэл Гэрзо.

Шинэ криптограф GEOM ангилал geli гэж бий. Үүнийг одоогоор Pawel Jakub Dawidek хөгжүүлж байгаа болно. geli нь gbde-ээс өөр бөгөөд энэ нь өөр боломжуудыг санал болгож криптограф үйлдэлдээ өөр схемийг ашигладаг.

geli(8)-ийн хамгийн чухал боломжууд бол:

geli-ийн илүү боломжуудыг geli(8)-ийн гарын авлагын хуудаснаас олж болно.

Дараагийн алхмууд нь geli-ийн дэмжлэгийг FreeBSD цөмд хэрхэн идэвхжүүлэхийг тайлбарлах бөгөөд шинэ geli шифрлэлт үзүүлэгчийг хэрхэн үүсгэх болон ашиглах талаар өгүүлэх болно.

Цөмд өөрчлөлтүүд шаардлагатай учраас супер хэрэглэгчийн эрхүүд хэрэгтэй болно.

  1. Цөмд geli дэмжлэгийг нэмэх нь

    Дараах мөрийг цөмийн тохиргооны файлд нэмнэ:

    options GEOM_ELI
    device crypto
    

    Цөмөө Бүлэг 9-д тайлбарласны дагуу дахин бүтээнэ.

    Мөн geli модулийг ачаалах үед дуудаж болно. Дараах мөрийг /boot/loader.conf файлд нэмнэ:

    geom_eli_load="YES"
    

    geli(8) нь одоо цөмд дэмжигдсэн байх ёстой.

  2. Мастер түлхүүр үүсгэх нь

    Дараах жишээ нь түлхүүр файлыг хэрхэн үүсгэх талаар тайлбарлах бөгөөд энэ нь /private доор холбогдсон шифрлэгдсэн үзүүлэгчийн Мастер түлхүүрийн хэсэг болон ашиглагдах болно. Түлхүүр файл нь Мастер түлхүүрийг шифрлэхэд хэрэглэгдэх зарим санамсаргүй өгөгдлийг өгөх болно. Мастер түлхүүр нь нэвтрэх үгээр бас хамгаалагдах болно. Үзүүлэгчийн секторын хэмжээ 4kB том байх болно. Мөн энэ хэлэлцүүлэг нь geli үзүүлэгчийг хэрхэн залгаж түүн дээр файлын систем үүсгэх, хэрхэн түүнийг холбож ажиллах болон төгсгөлд нь хэрхэн салгах талаар тайлбарлах болно.

    Илүү сайн ажиллагааг хангахын тулд секторын том хэмжээг (4kB ч юм уу) ашиглахыг зөвлөдөг.

    Мастер түлхүүр нь нэвтрэх үгээр хамгаалагдах бөгөөд түлхүүр файлд зориулагдсан өгөгдлийн эх нь /dev/random байх болно. Бидний үзүүлэгч гэж нэрлэдэг /dev/da2.eli-ийн секторын хэмжээ 4kB байх болно.

    # dd if=/dev/random of=/root/da2.key bs=64 count=1
    # geli init -s 4096 -K /root/da2.key /dev/da2
    Enter new passphrase:
    Reenter new passphrase:
    

    Нэвтрэх үг болон түлхүүр файлыг хоёуланг нь заавал ашиглах шаардлагагүй; Мастер түлхүүрийг нууцлах аль ч аргыг тусад нь ашиглаж болно.

    Хэрэв түлхүүр файл “-” гэж өгөгдсөн бол стандарт оролтыг ашиглана. Энэ жишээ нь нэгээс олон түлхүүр файлыг хэрхэн ашиглаж болох талаар харуулж байна.

    # cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2
    
  3. Үзүүлэгчийг үүсгэсэн түлхүүрийн тусламжтай залгах нь

    # geli attach -k /root/da2.key /dev/da2
    Enter passphrase:
    

    Шинэ цэвэр текст төхөөрөмж /dev/da2.eli гэж нэрлэгдэх болно.

    # ls /dev/da2*
    /dev/da2  /dev/da2.eli
    
  4. Шинэ файлын системийг үүсгэх нь

    # dd if=/dev/random of=/dev/da2.eli bs=1m
    # newfs /dev/da2.eli
    # mount /dev/da2.eli /private
    

    Шифрлэгдсэн файлын систем df(1)-д харагдаж ашиглахад бэлэн болох ёстой:

    # df -H
    Filesystem     Size   Used  Avail Capacity  Mounted on
    /dev/ad0s1a    248M    89M   139M    38%    /
    /devfs         1.0K   1.0K     0B   100%    /dev
    /dev/ad0s1f    7.7G   2.3G   4.9G    32%    /usr
    /dev/ad0s1d    989M   1.5M   909M     0%    /tmp
    /dev/ad0s1e    3.9G   1.3G   2.3G    35%    /var
    /dev/da2.eli   150G   4.1K   138G     0%    /private
    
  5. Үзүүлэгчийг холбосныг салгаж залгасныг болиулах

    Шифрлэгдсэн хуваалт дээрх ажил хийгдэж дуусаад /private хуваалт хэрэггүй болох үед geli шифрлэгдсэн хуваалтыг холбосноо салган цөмд залгаснаа бас салгах нь зүйтэй юм.

    # umount /private
    # geli detach da2.eli
    

geli(8)-ийг хэрэглэх тухай дэлгэрэнгүй мэдээллийг гарын авлагын хуудаснаас олж болно.

19.16.2.1. geli rc.d скриптийг ашиглах нь

geli нь geli-ийн хэрэглээг хялбаршуулахад ашиглаж болох rc.d скрипттэй цуг ирдэг. gelirc.conf(5)-оор тохируулах жишээг дараахаас харж болно:

geli_devices="da2"
geli_da2_flags="-p -k /root/da2.key"

Энэ нь /dev/da2-г Мастер түлхүүр файл нь /root/da2.key-д байрлах geli үзүүлэгч гэж тохируулах бөгөөд үзүүлэгчийг залгаж байхдаа geli нь нэвтрэх үгийг ашиглахгүй (хэрэв -P сонголт geli init хийгдэх үед өгөгдсөн тохиолдолд энэ нь ашиглагдах боломжтой). Систем нь geli үзүүлэгчийг цөмөөс систем унтрахаас өмнө салгах болно.

rc.d-г тохируулах талаар дэлгэрэнгүй мэдээлэл энэхүү гарын авлагын rc.d хэсэгт байгаа болно.

Тайлбар

[1]

Амархан тогтоож болох аюулгүй нэвтрэх үгийг хэрхэн сонгох талаар зөвлөгөөнүүдийг Diceware Passphrase вэб хуудаснаас үзнэ үү.

Энэ болон бусад баримтуудыг ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ хаягаас татаж авч болно.

FreeBSD-ийн талаар <questions@FreeBSD.org> хаягтай холбоо барихаасаа өмнө баримтыг уншина уу.
Энэ бичиг баримттай холбоотой асуулт байвал <doc@FreeBSD.org> хаягаар цахим захидал явуулна уу.
Энэ бичиг баримтын орчуулгатай холбоотой асуулт байвал <admin@mnbsd.org> хаягаар цахим захидал явуулна уу.