[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 网络安全 > 系统 > 正文

FreeBSD 中的 Kerberos

来源:不详 (2001-04-30 12:35:16)


   Contributed by Mark Murray  (based on contribution
   by Mark Dapoz  ).

   Kerberos 是一套网路安全系统, 使用者可以藉由 Kerberos 的 secure server
   验明正身. 有了 Kerberos 後, 远端签入, 远端拷备, 系统与系统间的档案拷备
   以及其它高危险性的工作会比较安全, 也比较容易控制.

   底下提供设定 FreeBSD 中的 Kerberos 的简便方法. 如果你想对 Kerberos 有
   兴趣, 想更进一步的了解它, 请参阅相关的 man pages.

   FreeBSD 中的 Kerberos 不是原先 4.4BSD 中所用的那套, 而是在 FreeBSD
   1.1.5.1 时 port 到 FreeBSD 上的 eBones. eBone 编码部份的 source code
   不是在米国或佳拿大发展的, 所以其他国家的使用者也可以 合法使用

   若你想取得合法的 Kerberos, 请不要从米国或佳拿大的 ftp site 拿.
   不然那个 ftp site 会惹上大麻烦! 你可以从一个在南非的 site
   (skeleton.mikom.csir.co.za)取得.

  6.3.1. 建立初始资料库

  6.3.2. 让 Kerberos 动起来

  6.3.3. 产生 server file

  6.3.4. 填充资料库

  6.3.5. 完整的测试

  6.3.6. 增添 su 权限

  6.3.7. 使用其他指令


     _________________________________________________________________
6.3.1. 建立初始资料库



   Kerberos 才需这个步骤. 首先确定你没有旧的 Kerberos database. 更换目录
   到/etc/kerberosIV底下, 检查看看是否只有下列的档案在:


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



   如果还有其它档案(如 principal.* 或 master_key), 请用 kdb_destroy
   这个指令将这些旧的 Kerberos database 毁掉. 如果原来系统没有用 Kerberos
   的话, 直接 rm 掉这些档案就是了.

   接着编辑 krb.conf 与 krb.realms 来定义所在的 Kerberos realm.
   底下的例子中 realm 是 GRONDAR.ZA, server 是 grunt.grondar.za.


grunt# cat krb.conf
GRONDAR.ZA
GRONDAR.ZA grunt.grondar.za 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



   这个例子中还有其它的 realm, 这些 realm 不是一定要的. 因为我们要在这
   个例子中说明怎麽让一台机器能够用多个 realm 所以扒i去了. 如果你只会
   用到一个 realm 那只要写明你要用的 realm 就好了. 第一行载明系统所在的
   realm. 其他行的第一项是 realm 第二项是一个 host, 这个 host 是 realm
   中的 key distribution centre(KDC). 如果在 host 之 後还有 "admin
   server" 这两个字, 那就表示说这个 host 互O administrative database
   server. 如果你对这些术语不甚清楚, 可参阅 Kerberos 的 man pages.

   我们将 grunt.grondar.za 巨?GRONDAR.ZA 这个 realm 中, 并将 .grondar.za
   这个 domain 中的每一个 host 也都巨?GRONDAR.ZA 中. 如此, krb.realms
   应该如下面所示:


 grunt# cat krb.realms
 grunt.grondar.za GRONDAR.ZA
 .grondar.za GRONDAR.ZA
 .berkeley.edu CS.BERKELEY.EDU
 .MIT.EDU ATHENA.MIT.EDU
 .mit.edu ATHENA.MIT.EDU



   当然这个档案里所写的其他 realm 并不是必要的. 奶F这些 realm 可以
   让这台机器上多个 realm. 如果你嫌累赘就不要加了.
   第一行将此系统放到指定的 realm 中. 其他行则说明如何把某个特定
   subdomain 内的系统放在指定的 realm 中. 如果这部机器市 Kerberos server
   或 KDC, 接着就要建立 database 了. 建 database 用得是 kdb_init
   这个指令:


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

Enter Kerberos master key:



   接着我们可以用 kstash 把 KDC 的 master key 存在 master key cache file
   中.


grunt# kstash

Enter Kerberos master key:

Current Kerberos master key version is 1.

Master key entered.  BEWARE!



   这个动作会把弗K过的 master password 存在 /etc/kerberosIV/master_key
   中.
     _________________________________________________________________
6.3.2. 让 Kerberos 动起来



   如果要用 Kerberos 来弗j系统安全, 有两个 principal 要加到 database 中.
   这两个 principal 是 kpasswd 和 rcmd, 奶J这个 principal 时, instance
   是要加入 Kerberos 的系统的名字 此外, kpasswd 及 rcmd 这两 daemon,
   可以让其他系统 更改 Kerberos password 及执行 rcp, rlogin 和 rsh.

   那麽, 咱们就来看看要怎麽奶J这些 entry 吧:

grunt# 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

, 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

, 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


     _________________________________________________________________

6.3.3. 产生 server file



   然後用 ext_srvtab 将定义每一台机器上的 service 的 instance 取出来.
   做了这个动作後会产生一个档案, 我们得用个安全的方法将这个档案 搬到
   Kerberos client 的 /etc/kerberosIV 底下. 这个档案非常重要, 每一 个
   kerberos server 和 client 都要有这个档案才能正常运作.


grunt# ext_srvtab grunt

Enter Kerberos master key:

Current Kerberos master key version is 1.

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



   ext_srvtab 只会产生一个暂存档, 我们得把这个档案改名为 srvtab 并用 mv
   把它搬到应该在的地方


grunt# mv grunt-new-srvtab srvtab



   如果这个档案是给 client 用的, 而且网路的安全性有问题的话, 那请把 这个
   -new-srvtab copy 到 floppy 或 tape 上, 再放到 client 的
   /etc/kerberosIV 底下, 并把 mode 改为 600.


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


     _________________________________________________________________
6.3.4. 填充资料库



    再来我们得把一些 user 扒i资料库中. 首先用 kdb_edit 把 jane 这个 user
   扒i去.

grunt# 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:

, 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


     _________________________________________________________________

6.3.5. 完整的测试



   首先得把 Kerberos daemon 都跑起来. 如果你的 /etc/sysconfig 设定无误,
   那在系统 reboot 後 daemon 就都会自己跑起来. 而且只有 Kerberos server
   才需要跑 Kerberos daemon, Kerberos client 是从 /etc/kerberosIV
   底下找必要的东东.


grunt# kerberos &
grunt# 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: GRONDAR.ZA
grunt# kadmind -n &
grunt# 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 的 ticket:


grunt$ kinit jane
MIT Project Athena (grunt.grondar.za)
Kerberos Initialization for "jane"
Password:



   然後用 klist 看看有没有拿到 ticket


grunt$ klist
Ticket file:    /tmp/tkt245
Principal:    jane@GRONDAR.ZA

  Issued           Expires          Principal
Apr 30 11:23:22  Apr 30 19:23:22  krbtgt.GRONDAR.ZA@GRONDAR.ZA



   再来试试看能不能用 passwd 与 kpassd daemon 沟通, 更改 password.


grunt$ passwd
realm GRONDAR.ZA
Old password for jane:
New Password for jane:
Verifying password
New Password for jane:
Password changed.


     _________________________________________________________________
6.3.6. 增添 su 权限



   Kerberos 可以让需要 root 权限的 user 每人有自己的 su password.
   底下要示如何把一个允许 su 成 root 的 id 扒i database 中,
   这个机制是借由让一个 principal 拥有 root 的 instance 达成. 用 kdb_edit
   在 Kerberos database 中奶J jane.root :


grunt# 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

, 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



   接着试试能不能拿到 token:


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



   再来要把 user 巨?root 的 .klogin 档里去:


grunt# cat /root/.klogin
jane.root@GRONDAR.ZA



   然後就试着 su:


[jane@grunt 10407] su
Password:
grunt#



   并且看看拿到的 token:


grunt# klist
Ticket file:    /tmp/tkt_root_245
Principal:      jane.root@GRONDAR.ZA

  Issued           Expires          Principal
May  2 20:43:12  May  3 04:43:12  krbtgt.GRONDAR.ZA@GRONDAR.ZA


     _________________________________________________________________
6.3.7. 使用其他指令



   在前一个例子中, 我们建了一个叫做 jane 的 principal, 并付与 他一个叫
   root 的 instance. 这是因为 Kerberos default 把 user 的名字与 principal
   设成一样; 也就是说当 . 是 .root 时,
   如果 root 的 home directory 下的 .klogin 里有奶J必要的钏w的话,
    就可以su成 root了:


grunt# cat /root/.klogin
jane.root@GRONDAR.ZA



   同理, 如果 user 的 home directory 下的 .kloing 像:


[jane@grunt 10543] cat ~/.klogin
jane@GRONDAR.ZA
jack@GRONDAR.ZA



   那麽, GRONDAR.ZA 这个 realm 中的 user, 如果用 kinit 确认他是 jane 或
   jack 就可以用 rlogin rsh 或 rcp 进入 jane 在 grunt
   上的帐号或存取帐号下的东西.

   例如, Jane 现在在另一个系统里使用 Kerberos:


[jane@grumble 573] kinit
MIT Project Athena (grunt.grondar.za)
Password:
[jane@grumble 574] 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

[jane@grunt 10567]



   或者 Jack 也可以在同一台机器上 login 到 Jane 的 account 中(如上所述,
   Jane 的 .klogin 中有 Jack, 而管理 Kerberos 也设了一个没有 instance 的
   principal 叫 jack):


[jack@grumble 573] kinit
[jack@grumble 574] rlogin grunt -l jane
MIT Project Athena (grunt.grondar.za)
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

[jane@grunt 10578]


     _________________________________________________________________


(http://www.fanqiang.com)



 
 相关文章

★  感谢所有的作者为我们学习技术知识提供了一条捷径  ★
www.fanqiang.com