FreeBSD гарын авлага
Prev | Chapter 14 Аюулгүй байдал | Next

# 14.7 KerberosIV

Хойно дурдсан хүний бичсэн дээр тулгуурлан хувь нэмэр болгон оруулсан Марк Мюррей. Хувь нэмэр болгон оруулсан Марк Дэйпоз.

Kerberos нь хэрэглэгчид өөрсдийгөө нууцлаг серверийн үйлчилгээнүүдийн тусламжтайгаар таниулан нэвтрэх боломжийг олгодог сүлжээний нэмэлт систем/протокол юм. Алсын нэвтрэлт, алсын хуулбар, нууцлаг систем хоорондох файл хуулбарлалт болон бусад аюул ихтэй үйлдлүүд зэрэг үйлчилгээнүүд харьцангуй аюулгүй хийгдэж илүү хяналт хийж болохоор болсон.

Дараах заавруудыг FreeBSD-тэй цуг түгээгддэг Kerberos-ийг хэрхэн тохируулах гарын авлага болгон хэрэглэж болох юм. Гэхдээ та бүрэн тайлбарын талаар харгалзах гарын авлагын хуудаснуудад хандаж үзэх шаардлагатай.

## 14.7.1 KerberosIV суулгах нь

Kerberos нь FreeBSD-ийн нэмэлт бүрэлдэхүүн хэсэг юм. Энэ програм хангамжийг суулгах хамгийн амархан арга нь FreeBSD эхэлж суулгах үед sysinstall-д `krb4` эсвэл `krb5` түгээлтийг сонгон суулгах явдал юм. Энэ нь Kerberos-ийн “eBones” (KerberosIV) эсвэл “Heimdal” (Kerberos5) шийдлүүдийг суулгах болно. Эдгээр нь АНУ/Канадаас гадна хөгжүүлэгдсэн учраас АНУ-ын криптограф код дээрх экспортын хязгаарлагдмал хяналтын үед бусад улсуудын системийн эзэмшигчдэд ашиглагдах боломжтой болсон юм. Иймээс эдгээр шийдлүүд нь орсон байдаг.

Үүнээс гадна Kerberos-ийн MIT шийдэл портуудын цуглуулгын `security/krb5` санд байдаг.

## 14.7.2 Эхний мэдээллийн бааз үүсгэх

Энэ нь Kerberos сервер дээр зөвхөн хийгддэг. Эхлээд хуучин Kerberos мэдээллийн баазууд байгаа эсэхийг шалгаарай. Та `/etc/kerberosIV` сан уруу орж зөвхөн дараах файлууд байгааг шалгаарай:

    # cd /etc/kerberosIV
    # ls
    README      krb.conf        krb.realms

Хэрэв аль нэг нэмэлт файлууд (`principal.*` эсвэл `master_key` зэрэг) байвал `kdb_destroy` тушаал ашиглаж хуучин Kerberos мэдээллийн баазыг устгах эсвэл хэрэв Kerberos ажиллахгүй байгаа бол ердөө л нэмэлт файлуудыг устгах хэрэгтэй.

Та одоо өөрийн Kerberos хүрээг (realm) зааж өгөхдөө `krb.conf` болон `krb.realms` файлуудыг засварлах шаардлагатай. Энэ тохиолдолд хүрээ нь `EXAMPLE.COM` болох бөгөөд сервер нь `grunt.example.com` болох юм. Бид `krb.conf` файлыг засварлаж эсвэл үүсгэнэ:

    # cat krb.conf
    EXAMPLE.COM
    EXAMPLE.COM grunt.example.com admin server
    CS.BERKELEY.EDU okeeffe.berkeley.edu
    ATHENA.MIT.EDU kerberos.mit.edu
    ATHENA.MIT.EDU kerberos-1.mit.edu
    ATHENA.MIT.EDU kerberos-2.mit.edu
    ATHENA.MIT.EDU kerberos-3.mit.edu
    LCS.MIT.EDU kerberos.lcs.mit.edu
    TELECOM.MIT.EDU bitsy.mit.edu
    ARC.NASA.GOV trident.arc.nasa.gov

Энэ тохиолдолд бусад хүрээнүүд тэнд байх хэрэггүй. Тэдгээр нь энд машиныг хэрхэн олон хүрээнүүдийг мэдэхээр хийгдэх жишээ маягаар байгаа болно. Хялбараа бодоод та тэдгээрийг оруулахгүйг хүсэж болох юм.

Эхний мөр нь систем ажиллах хүрээг нэрлэж байна. Бусад мөрүүд нь хүрээ/хост оруулгуудыг агуулна. Мөр дэх эхнийх нь хүрээ бөгөөд хоёр дахь нь “түлхүүр түгээх төв” болж байгаа хүрээн дэх хост юм. Хостын нэрийн дараах `admin server` нь хост бас удирдах мэдээллийн баазаар хангаж байна гэсэн үг юм. Эдгээр ухагдахуунуудын тайлбаруудын талаар Kerberos-ийн гарын авлагын хуудаснуудаас зөвлөгөө авна уу.

Одоо бид `grunt.example.com`-г `EXAMPLE.COM` хүрээ уруу нэмэх ёстой бөгөөд бас `EXAMPLE.COM` хүрээний `.example.com` домэйн дэх бүх хостуудыг оруулан нэмж өгөх хэрэгтэй. `krb.realms` файл дараах байдлаар шинэчлэгдэх болно:

    # cat krb.realms
    grunt.example.com EXAMPLE.COM
    .example.com EXAMPLE.COM
    .berkeley.edu CS.BERKELEY.EDU
    .MIT.EDU ATHENA.MIT.EDU
    .mit.edu ATHENA.MIT.EDU

Дахин хэлэхэд бусад хүрээнүүд тэнд байх шаардлагагүй. Тэдгээр нь энд машиныг хэрхэн олон хүрээнүүдийг мэдэхээр хийгдэх жишээ маягаар байгаа болно. Хялбараа бодоод та тэдгээрийг оруулахгүйг хүсэж болох юм.

Эхний мөр нь тусгай системийг нэрлэгдсэн хүрээ уруу оруулж байна. Бусад мөрүүд нэрлэгдсэн хүрээнд тухайн дэд домэйны системүүдийг хэрхэн анхдагчаар болгож байгааг харуулна.

Одоо бид мэдээллийн сан үүсгэхэд бэлэн боллоо. Энэ нь зөвхөн Kerberos сервер (эсвэл Түлхүүр Түгээх Төв) дээр ажиллах ёстой. `kdb_init` тушаал ажиллуулж үүнийг хийнэ:

    # kdb_init
    Realm name [default  ATHENA.MIT.EDU ]: EXAMPLE.COM
    You will be prompted for the database Master Password.
    It is important that you NOT FORGET this password.

    Enter Kerberos master key:

Одоо бид локал машин дээрх серверүүд авч болгохоор болгохын тулд түлхүүрийг хадгалах хэрэгтэй. `kstash` тушаал ашиглаж үүнийг хийнэ:

    # kstash

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered. BEWARE!

Энэ нь шифрлэгдсэн мастер нууц үгийг `/etc/kerberosIV/master_key`-д хадгална.

## 14.7.3 Бүгдийг ажиллахаар болгох

Kerberos-оор аюулгүй болгогдох систем бүрийн хувьд хоёр удирдагч мэдээллийн баазад нэмэгдэх шаардлагатай. Тэдгээрийн нэрс нь `kpasswd` болон `rcmd` байна. Эдгээр хоёр удирдагч нь систем бүрийн хувьд хувь системийн нэртэй тохиолдлуудын хамтаар хийгдэнэ.

Эдгээр kpasswd болон rcmd дэмонууд нь бусад системүүдэд Kerberos нууц үгнүүдийг өөрчилж rcp(1), rlogin(1) болон rsh(1) зэрэг тушаалуудыг ажиллуулахыг зөвшөөрдөг.

Одоо эдгээр оруулгуудыг нэмэцгээе:

    # kdb_edit
    Opening database...

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Previous or default values are in [brackets] ,
    enter return to leave the same, or new value.

    Principal name: passwd
    Instance: grunt

    <Not found>, Create [y] ? y

    Principal: passwd, Instance: grunt, kdc_key_ver: 1
    New Password:                    <---- enter RANDOM here
    Verifying password

    New Password: <---- enter RANDOM here

    Random password [y] ? y

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ?
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name: rcmd
    Instance: grunt

    <Not found>, Create [y] ?

    Principal: rcmd, Instance: grunt, kdc_key_ver: 1
    New Password:       <---- enter RANDOM here
    Verifying password

    New Password:           <---- enter RANDOM here

    Random password [y] ?

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ?
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name:         <---- null entry here will cause an exit

## 14.7.4 Серверийн файлыг үүсгэх

Одоо бид машин бүр дээр үйлчилгээнүүдийг тодорхойлдог бүх тохиолдлуудыг гаргаж авах хэрэгтэй. Энэ зорилгоор бид `ext_srvtab` тушаалыг ашиглана. Энэ нь файл үүсгэх бөгөөд түүнийг Kerberos-ийн клиент бүрийн `/etc` сан уруу аюулгүйн үүднээс хуулах эсвэл шилжүүлэх хэрэгтэй. Энэ файл нь сервер болон клиент бүр дээр байх хэрэгтэй бөгөөд Kerberos-ийн ажиллагаанд шийдвэрлэх зүйл болдог.

    # ext_srvtab grunt
    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered. BEWARE!
    Generating 'grunt-new-srvtab'....

Одоо, энэ тушаал зөвхөн түр зуурын файл үүсгэдэг бөгөөд тэр файлын нэрийг бүх серверүүд авч чадахаар `srvtab` болгон нэрлэх шаардлагатай. mv(1) тушаал ашиглаж эх систем дээрх байрлал уруу шилжүүл:

    # mv grunt-new-srvtab srvtab

Хэрэв файл нь клиент системд зориулагдсан бөгөөд сүлжээ нь аюулгүй биш гэж бодогдвол ``client`-new-srvtab` файлыг шилжүүлж болох зөөвөрлөгч уруу хуулж физик аюулгүйн үүднээс тээвэрлэж болно. Үүнийг клиентийн `/etc` сан дотор `srvtab` болгон нэрлэж 600 горимд байгаа эсэхийг шалгаарай:

    # mv grumble-new-srvtab srvtab
    # chmod 600 srvtab

## 14.7.5 Мэдээллийн санг нутагшуулах

Бид одоо зарим хэрэглэгчийг мэдээллийн баазад оруулах хэрэгтэй. Эхлээд `jane` хэрэглэгчид зориулсан оруулгыг үүсгэе. Үүнийг `kdb_edit` тушаал ашиглаж хийнэ:

    # kdb_edit
    Opening database...

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Previous or default values are in [brackets] ,
    enter return to leave the same, or new value.

    Principal name: jane
    Instance:

    <Not found>, Create [y] ? y

    Principal: jane, Instance: , kdc_key_ver: 1
    New Password:                <---- enter a secure password here
    Verifying password

    New Password:                <---- re-enter the password here
    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ?
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name:          <---- null entry here will cause an exit

## 14.7.6 Бүгдийг тест хийх

Эхлээд бид Kerberos дэмонууд ажиллуулах шаардлагатай. Хэрэв та өөрийн `/etc/rc.conf` файлыг зөв засварласан бол дахин ачаалахад энэ нь автоматаар хийгдэх ёстойг санаарай. Энэ нь зөвхөн Kerberos сервер дээр шаардлагатай. kerberos-ийн клиентүүд хэрэгтэй зүйлээ автоматаар `/etc/kerberosIV` сангаас авах болно.

    # kerberos &
    Kerberos server starting
    Sleep forever on error
    Log file is /var/log/kerberos.log
    Current Kerberos master key version is 1.

    Master key entered. BEWARE!

    Current Kerberos master key version is 1
    Local realm: EXAMPLE.COM
    # kadmind -n &
    KADM Server KADM0.0A initializing
    Please do not use 'kill -9' to kill this job, use a
    regular kill instead

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!

Одоо бид `kinit` тушаал ашиглаж бидний дээр үүсгэсэн `jane` ID-д зориулсан тасалбарыг авахыг оролдож болно:

    % kinit jane
    MIT Project Athena (grunt.example.com)
    Kerberos Initialization for "jane"
    Password:

Токенууд бидэнд үнэхээр байгаа эсэхийг `klist` ашиглан үзэхийг оролдоорой:

    % klist
    Ticket file:    /tmp/tkt245
    Principal:      jane@EXAMPLE.COM

      Issued           Expires          Principal
    Apr 30 11:23:22  Apr 30 19:23:22  krbtgt.EXAMPLE.COM@EXAMPLE.COM

Одоо kpasswd дэмон Kerberos-ийн мэдээллийн баазад нэвтрэлтийн зөвшөөрөл авч чадах эсэхийг шалгахын тулд нууц үгийг passwd(1) ашиглан өөрчлөхийг оролдоорой:

    % passwd
    realm EXAMPLE.COM
    Old password for jane:
    New Password for jane:
    Verifying password
    New Password for jane:
    Password changed.

## 14.7.7 `su` зөвшөөрлүүдийг нэмэх

Kerberos нь `root` зөвшөөрлүүд хэрэгтэй хэрэглэгч бүрд өөрсдийнх нь тусдаа su(1) нууц үгийг өгөхийг бидэнд зөвшөөрдөг. Одоо бид su(1)-аар танигдан зөвшөөрөгдсөн ID-г `root` уруу нэмж болно. Үүнийг `root`-г удирдагчтай холбосон тохиолдолтой байснаар хянаж болно. `kdb_edit` ашиглан Kerberos-ийн мэдээллийн баазад `jane.root` оруулгыг бид үүсгэж болно:

    # kdb_edit
    Opening database...

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Previous or default values are in [brackets] ,
    enter return to leave the same, or new value.

    Principal name: jane
    Instance: root

    <Not found>, Create [y] ? y

    Principal: jane, Instance: root, kdc_key_ver: 1
    New Password:                    <---- enter a SECURE password here
    Verifying password

    New Password:            <---- re-enter the password here

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ? 12 <--- Keep this short!
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name:                <---- null entry here will cause an exit

Одоо үүнийг ажиллаж байгааг шалгаж токенуудыг авахыг оролдоорой:

    # kinit jane.root
    MIT Project Athena (grunt.example.com)
    Kerberos Initialization for "jane.root"
    Password:

Одоо бид хэрэглэгчийг `root`-ийн `.klogin` файлд нэмэх хэрэгтэй:

    # cat /root/.klogin
    jane.root@EXAMPLE.COM

Одоо su(1) хийхийг оролдоод үз:

    % su
    Password:

тэгээд ямар токенууд бидэнд байгааг хараарай:

    # klist
    Ticket file:    /tmp/tkt_root_245
    Principal:      jane.root@EXAMPLE.COM

      Issued           Expires          Principal
    May  2 20:43:12  May  3 04:43:12  krbtgt.EXAMPLE.COM@EXAMPLE.COM

## 14.7.8 Бусад тушаалуудыг ашиглах

Өмнөх жишээн дээр бид `jane` гэж нэрлэгдсэн удирдагчийг `root` тохиолдолтой үүсгэсэн. Энэ нь удирдагчтай адил нэртэй хэрэглэгч дээр үндэслэсэн бөгөөд энэ нь Kerberos-ийн анхдагч юм; `root`-ийн гэр сан дахь `.klogin` файлд шаардлагатай оруулгууд байвал `<username>.``root` хэлбэрийн `<principal>.<instance>` нь тэр `<username>`-г `root` уруу su(1) хийхийг зөвшөөрдөг:

    # cat /root/.klogin
    jane.root@EXAMPLE.COM

хэрэв хэрэглэгч үүнтэй адил хэлбэрийн өөрийн гэр сангийн мөрүүдтэй бол:

    % cat ~/.klogin
    jane@EXAMPLE.COM
    jack@EXAMPLE.COM

Энэ нь өөрсдийгөө `jane` эсвэл `jack` гэж таниулсан (`kinit`-ийн тусламжтай, дээр дурдсаныг үз) `EXAMPLE.COM` хүрээний хэнд ч rlogin(1), rsh(1) эсвэл rcp(1) ашиглан энэ систем (`grunt`) дээрх `jane`-ий бүртгэл эсвэл файлуудад хандахыг зөвшөөрдөг.

Жишээ нь `jane` одоо өөр систем уруу Kerberos ашиглан нэвтрэн орж байна:

    % kinit
    MIT Project Athena (grunt.example.com)
    Password:
    % rlogin grunt
    Last login: Mon May  1 21:14:47 from grumble
    Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
            The Regents of the University of California.   All rights reserved.

    FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995

Эсвэл `jack` яг тэр машин дээрх `jane` бүртгэл уруу нэвтрэн орж байна (`jane` дээрхтэй адил `.klogin`-ийг тохируулсан бөгөөд Kerberos хариуцсан хүн удирдагч jack-ийг хоосон тохиолдолтой тохируулсан):

    % kinit
    % rlogin grunt -l jane
    MIT Project Athena (grunt.example.com)
    Password:
    Last login: Mon May  1 21:16:55 from grumble
    Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
            The Regents of the University of California.   All rights reserved.
    FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995

Prev | Home | Next
TCP Гүйцэтгэлийг хялбаршуулагчид | Up | Kerberos5

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

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