FreeBSD гарын авлага
Өмнөх | Бүлэг 19. Хадгалалт | Дараах

# 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) дэд системийг ашигладаггүйг анхаараарай, та gbde-г vinum эзлэхүүнүүдтэй ашиглаж болохгүй.

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

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

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

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

- crypto(9) тогтолцоог ашигладаг -- криптограф тоног төхөөрөмж бэлэн болоход `geli` түүнийг автоматаар ашигладаг.

- Олон криптограф алгоритмуудыг дэмждэг (одоогоор AES, Blowfish, болон 3DES).

- root хуваалтыг шифрлэх боломжийг олгодог. Шифрлэгдсэн root хуваалтад хандахад хэрэглэгддэг нэвтрэх үгийг систем ачаалахад асуудаг.

- Бие биеэндээ хамааралгүй хоёр түлхүүрүүдийг ашиглахыг зөвшөөрдөг (өөрөөр хэлбэл “key” болон “company key”).

- `geli` нь хурдан байдаг. Энгийн сектороос сектор уруу шифрлэлтийг хийдэг.

- Мастер түлхүүрүүдийг нөөцлөх ба сэргээхийг зөвшөөрдөг. Хэрэглэгч өөрийн түлхүүрүүдийг устгах хэрэгтэй болоход нөөцөөс түлхүүрүүдийг сэргээж өгөгдөлд дахин хандах боломжтой болох юм.

- Дискийг санамсаргүй, нэг удаагийн түлхүүрээр залгахыг зөвшөөрдөг -- энэ нь swap хуваалтууд болон түр зуурын файлын системүүдэд ашигтай байдаг.

`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` скрипттэй цуг ирдэг. `geli`-г rc.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 вэб хуудаснаас үзнэ үү.

Өмнөх | Эхлэл | Дараах
Файлын системийн ноогдлууд | Дээш | Swap зайг шифрлэх

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

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