当前位置:Linux教程 - Linux - 安全管理工具Show me

安全管理工具Show me



         作者︰Jack Tsai

      在你架设一个网络服务器,或是连上Intenet之前,有一些事情必须先了解。现在网络越来越发达,当你架设了一个服务器之后,就是开一个窗口欢迎客人进来,由于程序或系统要做到 bug free 几乎是不可能,只能尽量减少。但是网络上常常有些居心不良的人可能就会利用程序的漏洞或管理人员的疏失,闯入他不应该进入的地方,取走重要的资料或是破坏你的系统。因此当一个系统管理者,除了要会架各种服务器外,还要有能力能防堵各种cracker的入侵。底下所教导只是一些对于网管所应该有的能力,事实上cracker入侵手法越来越高强,所以身为一个系统管理者应该时时注意新消息,不可以为照著书上做,就可从此过着快乐幸福的日子了。  


    1 系统关于安全上的设定

      在还没跟Linux有关连之前,你的主机板提供的BIOS已经有提供最基本的密码进入功能了。 最好也在BIOS中取消用软盘开机,避免有人拿奇怪的程序放入你的硬盘里。

    1.1 密码的选取

     有人分析一般人选择密码会有以下特性:

    密码跟帐号一样。
    用自己的名字拼音。
    用自己喜欢的英文单字,譬如一个喜欢打篮球的人可能会把密码取作jordan。
    用计算机中经常出现的指令。
    用简单的数字,例如身份证字号。
    用自己的生日。
      读者看了之后是不是觉得自己也有这些特性呢?再想想电视或电影中cracker所猜的密码为什么会那么容易就猜中? 因此密码的选取最好能遵循下列原则:

    至少要6个字以上,最好能同时包含数字,英文字母和符号。
    不要使用任何人或东西的名称,千万不要取你家小狗或爱人的名字,如果这台主机很重要的话。
    密码最好每隔一段时间换一次。
    系统在几次密码输入错误之后就强迫断线,可避免有人使用暴力法猜密码。
    关于密码的设定文件:

    强迫使用者的密码不可少于6个字。 修改/etc/login.def檔,找到PASS_MIN_LEN那一行,若没有则自己加。
    改为PASS_MIN_LEN 6,同理,若限定不可少于8个字,将6改为8即可。
      另有其它三个设定PASS_MAX_DAYS:密码最大使用时间设定,超过这个时间密码就停止使用。

    PASS_MIN_DAYS:改过密码之后几天内不得修改密码。
    PASS_WARN_AGE:设定在密码到期日的前几天警告使用者密码快到期了。

    1.2 LILO的设定

      读者应该有注意到一般安装完Linux之后,在开机出现LILO这个字眼时并不会问你密码,这时若有人想要取走你计算机的资料,这时有心人可能会两种方式进入Linux免密码的方法。

    使用单人模式开机
    在LILO后输入 linux(此为你设定Linux的label) init=/bin/sh解决方法:

    例如
     boot=/dev/hda
     map=/boot/map
     install=/boot/boot.b
     prompt
     timeout=10
     lba32
     default=linux
     restricted password=
     image=/boot/vmlinuz-2.2.14-6.0lp
     label=linux
     read-only
     root=/dev/hda1

     other=/dev/hda2
     label=dos

      读者能看出那里是必须要注意的吗?重点在timeout,passwrod和restricted这三个选项。timeout在设定LILO提示符号等待时间,单位为10分之1秒,所以此例子等待时间为1秒,你还可以再设低一点,让人根本来不及输入任何参数。
      password明显是在LILO处需要输入密码。但由于此处密码是明文(plain text)显示,所以你修改完之后必须修改lilo.conf权限,让其它人不可读取,执行#chmod 640 /etc/lilo.confrestricted则告诉LILO,即使是使用单人模式,也必须要输入密码。
      以上修改完毕后,执行#lilo -v -v -v 将设定重新执行,重新开机进入,就会看到以下讯息︰
     LILO boot :
     Password :



    1.3 root这个帐号

      root在Linux上是个特权阶级,没有什么不能做的,因此尽量少用登入,除了避免对你的服务器造成灾难之外,也可减少密码外泄,尤其是从网络上连过来再使用su指令转变成root,这样很容易造成封包被撷取而取得root密码。
      就算在控制台(console)前用root登入,离开时请记得logout,否则可能也会造成意想不到的后果。


    1.4 设定自动logout的时间

      有些使用者漫不经心,离开时忘了logout,系统管理者可以在/etc/profile档里加入一行TMOUT=120,时间单位为秒,故此表示使用者若2分钟没响应,就自动帮他logout。


    1.5 取消控制台程序的存取

       避免有人从远程执行譬如shutdown或halt的指令,可至/etc/security/console.apps下,执行下列指令︰

     #rm -f halt
     #rm -f poweroff
     #rm -f reboot
     #rm -f shutdown
      
      这样即可避免有人远程telnet进来,再执行这些关机指令将系统关闭,只能由控制台前执行关机指令将系统关闭。


    1.6 照顾好/etc/inetd.conf檔

    /etc/inetd.conf控制所有服务器的激活,所以有必要特别照顾:

    限定只有user能存取
    #chmod 600 /etc/inetd.conf



    确定user是否为root
    #ls -l /etc/inetd.con
    -rw------- 1 root root 3027 Jul 12 21:17 inetd.conf确定了user为root



    编辑 /etc/inetd.conf档,将你不想要的服务关掉。只需要将那一行的最前面加上一个#符号,再重跑inetd 即可。
    #killall -HUP inetd



    让/etc/inetd.conf不能被改变,执行#chattr +i /etc/inetd.conf执行过指令之后,/etc/inetd.conf就不能被修改,删除,改名或连结,必须等到root执行过#chattr -i /etc/inetd.conf 才可。

    1.7 不想显示操作系统的信息

    假如你不想远程telnet进来的人知道你是采用什么操作系统的话,可以在/etc/inetd.conf内改成如下:
     telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
      在最后面加个 -h 选项,会让 telnet 进来的人只看到 login:这个讯息,而无法判断是何操作系统。


    1.8 将Ctrl-Alt-Del关机组合键取消

      此目的在避免有人到控制台面前,按下这三键让系统重新开机。方法为修改/etc/inittab将这一行 ca::ctrlaltdel:/sbin/shutdown -t3 -r now 最前面加一个#,再执行#/sbin/init q 即可。


    1.9 调整一些kernel上的module以避免网络上的攻击

    以下皆是修改/etc/sysctl.conf档案内关于kernel module的设定:

    忽略ping的响应以避免有人利用ping来攻击。加入这一行,或修改这一行
    net.ipv4.icmp_echo_ignore_all = 1



    忽略广播响应,有人会利用这方法来使用Denial of Service攻击。加入这一行,或修改这一行
    net.ipv4.icmp_echo_ignore_broadcast = 1



    关闭IP source routing,避免有人传送 source routed 封包到你的网络来,欺骗你的服务器使它以为是跟一台信任的主机沟通。加入这一行,或修改这一行
    net.ipv4.conf.all.accept_source_route = 0



    激活 TCP SYN cookie 防护加入这一行,或修改这一行
    net.ipv4.tcp_syncookies = 1



    取消 ICMP Redirect Acceptance 避免封包流入你不想去的地方加入这一行,或修改这一行
    net.ipv4.tcp_syncookies = 0



    打开 always-defrag 防护,假如你的 Linux 服务器是当作IP masquerade的通讯闸的话,你就应该要打开它加入这一行,或修改这一行
    net.ipv4.ip_always_defrag = 0



    打开网络的错误的警告加入这一行,或修改这一行
    net.ipv4.icmp_ignore_bogus_error_responses = 1



    打开伪装的IP防护cracker要使用DoS攻击时,通常都会隐藏自己的IP,即造一个假的IP,我们可以启用防止造假的IP联机,此目的只是防护假IP,而不是防护DoS攻击。加入这一行,或修改这一行
    net.ipv4.conf.all.rp_fillter = 1



    纪录 spoofed 封包,source routed 封包,redirect 封包这样会把这些封包纪录在系统录文件内。加入这一行,或修改这一行
    net.ipv4.conf.all.log_martians = 1
      当你修改你想要的模块之后,只需重跑主机的网络即可,执行

      #/etc/rc.d/init.d/network restart



    1.10 系统提供的信息,系统管理者必须时时注意的讯息

      一个良好的系统管理者,必须时时注意自己的系统纪录,可帮助了解自己系统的状况。也许你会发现有不速之客曾经进入你的系统捣乱。如果你没有看纪录文件的习惯的话,可能cracker正在利用你的计算机作坏事你都不知。

    系统纪录的设定文件大部分都是放在/var/log底下,稍后我们会一一介绍什么样的log文件纪录什么样的讯息。这些系统的纪录主要是由一个叫syslogd的程序所执行的,而syslogd执行的参考设定是/etc/syslog.conf檔。
      所以一位系统管理者必须要确定系统纪录是否正常运行,首先执行#ps-aux|grep syslogd ,执行完确定有看到syslogd,若停止了表示可能有重大危机发生。
      接下来执行less /etc/syslog.conf检查此档是否有被修改过的痕迹,最后你才能继续检查你所有的纪录文件。侵入者修改系统纪录大概就是利用这三个步骤。



    /etc/syslog.conf的解说
      我们先观看一下/etc/syslog.conf档,再执行 man syslog.conf,可看出/etc/syslog.conf中每一项可分为两栏,中间以空白或tab来隔开,前者称为selector栏,后者称为action栏,其中selector栏又可分为 facility及priority两部份,action拦表示为所要纪录在那个档案。

    facility我们把他称为系统的事件,Linux将系统事件分为 auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security (same as auth), syslog, user, uucp 和 local0 到 local7。

    priority我们把他称为优先权等级,有下列 debug, info, notice, warning, warn , err, crit, alert, emerg, panic等级。

    action栏则是要把纪录写到某个档案去,底下我们则针对这个范例作个讲解。

    # 将kernel的讯息写到控制台上,就是你马上会看到讯息,而不是记录到档案去。
    # 这样可能会使你的桌面显示有点混乱.
    #kern.* /dev/console

    # 以等级info纪录所有讯息(除了mail以外),你也可以改的更高
    # 不要把使用者认证的讯息纪录上去,可能会不良的后果。
    # *代表所有,none代表没优先权,也就是不纪录,用;来分隔。
    *.info;mail.none;news.none;authpriv.none /var/log/messages

    # 将认证的讯息作限制的讯息
    authpriv.*    /var/log/secure

    # 将mail讯息个别处理
    mail.*    /var/log/maillog

    # 让每个登入的使用者能收到警急讯息,*代表登入的使用者。
    *.emerg    *

    # 将mail和news的crit的优先权纪录到某个文件里。
    uucp,news.crit    /var/log/spooler

    # 将激活讯息纪录到boot.log挡里。
    local7.*    /var/log/boot.log

    #
    # 关于INN news server的纪录
    #
    news.=crit    /var/log/news/news.crit
    news.=err     /var/log/news/news.err
    news.notice   /var/log/news/news.notice



    以上只能针对Linpus Linux系统的纪录,其它尚还有各服务器的使用纪录,必须要参考各自的使用手册,大抵不会超过/var/log的范围。



    2 使用Linpus Linux的网络和安全上的工具

    2.1 arpwatch

      ARP(Address Resolution Protocol)由arpwatch-2.1a4-20lp.i386.rpm提供,内含两个程序,arpwatch和arpsnmp。此工具之目的在监控以太网络(ethernet)和fddi的IP和其对应的实体地址(即网络卡号)。并维护IP/实体地址对应的数据库。
      它同时也会把对应数据库改变过程以mail方式通知。 因为arpwatch必须要使用到libpcap,所以若是另外安装arpwatch的话,请先确定有装libpcap-0.4-20lp.i386.rpm这个套件。
      使用arpwatch的方法很容易,系统管理者只需执行#ntsysv,并将arpwatch的执行功能打开,若要立即开始arp监控请执行#arpwatch。
      至于arpsnmp的功能,事实上功能和arpwatch功能差不多,更详细的说明请 #man arpwatch和#man arpsnmp。


    2.2 authconfig

      由authconfig-3.0.3-2lp.i386.rpm提供,提供使用者认证的设定。
      读者可执行#authconfig 看看,可选择使用者数据来自密码文件(etc/passwd)或是NIS。一般都是使用本机密码文件,且一定要选用shadow password 及 md5 编码。这会提供密码上比较安全的保护。 


    2.3 cleanfeed

      由cleanfeed-0.95.7b-8lp.noarch.rpm提供,假若你有利用INN架设news server新闻服务器的话,这个程序可以用来帮你过滤掉一些浪费网络资源的垃圾信。设定档为/etc/news/cleanfeed.conf。
      执行程序为/usr/bin/filter/filter_innd.pl。需配合INN使用。详情请#man cleanfeed。


    2.4 gnupg和gpg

      此程序来自于这两个套件。gnupg-1.0.1-2lp.i386.rpm和gpgp-0.4-3lp.i386.rpmGnuPG介绍:在以前,Internet 最常用的用途就是收发Email,现在人连上网络,最常作的应该也是收发Email,但你可曾想过,事实上一般网络信件是没有经过编码处理的。也就是说,有心人士只要从中拦截你的信件,再把你的信件猜开来看,就知道你信件的内容的是什么了。于是就有不少了发明了将信件编码的方法,未经授权的人是无法看到信件内容的,就算将信件从网络中从中拦截,所看到的也只是一团乱码。现在常用的方法是使用PGP(Pretty Good Privacy),由于这套编码受限于美国法律,使用起来会有一些限制,因此伟大的GNU工程师就重新写了一套编码系统,使用方法兼容于PGP,称为GPG(GnuPG)。
      GnuPG是一套使用于安全通讯的的工具,它可以完全取代PGP并且免费使用。GnuPG不只是能编码你的信件,他也能处理你的档案。他也能将你的工作作数字式的签名,以避免他人的窜改。而且GnuPG也能处理经由PGP 5.x版的编码和验证。
      GnuPG使用公开钥匙来提供使用者能够有一个安全的资料交换,在公开钥匙的编码过程中,会产生两把钥匙:公开钥匙和私人钥匙,你要公开的是公开钥匙,私人钥匙切记不可公开,否则这就像你把自家大门钥匙送给别人一样。经由公开钥匙编码的数据只能经由私有钥匙解开;经由私有钥匙编码的数据也只能由公开钥匙解开。
      由于编码的原理有点复杂,没办法一一说明,只能教各位读者使用说明。读者可以至GPG的网页 http://www.gnupg.org看看。

    产生一副钥匙对:
      想要开始使用GPG,首先你必须要产生一对新的钥匙-就是公开钥匙和私人钥匙。 首先开个rxvt窗口,执行#gpg --gen-key,这时请用你最常用的帐号,因为私人钥匙是给这个帐号使用的,最好不要使用root帐号。执行后,大概会看到这个讯息:

    gpg (GnuPG) 1.0.1; Copyright (C) 1999 Free Software Foundation, Inc.
    This program comes with ABSOLUTELY NO WARRANTY.
    This is free software, and you are welcome to redistribute it
    under certain conditions. See the file COPYING for details.

    Please select what kind of key you want:
    (1) DSA and ElGamal (default)
    (2) DSA (sign only)
    (3) ElGamal (sign and encrypt)
    Your selection?

    这是问你要使用何种编码方法?通常使用默认值即可,什么都不输入按Enter即可。

    DSA keypair will have 1024 bits.
    About to generate a new ELG-E keypair.
    minimum keysize is 768 bits
    default keysize is 1024 bits
    highest suggested keysize is 2048 bits

    这里是问你使用钥匙的长度,通常是越长越安全,只是解开过程会比较久一点,默认值为1024 bit。

    Please specify how long the key should be valid.
    0 = key does not expire
    = key expires in n days
    w = key expires in n weeks
    m = key expires in n months
    y = key expires in n years Key is valid for? (0)

    这里是问你钥匙的使用期限,0代表没有使用期限,为默认值。

    You need a User-ID to identify your key; the software constructs the user idfrom Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) [email protected] "

    Real name:

    这里是问你收信者的ID,批注,和email信箱,请先输入ID,接着他会问你email和批注。

    You need a Passphrase to protect your secret key.
    nter passphrase:

    这里是问你收信的密码,请输入你想要的密码。接下来会看到如下的讯息:

    We need to generate a lot of random bytes. It is a good idea to perform some other action (type on
    the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random
    number generator a better chance to gain enough entropy.

    +++++++++++++++++++++++++.++++++++++..++++++++++.+++++.++++++++++..+++++
    +++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++>+++++
    .+++++.............+++++

      这边的意思是告诉你它正在利用随机数产生钥匙,为了让随机数够乱(随机),在产生过程中也请你胡乱动你的鼠标和键盘,这些都会被当随机数的输入。
      当执行完后,你的新钥匙就产生了,此钥匙被放置在家目录的.gnupg目录底下。 想要列出你的钥匙,请执行#gpg --list-keys,会看到如下结果:

    /home/binbin/.gnupg/pubring.gpg
    ------------------------
    pub 1024D/818D271A 2000-09-13 binbin <[email protected]
    sub 1024g/DDD13635 2000-09-13

      一旦钥匙产生之后,你就可汇出你的公开钥匙和汇入他人的公开钥匙(切记!不要公开自己的私人钥匙)。

    寄出自己的公开钥匙可以如下的步骤:

    #gpg --armor --export [email protected]

    这结果大概是如下:

    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: GnuPG v1.1.0 (GNU/Linux)
    hkfhgdhlkfdhdjvjglfhggfkhldfhdfkghkfdff fdlghkfdhgskfhglsfdhgfdsdshlghlsfdhdfgg
    dfgjdfgjdsjg;jdsg;jsdjgdsjdsjdfjvmwewdp qewuirweuffkvjfgperewq[9-34wicick`-9`wx
    jjkdd209ur20[udfc-49f--uv;sadq[fd\dff esagfsjdgfldff238r09237fzdfwqjeqdkhasdf
    jshdgfsdghff9preygfdkf;dfj034tfgfgfjgg kafjsfh308ghj;efhrg;kfjg\s;dfjsd;lfjf
    jshdagfljkf jfkfjdsvlk;fvlkjclvjcljvxc 1dsc-
    -----END PGP PUBLIC KEY BLOCK-----



    废除你的认证:
      假如你忘记密码了,或着有人发现你的密码了,你可以发布消息说这个公开钥匙不要使用了。要废除你的认证,可以使用 --egn-revoke选项,执行
    #gpg --output revoke.asc --gen-revoke [email protected]



    将公开钥匙送上key server:
      有时候将公开钥匙个别寄给人是很花时间的,尤其通讯簿名单很多时,你可以将你的公开钥匙送上 key server,这样会比较方便。
      key server是Internet上的数据库,里面放的就是公开钥匙,供想要的人去查询,Internet上的key server有很多,而且有些会试着跟其它的key server联机作同步更新。将你的公开钥匙送上key server就是将公开钥匙公开了。
      在此先提供一个:http://www.keyserver.net。或者你想自己架一个和另外找一个国内的也可。将你的公开钥匙送上 key server 的执行方法为
    #gpg --keyserver www.keyserver.net --send-key [email protected]
      或者可经由浏览器将自己的 PGP 公开钥匙加上去。就是将你的xxx.asc内容完全的贴上去即可。



    汇入别人的钥匙:
      这边说的是将别人的公开钥匙加入自己的钥匙圈里,当你汇入别人的公开钥匙之后,你就可以读取他人寄给你的信。当你收其它人寄来的公开钥匙时,请将他存成文字文件。
      或者是当你用netscape连上key server,当你取到你想要的公开钥匙时,将他存成文字文件。然后在命令列执行#gpg --import xxx.txt若没看到错误讯息,就表示成成功了。
      若想了解更多的使用状况的话,请多善用U*NIX的线上求助系统,在命令列下执行 #man gpg或至http://www.gnupg.org



    2.5 iproute

    由iproute-2.2.4-3lp.i386.rpm提供,可增强IP 路由与网络装置的设定工具。

      Iproute会读取一个由WIRE程序产生的档案,并尝试判定应将其送至何处。它的运作是藉由查看由FIP引头的各个字段如DU(目的地或最终使用者),SU (逻辑起源或使用者,如:wire名称),SR(替代的路由名称),SC (原始字符组)及SH (原始引头)等来确定其传送档案的方式。
      它会透过检视一个有SU引头栏(或者是SR引头栏)名称的查找表来获知档案应被送往何处。
      假如档案内有SD (复制wire)则这个档案会被复制,并链接到其新的名称。
      若您在档案中用了DU则不需做任何进一步的处理。这时会用-r or %REUSEDU旗标标注。
      此时这个程序并不会传送相关档案,它仅会在2GO输出序列建立链接,其形式如下:

     #SU:srcuser#DU:destuser#SN:filename#SC:chrset_date_time[_optionals]

      您可以改变DU, SU, SN 和 SC.的默认值。
      所有的参数都是任选的─虽然即使每个路由档案只有一行指令,但每个待传送档案都要有路由档。 一般而言,这个档案会包括:

      - 注释
      - 一个预设目的地(使用 %DU关键词)
      - 一个原始字符组(使用%SC关键词)

    其它常用关键词包括:

      - 一些路由指示行
      - %SZ 栏(若有备用档案)
      - %LOG(显示标题或其它有意义的字段)


    2.6 iputils

      由iputils-20000121-3lp.i386.rpm提供,提供了几组关于IP上的Utility。
      有clockdiff,ping/ping6,traceroute6,arping,rdisc,ifenslave tracepath/tracepath6。

    详细使用请#man arping,#man clockdiff,#man in.rdisc,#man ping, #man tracepath,以及 /usr/doc/iputils-20000121/README.ifenslave。


    2.7 ipvsadm

      由ipvsadm-1.1-3lp.i386.rpm提供,其功能在丛集式计算机(cluster)利用ipvsadm程序建立LVS(Linux Virtual Server),cluster上接受要求的 节点(active node)会把要求绕送到真正提供此服务的点。ipvsadm可以用来 建立,维护kernel的路由表(routing table)。它支持两种通讯协议(IP和 UDP),三种封包转送方式(NAT,tunneling,direct routing),四种负载均衡 (load balancing)的算法(round robin, weighted round robin, least-connection 和 weighted least-connection)。其下命令的形式有两种:

    ipvsadm COMMAND [protocol] service-address [scheduling- method] [persistent-timeout]
    ipvsadm command [protocol] service-address server- address [packet-forwarding-method] [server-capacity]

    第一种形式加上一个公用服务地址(一个和服务要求关联的主机地址及端口位,而非一个特定的网络主机) 到核心的路由表,并确定指派服务要求到主机的方法及其持续逾时时间等。

    第二种形式是关联路由表内现存的一个带有多个服务器主机的公共服务地址到服务要求被重新导向的地方。这个形式亦指出封包传送的方式及服务器主机间的相对能力。 以下提供一个范例供参:

     ipvsadm -A -t 207.175.44.110:80 -s rr
     ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1 -m
     ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.2 -m
     ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.3 -m
     ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.4 -m
     ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.5 -m

      这个范例的指令设定了一个用来分配在207.175.44.110的端口位80上网络内送需求的重新导向主机,它会将这些网络内送需求均等的指派给在207.175.44.110的埠位80的五个网络服务器主机。本例的连网模式为NAT,而每个真实服务器是以LVS的机制进行伪装。

    请注意:
      网络服务器的预设路由须设定到重新导向主机中,且重新导向主机必须设定为能传送伪装的封包。


    2.8 kerberos 5

      此程序由 krb5-configs-1.1.1-10lp.i386.rpm, krb5-devel-1.1.1-10lp.i386.rpm,krb5-libs-1.1.1-10lp.i386.rpm, krb5-server-1.1.1-10lp.i386.rpm,krb5-workstation-1.1.1-10lp.i386.rpm提供。
      Kerberos 能给网络识别服务有较安全的联机,识别包括下列的过程:

    .辨别来者的身份.
    .验证要求服务者是来自何方.

    kerberos使用密码来辨别身份,但是密码绝对是经过编码过的,不会那么容易被其它人截取。

    为什么使用kerberos:
      很多传统的网络系统使用以密码为基础的身份识别。当一个使用者需要所提供的网络服务时,按照要求输入了密码。伺服端比对密码之后,确认无误让使用者进入。
      但是,读者有没有想过?若联机传送的资料没有经过加密处理,则是以明文 (plaintext)的方式传送,当然这也包含了你的密码。如果有心人士想要侵入你的系统的话,他可以从中拦截封包,再加以分析,就可找出密码了。
      kerberos主要的设计原理就是在确定密码在传送过程中,有经过资料加密处理。并且适当的使用kerberos可以根绝网络上拦截封包的程序来找出你的密码的威胁。



    为什么不使用kerberos:
    在某些原因下,kerberos比较难实作成:
    .没有一套程序可以快速的将标准的UNIX密码数据库转换成kerberos的密码数据库。

    .在目前Linux上,kerberos跟PAM(Pluggable Authentication Modules)只能达到部份兼容,还没达到完全兼容的地步。

    .对于某一个程序若想要使用kerberos的话,他的程序代码必须要修改成能对kerberos函式库正确的呼叫。对于一些程序的修改成如此的话,可能要花费相当大的功夫。

    .对于其它的应用程序的话,可能修改的部份包括适应客户端和伺服端的通讯协议,当然这也是要花费很多时间。更有甚着,对于closed source,我们连想要修改都没办法。

    .最后,如果你想在你的网络上使用kerberos的话,必须客户端和伺服端同时使用。

      假如随便一个service还在使用以明文为方式的密码的话,那你的客户端使用kerberos也没用。因此想要你的网络安全得到kerberos保护的话,你就必须所有相关的程序配合才行



    kerberos的术语:
      跟其它的计算机系统一样,kerberos也有自己的术语,知道这些术语对于了解kerberos或你将来看这类的书会有一些帮助。

    .ciphertext-
      编码后的数据。

    .client(客户端)-
      网络上的一个个体(可能是user,主机或是程序),这个个体可以获得kerberos的进入权(tickets)。

    .credential cache 或 ticket file-
      一个档案,里头包括使用者和各种服务器联机过程编码的关键值。kerberos 5 提供一个架构来使用其它的快取型态(例如shared memory),但是对于将快取的档案形式,也是支持的很好。 

    .key-
      大量的数据,用来将数据编码和译码用。编码后的资料如果key值不对,或猜测方法不对,这些资料都无法被译码回来。

    .Key Distribution center-
      一台用来发布 kerberos 的权限的主机(有时候也叫 Ticket Granting Server或简称 TGS)

    .keytab-
      key table的简写,一个档案,里头包含了principal和关键值key的列表。服务器从keytab档案里取出所需要的关键值。预设的 keytab档案为/etc/krb5.keytab。  

    .plain text-
      未编码的数据。

    .principal-
      能使用kerberos认证的使用者和服务器。principal名字的表示格式为"root[/instance]@realm",若是一个使用者,就把root换成使用者ID,中括号里的东西是可有可无,假如这个principle有instance的话,那就用斜线"/"。

    .realm-
    一个使用kerberos的网络,主要是包含少量的服务器(也叫KDC)和多量的的客户端。

    .service-
      网络上程序或计算机的存取。

    .ticket-
      进入权,暂时的电子凭证,用来针对某一服务的身份识别。

    .Ticket Granting Ticket(TGT)-
       一个特别的进入权(ticket),可以允许客户端得到额外的进入权,而不需要经过KDC的允许。



    kerberos之运作与运用:
      在了解kerberos使用的一些术语之后,这边简单介绍kerberos的认证过程是如何进行的。在一个"正常"的网络上,使用密码来辨识使用者。当一个使用者要求某项服务,服务器提示使用者输入密码。使用者输入密码,密码以明文方式传输到服务器,然后服务器允许使用者使用这项服务。就像先前所提到的,kerberos 主要解决的问题是确定密码在传送过程中,有经过资料加密处理,并且适当的使用kerberos可以根绝网络上拦截封包的程序来找出你的密码的威胁,为了达到这样的功能,验证的工作是不可缺的,所以Kerberos主要是和验证有关的工具程序。
      Kerberos 5并不与帐号授权有关的安全功能有直接关联,但为了能支持这些相关安全功能,它具有一个将授权与帐号信息,当作其进入许可验证资料的一部份的传输防窜改机制。这些信息对于在要求进入许可时具有多重限制的作用,其中每一项限制的加密并非Kerberos协议的重点,取而代之的,它是由使用中的授权或帐号机制所定义,而各项限制是登载于进入许可档的_a_u_t_h_o_r_i_z_a_t_i_o_n _d_a_t_a字段下。
      当客户要求进入权限时,各项限制会被送到KDC以将其插入进入许可档、加密,及避免被破坏。一般在Kerberos协议的格式中,客户可能会要求KDC包含或加入这些限制资料到新的进入许可档中。
      KDC并不会从进入许可文件移除任何授权资料(_a_u_t_h_o_r_i_z_a_t_i_o_n _d_a_t_a)。而TGS则会自TGT复制这些资料到新的进入许可档中,然后再加入其余所设定的任何授权资料。当在对进入许可档进行解密时,应用服务器便可获得这些资料。由于Kerberos不会解译这些资料,所以应用服务器可利用这些资料来限制客户端对资源的存取。
      在其它的使用上,_a_u_t_h_o_r_i_z_a_t_i_o_n _d_a_t_a栏也可被用在代理(proxy)的权限上。客户从KDC要求代理以指定在授权资料中的任何授权限制,然后将proxy和session key安全地传给其它人,他们就可以从应用服务器获得有限制的服务。
      自由软件基金会(Open Software Foundation)的已发行计算机环境(Distributed Computing Environment)使用_a_u_t_h_o_r_i_z_a_t_i_o_n _d_a_t_a栏来产生专属属性证明(PACs)。一些专属的信息系由一个专属服务器维护,当某客户提出一个PAC的要求时,专属服务器会要求一个用来判定其本身为专属服务器的Kerberos许可进入,但它会限制该客户所属群组,并判别一个特定的DCE使用者ID。然后这个进入许可档会被送到客户处以用来确定其DCE使用者ID和证明其为已登记群组的成员之一。本质上而言,这个专属服务器会赋予这个客户一个代理权,让其作为专属服务器以主张所登记的DCE使用者ID和其是否属于有登记的群组。假如前述的权限档不包括各项限制,则它会指出该客户为专属服务者,让该客户能主张任何的使用者ID和其是否属于任何已登记群组。



    在Linpus Linux上设定kerberos 5 的客户端:
      设定kerberos 5 客户端并不会像设定伺服端那么深入。至少,你必须要安装客户端的套件,并且提供客户端有效的krb5.conf组态档。kerberos版本的rsh和rlogin同样也需要一些组太档上的改变。

    (1)确定krb5-libs-1.1.1-10lp.i386.rpm, krb5-workstation-1.1.1-10lp.i386.rpm这两个客户端套件有安装在客户端上,你也必须要提供自己的/etc/krb5.conf文件给客户端的主机。通常这可以跟KDC的krb5.conf档一样。

    (2)其它被kerberos化的服务必须要激活,要使用kerberos化的telnet,你必须要执行#ntsysv 或 #chkconfig 来激活 ktelnet。



    kerberos和PAM(Pluggable Authentication Modules):
      目前,kerberos化的服务并不会利用PAM,一个kerberos化的服务会跳过PAM。



    有关于kerberos的信息和来源:
    http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html
    Kerberos 的常见问答集FAQ(Frequently Asked Question)

    http://web.mit.edu/kerberos/wwww
    kerberos在MIT的网页

    ftp://athena-dist.mit.edu/pub/kerberos/doc/usenix.PS
    一本书-kerberos: An Authenticiation Server for Open Network System

    http://web.mit.edu/kerberos/www/dialogue.html
    对话录-Designing an Autnentication System: a Dialogue in Four Scenes

    http://www.ornl.gov/~jar/HowToKerb.html
    一些在建立keberos网络上的建议

      此外,在安装kerberos的RPM档时,Kerberos V5 Installation Guide 和Kerberos V5 System Administrators Guide也同时安装下去了,安装的文件目录在/usr/share/doc/krb5-xxxxx底下。

    2.9 LAM(Local Area Multicomputer)

      LAM 是一个用来执行与监控丛集运用上MPI应用软件的简单而功能强大的环境,以下介绍一些执行与操作LAM的简单步骤:


    2.9.1激活 LAM

    使用者须建立一个列出丛集运用所有机器的表列档案,其方法如下:

     % cat lamhosts
     # a 2-node LAM
     node1.beowulf.nd.edu
     node2.beowulf.nd.edu

      每台机器将会被指定一个节定指针,第一个指针由0开始,第二个为1,其它则接下去。 用recon工具确定这个丛集是可启用的,方法如下:

     % recon -v lamhosts
     recon: testing n0 (node1.beowulf.nd.edu)
     recon: testing n1 (node2.beowulf.nd.edu)

    用lamboot工具在所指定的丛集上实际激活 LAM,其方法如下:

     % lamboot -v lamhosts

     LAM 6.2.0 Beta - University of Notre Dame
     hboot n0 (node1.beowulf.nd.edu)...
     hboot n1 (node2.beowulf.nd.edu)...

      因LAM并未强制须使用特定的环境,或LAM shell ,所以lamboot执行完后会回到shell提示,您可用tping指定来测试这个丛集和LAM是否有在运作,其方法如下:

     % tping -c1 N
      1 byte from 2 nodes: 0.009 secs


    2.2.9.2编译MPI程序

      相对于其它讯息传送系统, MPI是相当简易而好用的工具程序,以下是一个完整的动态负载平衡主/仆式应用的通讯架构,再后面则介绍一些编写典型平行应用的必要功能等:

    #include

    #define WORKTAG  1
    #define DIETAG    2

    main(argc, argv)

    int      argc;
    char     *argv[];

    {
     int    myrank;

     MPI_Init(&argc, &argv);  /* initialize MPI */
     MPI_Comm_rank(
        MPI_COMM_WORLD,   /* always use this */
        &myrank);        /* process rank, 0 thru N-1 */

     if (myrank == 0) {
        master();
     } else {
        slave();
     }

     MPI_Finalize();    /* cleanup MPI */
    }

    master()

    {
     int         ntasks, rank, work;
     double   result;
     MPI_Status      status;

     MPI_Comm_size(
        MPI_COMM_WORLD,  /* always use this */
        &ntasks);        /* #processes in application */
    /*
     * Seed the slaves.
     */
      for (rank = 1; rank < ntasks; ++rank) {

         work = /* get_next_work_request */;

        MPI_Send(&work,    /* message buffer */
            1,       /* one data item */
            MPI_INT,   /* data item is an integer */
            rank,      /* destination process rank */
            WORKTAG,   /* user chosen message tag */
            MPI_COMM_WORLD);/* always use this */
     }
    /*
    * Receive a result from any slave and dispatch a new work
    * request work requests have been exhausted.
    */
     work = /* get_next_work_request */;

     while (/* valid new work request */) {

        MPI_Recv(&result, /* message buffer */
            1,        /* one data item */
            MPI_DOUBLE,   /* of type double real */
            MPI_ANY_SOURCE,     /* receive from any sender */
            MPI_ANY_TAG,  /* any type of message */
            MPI_COMM_WORLD, /* always use this */
            &status); /* received message info */

        MPI_Send(&work, 1, MPI_INT, status.MPI_SOURCE,
            WORKTAG, MPI_COMM_WORLD);

        work = /* get_next_work_request */;
     }
    /*
    * Receive results for outstanding work requests.
    */
     for (rank = 1; rank < ntasks; ++rank) {
        MPI_Recv(&result, 1, MPI_DOUBLE, MPI_ANY_SOURCE,
            MPI_ANY_TAG, MPI_COMM_WORLD, &status);
     }
    /*
    * Tell all the slaves to exit.
    */
     for (rank = 1; rank < ntasks; ++rank) {
        MPI_Send(0, 0, MPI_INT, rank, DIETAG, MPI_COMM_WORLD);
     }
    }

    slave()

    {
     double     result;
     int      work;
     MPI_Status   status;

     for (;;) {
        MPI_Recv(&work, 1, MPI_INT, 0, MPI_ANY_TAG,
            MPI_COMM_WORLD, &status);
    /*
    * Check the tag of the received message.
    */
        if (status.MPI_TAG == DIETAG) {
         return;
        }

        result = /* do the work */;

        MPI_Send(&result, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
     }
    }

    MPI的程序都是由一个独特的"rank" (整数值如0, 1, 2, ...,)来设定,如N-1. MPI_COMM_WORLD表示 "在这个MPI应用程序内的所有程序" ,它被称为是一个通讯器,且它提供了所有要做讯息传送的必要信息。而可迁移的函式库更使得通讯器能指供其它系统所无法处理的同步保护功能。

      要进入或退出MPI,就像其它系统一样,您可以使用以下两个函式来激活及清除 某MPI程序:

     MPI_Init(&argc, &argv);
     MPI_Finalize( );

    正常来说,一个平行应用的程序必须知道它本身的rank及现存有多少其它的程序。它是利用呼叫MPI_Comm_rank( ) 来得知它的rank 的,其方法如下:

     int     myrank;
     MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

    要获知现存有多少其它程序则须利用 MPI_Comm_size( ):

     int     nprocs;
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);

    讯息的传送是经由一个特别的程序,且其会依使用者的设定而被标记上一个卷标(整数值)。这个卷标是用来判别一个程序可能会传送或接收的不同讯息种类,以上列的范例而言,其卷标是用来判别工作讯息和结束讯息的,以下是一个范例:

     MPI_Send(buffer, count, datatype, destination, tag,
         MPI_COMM_WORLD);

      一个接收讯息的程序会判定传送程序的卷标和rank,你可使用MPI_ANY_TAG 或 MPI_ANY_SOURCE 来接收由任何不同卷标的程序所发出的任何讯息,其范例如下:

     MPI_Recv(buffer, maxcount, datatype, source, tag,
         MPI_COMM_WORLD, &status);

      有关接收讯息的信息会问传回一个状态变量,已收到的讯息卷标状态为MPI_TAG,而发送程序的rank状态为status.MPI_SOURCE.

      其它未在本范例使用的功能是传回已收到的资料种类数量的。有了这些函式后,您就几乎可编写其所有的应用。

      程序的激活透过mpirun指令来进行,SPMD应用程序能在使用mpirun激活 MPI的时侯被激活,其方式如下:

     % mpirun -v n0-1 foo
     2445 foo running on n0 (o)
     361 foo running on n1

      一个有多程序的应用程序必须在其规划表(一个用来列示每个程序和其目标节点的档案)中被注明,其方法如下:

    % cat appfile
    # 1 master, 2 slaves
    n0 master
    n0-1 slave


    % mpirun -v appfile
    3292 master running on n0 (o)
    3296 slave running on n0 (o)
    412 slave running on n1

      要监控有MPI应用程序,您可以在任何时侯显示完整的MPI同步状态下的所有程序和讯息,其方法如下:

    % mpitas

    TASK (G/L)
    FUNCTION
    PEER|ROOT
    TAG
    COMM
    COUNT
    DATATYPE

    0/0 master
    Recv
    ANY
    ANY
    WORLD 1
    INT


    1 slave
    2 slave
    <running>
    <running>







      程序的rank 0会拒绝从任何使用MPI_COMM_WORLD通讯器的原始程序和讯息卷标中接收含有单一整数的程序讯息,而其它的程序仍在执行,兹示范如下:

    % mpimsg

    SRC (G/L)
    DEST (G/L)
    TAG
    COMM
    COUNT
    DATATYPE
    MSG

    0/0
    1/1
    7
    WORLD
    4
    INT
    n0,#0



      稍后我们会看到一个由程序rank 0传送到程序rank 1的讯息被缓冲处理并等待被接收。这个程序讯息是以卷标7利用MPI_COMM_WORLD通讯器传送,且含有4个整数。


    2.9.2.3 清除LAM

      要清除LAM的话,所有使用中的程序和讯息皆可在不须重新开机的情况下被移除,您只要利用以下指令即可:

    % lamclean -v
    killing processes, done
    sweeping messages, done
    closing files, done
    sweeping traces, done

      通常使用者可以用mpirun来执行一个程序,并在结束时用lamclean,然后再用 mpirun另一个程序,而无须用lamboot来执行使用者的MPI程序。


    2.9.2.4 结束LAM

      要结束LAM 的话,您可使用wipe工具来移除LAM在网络上所有进程的踪迹,这种情形应该在完全不再需要用到LAM/MPI的时侯使用,其方式如下:

    % wipe -v lamhosts
    tkill n0 (node1.beowulf.nd.edu)...
    tkill n1 (node2.beowulf.nd.edu)...


    2.2.10 mc server mcserv

      (mcserv-4.5.42-12lp.i386.rpm)是一个专门针对Midnight Commander网络档案系统开发的伺服程序,它提供使用Midnight档案系统的用户对主机档案系统的存取功能。 假如这个程序是由root执行,则它会尝试取得一个保留的埠位,否则它会用9876当作它的埠位。
      假如在系统上有一个端口位关连的程序在运作,则其会向这个端口位关连程序登记,从而使用户能自动连结到正确的埠位上。

      假如系统上没有端口位关连程序,则您就要利用-p选项来手动设定,有关其详细介绍,你可到下列网站:

     http://www.gnome.org/mc/


    2.2.11 nc(netcat)

    nc (nc-1.10-7lp.i386.rpm)是用来处理几乎所有TCP或UDP的事情的,它可以打开TCP 联机,传送UDP封包,听取专用的TCP和UDP埠,执行埠位扫瞄和起始信息路由传送等。它不像telnet,它可以良好的编写scripts,并将错误讯息在标准错误上分隔开,而不是将其送到标准输出上,它会某些功能上和telnet重复

      目的埠位可以是个别的整数值,services(5)上列示的名称或是范围,范围的形式是nn-mm,且有些分别的埠位或范围是可以在指令行上被指定的。

      有关nc的使用,您可参考netcat README文件


    2.2.12 net-tool

      net-tools (net-tools-1.54-5lp.i386.rpm)套件包含一群构成Linux操作系统NET-3基本组的程序集,也包括了许多可以用来设定网络连结的工具程序,如arp, rarp, ifconfig, netstat, ethers 和 route等。


    2.2.13 net-cfg

      netcfg(netcfg-2.25-2lp.noarch.rpm)是Red Hat的Linux工具之一,它能提供图形接口以利使用者用来做各种连网设定等。

      相关信息请参考Red Hat或其关联网站。


    2.2.14 NFS utilities

      nfs-utils (nfs-utils-0.1.6-3lp.i386.rpm)套件提供一个daemon给核心NFS服务器和一些相关工具,它能提供比一般使用者使用的传统Linux NFS服务器更好的效能。

      这个套件亦包含有showmount程序,Showmount会询问远程主机的登载daemon有关NFS的信息,例如: showmount可以显示在远程主机登载的客户端资料。


    2.2.15 nscd

      Nscd ( nscd-2.1.3-16lp.i386.rpm) 会抓取寻找名称服务的要求,并能大幅的提升NIS+的效能,且能协助DNS服务器。须注意的是,请不要在2.0版的核心使用它,因为它正好会引发该版核心的bugs。

      当您有需要一个抓取名称服务需求的daemon 时,您可以安装nscd,只要避免使用2.0版的核心就好。


    2.2.16 nss_ldap

      LDAP似乎逐渐有被当成储存使用者信息(密码,使用者家目录,电话号码等)工具的趋势,而NSS LDAP (nss_ldap-105-2lp.i386.rpm)模块则可让您透过LDAP来做使用者验证。

    有关这个模块的取得,您可到下面这个网站:
    http://www.padl.com/nss_ldap.html

    要获得LDAP相关概念与工具,你可到以下的网站:
    http://sites.inka.de/ms/python/ldap-client-cgi/
    http://www.mountpoint.ch/oliver/kldap/
    http://biot.com/gq/
    http://igloo.its.unimelb.edu.au/LDAPExplorer/
    http://www.mozilla.org/directory/


    2.2.17 openssl

      此套件由openssl-0.9.4-4lp及openssl-devel-0.9.4-4lp提供。其中由openssl-0.9.4-lp提供http上的安全联机,提供一个开放使用的SSL (Secure Socket Layer)。此部份您可参考第10章相关介绍章节。


    2.2.18 PAM(Pluggable Authentication Modules)   

      PAM(Pluggable Authentication Modules)是设计用来提供系统管理者,一个能适当分配他们系统中,所允许应用程序权限的工具,而PAM的区域环境设定则是由「/etc/pam.conf」或「/etc/pam.d/」目录所控制的。

      pam-0.72-7lp.i386.rpm PAM(Pluggable Authentication Modules)提供了一个方法供系统管理者建立了一套认证的政策,而不需要重新编译一套认证程序。有了PAM,你可以控制这些认证模块如何的结合程序,利用编辑一个组态档完成。大部分Linux的使用者可能永远不会接触到这些组态档,当你使用RPM文件安装程序需要认证时,他们会对正常的密码认证作需要的改变。然而,你可能想要改变你的组态架构,在这时候你就必须要了解设定档。   

      在其设定档里头,定义了两个字符符号,做为注解(#)以及延伸本行至下一行的连接符号(\)。   

    在「/etc/pam.conf」里的环境设定格式如下:

     service-name module-type control-flag module-path arguments   

    在「/etc/pam.d/」目录里的任何一个档案,有着下列的格式:

     module-type control-flag module-path arguments

      我们可以发现上面所叙述的两个格式中,除了第一个叙述多了「service-name」外,其余都是一样的,所以我们就一起介绍吧。

    ‧service-name
      大部份都是与应用程序有相同的名称,如「ftpd」、「rlogin」、「su」等,其中的「OTHER」可以被指定成为与其它「module」共享,但是只要应用程序的「module」被指定后「OTHER」便失去作用。

    ‧module-type
     包含了下列四种模式之一:

    -auth
       本module提供两种方式来验证使用者,第一种就是要求使用者输入密码做为确认的依据,第二种可以允许群组(group)以「membership」、或其它特别被允许的使用者。   

    -account
      此module不执行验证使用者的纪录资料,而只搜寻有关日期的时间基本资料,以正确地了解系统的资源(最大的使用者数),或者只允许登录在使用者要求的根目录下,而且是在「console」模式下。

    -session
      此module最主要目的,是在使用者他们被服务到的前后,作一些关联性的工作,而这些工作,包含了开启或关闭相关纪录性资料的转换、Mounting目录等等的工作。   
    -password
       这最后的module,会要求更新有关使用者的特征资料,有一种 module就是基于第一个module-type来验证(auth)每一个口令询问或响应。

    ‧config-flag   
      此项是用来指出与module联结的PAM链接库的成功与否,由于module间是依序堆栈放置的,因此便由config-flag来决定每一个module彼此之间关联的重要性。由于应用程序本身无法得知在「/etc/pam.conf」或「/etc/pam.d/」档案里的module是否成功或失败,因此需要藉由Linux-PAM libary来获得成功或是失败的响应值。   config-flag的简单句型是一个单一的keywords,而这个keywords则是重要地指出特定module成功与失败的相关结合。config-flag所用的keywords有下列四种:   

    -required
      本项指出在此module成功时,可以轻易的达成module-type所提出的要求,当失败时,此module将不会对使用者明白的显示出来,会一直到所有剩余的modules(与 module-type相同)被执行后才会显现给使用者知道。   

    -requisite
      此项跟required相似,不同处在某一个module传回一个错误值后,程序会直接将值回传给应用程序。这个错误值包含了第一个required或requisite的错误,值得注意的是,此项可以尽可能的保障使用者,在面对不安全的传输媒介下,有机会可以输入密码登入。可以料想的到,这样无疑是宣告给居心不良的人,可以有效的联结到此系统中。这样的动作必须考虑,面对一个并非毫无关系且充满敌意的环境下,暴露具敏感性的密码其危险性。

    -sufficient
      在module-type本身正确的执行结果之下,此module成功的话,可以视为完全的满足了Linux-PAM library的需求。在这样的情况下,没有之前required的错误,没有更多堆置的module形态下可以被提出来执行的。(注意:在这种例子下,后来的required 不会被提出来执行)。在同样module-type正确的执行下,此module失败将不会导致满足需求上的重大损失。

    -optional
      此项config-flag正如其文字上含意,不会对服务中使用者的要求,作出是否成功或是失败的决定。
      一般来说,Linux-PAM在做决定时,将会忽略此module的成功与否,然而在缺乏任何先前或之后已被堆置module明确的成功与失败结果下,此module将决以自然的方式响应要求。

    ‧module-path:
      此项为一可读取的目标档案,以绝对路径的方式来,表示档案的位置和名称,通常没给位置的话,内定的路径为「/usr/lib/security/」。

    ‧args:
      此项是一个当被呼叫出来执行时,可以通过module的名单。对一个典型的Linux shell 命令来说,十分像arguments,通常对任何一个所给的module其正确的agrument是具有选择性和正确性。然而在遭遇到一个错误的argument时,错误的argument通常会被module所忽略掉,而这module会要求将所发生的错误写入syslog(3)里。

      一般来说,在这个环境设定档里的每一行的格式,没有被固定下来的话,将会造成验证程序上发生重大的错误。一个执行上的错误,将会随着呼叫syslog(3)时,一起写入系统的纪录文件之中。

      Linux-PAM可以完全使用「pam.conf」或「pam.d/」其中一个,也就是说「pam.conf」和「pam.d/」 两者只要其中之一就可以了,但在两者同时都存在的情况下,「pam.d/」的效力将会大于「pam.conf」,也就是说Linux-PAM只会使用到「pam.d/」而已。

      PAM的认证是可以堆栈的(stacked),因此可以使用多重模块。例如 rlogin 一般使用至少两个认证方法:假如 rhosts 认证成功,就继续接用另一模块,假如失败,那就只做到密码认证的过程。新的模块可以任何时候加进,然后那些对PAM-aware的程序就可以利用这些模块。

      譬如你有一个 one-time-passwd calculator 系统,那么你就可以写一个模块支持它(如何写PAM模块的文件在/usr/share/doc/pam*),PAM-aware程序可以使用新的模块并且和新的one-time-based calculator运行而不需要重新修改和编译。 1


    2.2.19 passwd

      Passwd (passwd-0.64.1-2lp.i386.rpm)是用来更新使用者验证标记的它被设定为须透过Linux-PAM API来运作。实质上,它会自我初始化为一个Linux-PAM的密码服务程序,并使用设定好的password模块来对使用者的密码作验证和更新。

    以下是一个简单的对Linux-PAM设定档做设定以获得Passwd 服务的范例:

    #
    # passwd service entry that does strength checking of
    # a proposed password before updating it.
    #
    passwd password requisite \
      /usr/lib/security/pam_cracklib.so retry=3
    passwd password required \
      /usr/lib/security/pam_pwdb.so use_authtok
    #

    注意:
    .它并不需要其它的模块型态来使其正常运作。
    .请不要写为记住密码。
    .请勿使用容易被猜中的密码。

    要获得如何在Linux-PAM上对这个工具做较好的设定,您可利用以下网站的Linux-PAM System Administrators Guide:

    http://parc.power.net/morgan/Linux-PAM/index.html


    2.2.20 pidentd

      pidentd(pidentd-3.0.10-6lp.i386.rpm)套件包含了identd,它可执行RFC1413办识服务器。Identd会找寻特定的TCP/IP联机,并送回使用者名称或有关拥有这个联机的程序的其它信息。


    2.2.21 piranha

      由piranha-0.4.12-2lp.i386.rpm提供,功能请参考架设服务器的cluster 部份。


    2.2.22 portmap

      Portmap( portmap-4.0-20lp.i386.rpm)是一个能将RPC程序号码转换为DARPA协议的服务器,你必须执行它才能进行RPC呼叫。

      当一个 RPC服务器被激活后,它会告诉portmap它会听取那个端口位的讯息,和它准备提供服务给那一个 RPC程序号码,它会先与在服务器机器上的portmap连系,以确定RPC封包应被送往那个埠位。

      Portmap必须在任何RPC服务器被呼用前激活。

      一般情况下,portmap就像任何其它的daemon一样会分散和切断与终端机的关连,然后使用syslog(3)来记录错误讯息。 Portmap的可用选项包括:

    -d (除错)
      它可避免portmap被当做daemon使用,并使得错误和除错讯息被列示到标准错误输出。
    -v (更详细信息)
      执行portmap以获得更详细信息

    您可参考tcpd((8)), hosts_allow((5)) and hosts_access((5))手册页来获得更多相关信息。

    2.2.23 PVM(Parallel Virtual Machine)

      Pvm( pvm-3.4.3-5lp.i386.rpm)是一个容许使用者交互式询问和修改虚拟机器的独立PVM进程。它的主控台能在虚拟机器上的任何主机被多次的激活与关闭,而不会影响PVM或任何其它正在运行的应用程序。

      当pvm被激活后,它会判定 PVM是否已在执行,及是否在这个主机上已自动执行pvmd3,并传送指令列选项与主机档案给pvmd3,所以PVM不须要靠主控台来执行,而其一旦被激活后,主控台会提示如下:

     pvm>

    您可利用下列的主控台指令,兹介绍如下:

     add hostname(s) - 增加主机到虚拟机器
     alias -定义/列示指令代名
     conf -列示虚拟机器设定值
     delete hostname(s) -自虚拟机器上删除主机
     echo - Echo自变量
     export - 增加环境变量来产生输出列表
     halt - 停止pvmds
     help [command] - 列出指令的说明
     id - 列出主控台进程代号
     jobs - 列出执行中的工作
     kill task-tid - 结束进程
     mstat host-tid -显示主机状态
     ps -a - 显示PVM进程
     pstat task-tid - 显示进程状态
     quit - 退出主控台
     reset - 杀掉所有进程
     setenv - 显示/设定环境变量
     sig signum task - 传送讯号给进程
     spawn [opt] a.out - 产生进程

    其选项包括:

     -(count) 进程数,预设为1
     -(host) 在主机上产生,预设为任何主机
     -(ARCH) 在主机上产生ARCH
     -? 激活除错
      -> 重新导向进程输出到主控台
      -> file 重新导向进程输出到档案
      ->>file 重新导向进程输出附加到档案
     trace - 设定/显示追踪事件屏蔽
     unexport - 自产出的输出列表移除环境变量
     unalias - 不定义指令代名
     version - 显示版本

      pvm 会在从tty读取指令前先读取 $HOME/.pvmrc,所以它可以用来自订主控台环境,如:

     alias ? help
     alias j jobs
     setenv PVM_EXPORT DISPLAY
     # print my id
     echo new pvm shell
     id

    以下是一个应用范例供参:

    pvm
    在本地主机执行pvmd3或以联机方式执行pvmd3

    pvm hostfile
    激活主控台和pvmd3,其会先后读取主机档案,并将列出的计算机加到虚拟机器上


    2.2.24 pwdb (Password Database Library)

      Pwdb(pwdb-0.61-1lp.i386.rpm)套件包含了密码数据库libpwdb,它是一个执行一般使用者信息的数据库 ,且是专门针对Linux的AM (Pluggable Authentication Modules)设计的。可让使用者用来设定存取和管理包括NIS 和Radius的 /etc/passwd, /etc/shadow和网络验证系统。


    2.2.25 PXE(Preboot eXecution Environment)

      pxe(xe-0.1-15lp.i386.rpm)是一个网络开机服务器,它的套件件包含了PXE (Preboot eXecution Environment)服务器和当Linux 要从Linux PXE 服务器上的开机磁盘影像文件开机时,所需要的编码位等。


    2.2.26 quota

      quota(quota-2.00pre3-3lp.i386.rpm)套件包含了可用来监控和限制使用者和群组在每个档案系统中可使用磁盘的系统管理工具。

      使用quota可显示使用者和群组磁盘使用与限制,而默认值则仅显示使用者部份,其可用旗标如下:

     -g 列出使用者所属群组的群组限额l

     -u 这个旗标等同默认值.

     -v 显示档案系统上未指定作储存用的限额

     -q 列出较简要的讯息,仅包含档案系统上超出限额的信息

      同时使用 -g和 -u 会同时显示使用者限额和使用者所属群组限额

      只有超级使用者可以使用-u 旗标和替代的user自变量来检视其它使用者的限制,非超级使用者能用

      -g旗标和替代的group自变量来检视其所属群组的限制。 -q旗标的优先权高于-v旗标。

      Quota会回报所有列在/etc/fstab上的档案系统限额,而对NFS的档案系统,则可呼叫伺服机器上的一个rpc.rquotad来获得相关信息。假如quota退出时出现一个非零的状态值,则表示有一个或多个档案系统超出限额。


    2.2.27 routed

      routed(routed-0.16-6lp.i386.rpm)是一个网络路由daemon,它是在开机时被激活来管理网络路由表的。 Routed系使用Xerox NS路由信息协议的一个变种版来确保最新的核心路由表信息,它使用一个能用在多种地址型态的通用协议,但目前仅被用在丛集网络的网际网络路由。

      相关的资料你可参考Internet Transport Protocols, XSIS 028112, Xerox System Integration Standard.


    2.2.28 rsync

      rsync(rsync-2.4.1-3lp.i386.rpm)是一个和rcp功能很像的程序,然具有较多的功能选项,且使用rsync远程更新协议(remote-update protocol)可在既有档案存在的情形下大幅加速档案传送的速度。

      rsync远程更新协议可让rsync在利用网络传送档案时,仅就两组档案不同的部份进行传送,其所采用的机制是非常有效率的总和搜寻查核(checksum-search)算法。

    至于较详尽的相关应用,请参考rsyncd.conf档及以下网站:

    http//linuxcommand.sourceforge.net


    2.2.29 rsh

      Rsh是一个远程shell程序,当您使用rsh( rsh-0.16-13lp.i386.rpm)时,它会连结到特定的主机,并执行所指定的命令。它会复制它的标准输入到远程的指令中、并复制远程指令的标准输出到它的标准输出,和复制远程指令的标准错误到它的标准错误。如此则rsh能接收任何端口位的标准错误信息。

      有关中断、退出和结束讯号皆会被传到远程的指令中,而rsh通常会在远程指令终结时结束

      在rsh登入目录的.k5login档中,每个使用者可能会有其私有的授权列表,这个档案中的每一行应包含一个Kerberos原则的名称,其形式如principal/instance@realm.,假如有一个~/.k5login档的话,则当其在经原使用者该档案内的一个主名称验证无误后,这个帐户就会被授权存取。

      否则若经验证的原有使用者能被关连到使用"aname -> lname"关连法则(细节请参考krb5_anadd)的本地帐号的话,则这个原有使用者将被授权存取这个帐号。


    2.2.30 rusers

      rusers(rusers-0.16-5lp.i386.rpm)指令的功能和who很像,但它是用来列示在本地网络上所有机器的主机的。对每个向rusers响应的主机,它会以分行的方式列出目前登入的所有主机名称及使用者名称,且rusers会等待一分钟的时间来抓发较晚响应者的信息。

    在此提供本指令的选项说明如下:

     -a 列出所有响应的机器,即使无人登入也一样

     -l 列出一个长格式的列表,内容包括使用者名称,主机名称,使用者登入的tty,使用者登入的日期和时间,使用者开始用键盘键入资料起算总共花用的时间及假如可能的话,远方主机是从何处登入的信息


    2.2.31 sslwrap

      sslwrap( sslwrap-2.0.5-2lp.i386.rpm)是一个简单的Unix服务程序,它会待在任何简单的TCP服务器如POP3, IMAP, SMTP等,并对所有联机的资料以TLS/SSL进行加密。它使用OpenSSL 来支持SSL version 2 and 3,它也能在没有inetd的情况下运作,且能对放在其它计算机上的资料进行加密。

      Sslwrap系作用于您既有的服务器上的,且它不要求您对既有的服务器作任何修改。


    2.2.32 tcp_wrappers

      此程序包含于tcp_wrappers-7.6-11lp套件中,使用tcp_wrappers可以限制外界联机的范围,拒绝不安全地带的联机。

      Linux Linux预设会帮你装tcp_wrappers,当你装了rpm文件后,程序会自动改掉/etc/inetd.conf内的设定。所以你在/etc/inetd.conf看到譬如telenet服务telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd/usr/bin/tcpd即是tcp_wrappers的执行档。如此你即可使用/etc/hosts.allow及/etc/hosts.deny来限制使用,系统读取的顺序是先 /etc/hosts.deny,然后再/etc/hosts.allow,所以你可用hosts.allow里的范围,来压过hosts.deny。所以你修改的顺序,应该是先改/etc/hosts.deny,范例如下:

    # service : person
    ALL: some.host.name, .some.domain #某个领域,某个主机拒绝所有服务。
    ALL EXCEPT in.fingerd: other.host.name, .other.domain
    #其它领域,其它主机只能用finger服务。

      至于/etc/hosts.allow档设定方法和/etc/hosts.deny一样。更详细的方法请执行#man /etc/hosts.deny 或 #man /etc/hosts.allow。


    2.2.33 tcpdump

      一个命令列模式的网络监控工具,tcpdump可以显示出某个时间网络上流过封包的表头(header),但是当然只限于同一领域,在这里列出几个范例:

    监控某台主机(假设主机名称reddust)
    #tcpdump host reddust
    监控reddust流出的封包
    #tcpdump src host reddust
    监控reddust和backtrue
    #tcpdump host reddust and backtrue
    监控名为 seasad 的 gateway 的 ftp 流量
    #tcpdump gateway seasad and port ftp
    其它的命令列选项:
    选项
    功 能

    -c count
    接收多少封包就离开,count表示封包数目。

    -F file
    从档案读取封包过滤的规则

    -i interface
    倾印(dump)某个接口的封包,譬如eth0

    -n
    不要将IP转换成名称

    -t
    不要在某一列显示时间

    -w file
    将倾印出来的资料写入档案




    以上只是列出大概,更详细的内容可执行#man tcpdump

    2.3 关于网络安全的网站

    http://www.cert.org
      为计算机紧急事件回报小组CERT(Computer Emergency Report Team)的正式站台, 常发布一些安全上的消息,譬如系统的漏洞或程序上的错误。有时候即使一般使用者照着所发布文件的操作,就可轻易的入侵一个站台。因此身为系统管理者更应该要注意这些新的讯息。

    http://www.cert.org.tw
    同上,但此为位于国内的组织。
    发布人:gemini 来自:www.linpus.com.tw