14.7 KerberosIV

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

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

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

14.7.1 KerberosIV суулгах нь

Kerberos нь FreeBSD-ийн нэмэлт бүрэлдэхүүн хэсэг юм. Энэ програм хангамжийг суулгах хамгийн амархан арга нь FreeBSD эхэлж суулгах үед sysinstallkrb4 эсвэл 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.comEXAMPLE.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

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

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