Monday, May 24, 2010

2010 P1: FINAL PRESENTATION MAY 26 2010

 Eli present




















jonathan present





























wee yong present























Eli present demo with explaination




Network File System (NFS)

What is NFS?
Network File System (NFS) is a protocol which allows user on a client computer to access files over a network similar to how local storage is being accessed. Being built on Open Network Computing Remote Procedure Call (ONC RPC) systems and is an opened standard defined in RFCs, it means anybody would be able to implement the protocol.

Benefits of NFS
• Local machine use less disk space because commonly used data can be stored on a single machine and still remain accessible to others over the network.
• Ability to provide single home directory for user on every machine throughout the network.
• Storage devices such as floppy disks, CDROM drives, and Zip® drives can be used by other machines on the network. This may reduce the number of removable media drives throughout the network.

Install NFS
There are 3 ways to install NFS:
  1. Installing through YUM
  2. Install RPM packages
  3. Build from source
Let us take a look at the first 2 methods.

Yum (Yellowdog Updater Modified)
Install through Yum is simple. Just execute the following command to install.
# yum install nfs-utils

RPM Package Manager
Installing through RPM Package manager requires a bit more work. Normally we will install from the CD/DVD-ROM provided. By in any case a CD/DVD-ROM is not available; we might have to download the rpm file from online source.
a.Navigate to the source, which most like be the CD/DVD-ROM. The source CD/DVD-ROM have to be inserted first

#cd /media/RHEL_5.3\x86_64\DVD/Server

b.Installing through RPM
# rpm -ivh nfs-utils-1.0.6-2tr.i586.rpm

Configuring NFS serverEnabling NFS
Before start NFS, you need to have the following services already running:

# service nfs start
# service portmap start
#service nfslock start


Both services will start on boot using the following command:
#chkconfig nfs on
#chkconfig portmap on


To verify the exports is exporting properly, and use the following command:
#showmount –e ipaddress-of-nfs-server

You need to restart NFS daemon to apply changes in the /etc/exports file. It depends on your Linux distribution. The restarting of NFS may diff. Debian users:
#/etc/init.d/nfs-kernel-server restart

Linux users
#/etc/init.d/nfs restart

If add more NFS exports to the /etc/exports file, you have to either restart NFS daemon or run commands exportfs:
#exportfs -ra

Troubleshooting
Problem 1: Unable see file mounted file system
Solution:
1. Check if file system is mounted.(e.g nano /proc/mounts OR mount -f )
2a.If file system is mounted; it may be that another file system is mounted on top of it.
  • unmount and remount both volume, or
  • export file system on server before mounting(Restart the NFS server)
  • 2b.If file system is not mounted, refer to problem 3
Problem 2: File request hang /access to file timeout
Solution:
i. Refer to problem 3.

Problem 3: Unable to mount a file
Error: Failed, reason given by server: Permission denied
Solution:
  • Check etc/exports to make sure client has the right kind of access right(read access =ro, read/write=rw )
  • Type the following to force the exports to be re-read
    ~]# exportfs -ra
  • Check /proc/fs/nfs/exports to make sure volume and client are listed correctly.
  • Try to login in to server from client via Telnet OR ssh
  • Type the following command to list the current connected users (one of the listings should be your login session and the name of your client machine as the server sees it. Try using this machine name in your /etc/exports entry. Try to ping the client from the server and vice-visa. If this doesn't work, or if there is packet loss, you. It might be cause by a lower level network problem)
    ~]# who
  • It is not possible to export both a directory and its child (for example both /usr and /usr/local). You should export the parent directory with the necessary permissions, and all of its subdirectories can then be mounted with those same permissions.

    Error: RPC program not registered (Another RPC error)
    Solution:
  • Check whether NFS is running; execute the command rpcinfo with option –p on the server. You should be able to see something like this :

    ~]# rpcinfo -p
    program vers proto port
    100000 2 tcp 111 portmapper
    100000 2 udp 111 portmapper
    100011 1 udp 749 rquotad
    100011 2 udp 749 rquotad
    100005 1 udp 759 mountd
    100005 1 tcp 761 mountd
    100005 2 udp 764 mountd
    100005 2 tcp 766 mountd
    100005 3 udp 769 mountd
    100005 3 tcp 771 mountd
    100003 2 udp 2049 nfs
    100003 3 udp 2049 nfs
    300019 1 tcp 830 amd
    300019 1 udp 831 amd
    100024 1 udp 944 status
    100024 1 tcp 946 status
    100021 1 udp 1042 nlockmgr
    100021 3 udp 1042 nlockmgr
    100021 4 udp 1042 nlockmgr
    100021 1 tcp 1629 nlockmgr
    100021 3 tcp 1629 nlockmgr
    100021 4 tcp 1629 nlockmgr
  • If you get this type of error “No Remote Programs Registered”, this means you have to check /etc/hosts.allow and /etc/hosts.deny to make sure that the client is actually accessible.
  • If the entries appear to be correct, check /etc/hosts (or your DNS server) and make sure that the machine is listed correctly and also make sure you can ping the server from the client.
  • Check error log for helpful messages: Authentication errors from bad /etc/hosts.allow entries will usually appear in /var/log/messages, but may appear somewhere else depending on how your system logs are set up.
  • The man pages for syslog can help you figure out how to set up logs. Finally, some older operating systems may behave badly when routes between the two machines
    are asymmetric.
  • You can try executing the following command from the client and see if the word "asymmetric" shows up anywhere in the output. If it does then this may be causing packet loss. However asymmetric routes are not usually a problem on recent Linux distributions.
    Tracepath
  • If you get the error “Remote system error” It means that there is no route to host, but if you can ping the server correctly, then you might be having an overzealous firewall. Check any firewalls that may be set up, either on the server or on any routers in between the client and the server.
Problem 4: No access rights to files on mounted volume
Solution:1. If it is a write permission problem, check the export options on the server by looking at /proc/fs/nfs/exports and make sure the filesystem is not exported read-only.
  • You will need to re-export it read/write (don't forget to run exportfs -ra after editing /etc/exports).
  • Also, check /proc/mounts and make sure the volume is mounted read/write (although if it is mounted read-only you ought to get a more specific error message). If not then you need to re-mount with the rw option.
  • If it is the username mappings problem, it is different depending on whether you are trying to do this as root or as a non-root user.
    2a.If you are not root, then usernames may not be in sync on the client and the server.
  • Execute the following on both the client and the server and make sure they give the same UID number. If they don't then you are having problems with NIS, NIS+, rsync, or whatever system you use as sync usernames:
    ~]# id
  • Check group names to make sure that they match as well.
  • Also, make sure you are not exporting with the all_squash option. If the user names match then the user has a more general permissions problem unrelated to NFS.

    2b.If you are root, then you are probably not exporting with the no_root_squash option;
  • Check /proc/fs/nfs/exports or /var/lib/nfs/xtab on the server and make sure the option is listed.
  • Writing to the NFS server as root is a bad idea unless you have an urgent need -- which is why Linux NFS prevents it by default.
  • If you have root squashing and you want to keep it as that setting, you can only try to get root to have the same permissions on the file that the user nobody should have, then remember that it is the server that determines which uid root gets mapped to. By default, the server uses the UID and GID of nobody in the /etc/passwd file, but this can also be overridden with the anonuid and anongid options in the /etc/exports file. Make sure that the client and the server agree about which UID nobody gets mapped to.
Problem 5: File request hang /access to file timeout
Solution:
  • Upgrade to a 2.4 kernel should solve the problem.
  • Export with the no_wdelay option forces the program to use o_sync() instead, which may prove faster.
Problem 6: Strange error/log message
Solution:1. Message in the following format:
Jan 7 09:15:29 server kernel: fh_verify: mail/guest permission failure, acc=4, error=13
Jan 7 09:23:51 server kernel: fh_verify: ekonomi/test permission failure, acc=4, error=13
The messages are harmless.
2. The following messages frequently appear in the logs:
Kernel: nfs: server server.domain.name not responding, still trying
Kernel: nfs: task 10754 can't get a request slot
Kernel: nfs: server server.domain.name OK

The second line message means that the client-side RPC code has detected a lot of timeouts (perhaps due to network congestion, perhaps due to an overloaded server), and is throttling back the number of concurrent outstanding requests in an attempt to lighten the load. The cause of these messages is basically sluggish performance.
3. After mounting, the following message will appear:
nfs warning: mount version older than kernel
Upgrade your mount package and/or am-utils. (If for some reason upgrading is a problem, you may be able to get away with just recompiling them so that the newer kernel features are recognized at compile time).

4. Errors in startup/shutdown log for lockd
nfslock: rpc.lockd startup failed
This message is also harmless. Older versions of rpc.lockd needed to be started up manually, but newer versions are started automatically by nfsd. Many of the default startup scripts still try to start up lockd by hand, in case it is necessary. You can alter your startup scripts if you want the messages to go away.

5. The following message appears in the logs:
kmem_create: forcing size word alignment - nfs_fh
This results from the file handle being 16 bits instead of a multiple of 32 bits, which makes
the kernel grimace. It is harmless.

Problem 7: Real permission doesn’t match permission in /etc/exports
Solution:
/etc/exports are very sensitive to whitespace - so the following statements are not the same:

/export/dir hostname(rw,no_root_squash)
/export/dir hostname (rw,no_root_squash)


The first line will give hostname read/write to /export/dir without squashing root privileges. The second line will give hostname read/write privileges with root squash and it also grant everyone else read/write access, without squashing root privileges.

Problem 8: Flaky and Unreliable behavior
Solution:
Simple commands such as ls will work, but anything that transfers a large amount of information will causes the mount point to lock.
This could be one of two problems:
1. It will happen if you have ipchains on at the server and/or the client and you are not allowing fragmented packets through the chains. Allow fragments from the remote host and you'll be able to function again.

2. You may be using a larger rsize and wsize in your mount options than the server supports. Try reducing rsize and wsize to 1024 and seeing if the problem goes away. If it does, then increase them slowly to a more reasonable value.

Problem 9: nfsd won’t start
Solution:
Check the file /etc/exports and make sure root has read permission. Check the binaries and make sure they are executable. Make sure your kernel was compiled with NFS server support. You may need to reinstall your binaries if none of these ideas helps.

Problem 10: File corruption when having multiple client
Solution:
If a file has been modified within one second of its previous modification and left the same size, it will continue to generate the same inode number. Because of this, constant reads and writes to a file by multiple clients may cause file corruption. Fixing this bug requires changes deep within the filesystem layer.

Tuesday, May 18, 2010

孙子兵法译文

【始计第一】


1.孙子说:战争是一个国家的头等大事,关系到军民的生死,国家的存亡,是不能不慎重周密地观察、分析、研究。



2.因此,必须通过敌我双方五个方面的分析,七种情况的比较,得到详情,来预测战争胜负的可能性。



3. 一是道,二是天,三是地,四是将,五是法。道,指君主和民众目标相同,意志统一,可以同生共死,而不会惧怕危险。天,指昼夜、阴晴、寒暑、四季更替。地,指地势的高低,路程的远近,地势的险要、平坦与否,战场的广阔、狭窄,是生地还是死地等地理条件。将,指将领足智多谋,赏罚有信,对部下真心关爱,勇敢果断,军纪严明。法,指组织结构,责权划分,人员编制,管理制度,资源保障,物资调配。对这五个方面,将领都不能不做深刻了解。了解就能胜利,否则就不能胜利。



4.所以,要通过对双方各种情况的考察分析,并据此加以比较,从而来预测战争胜负。哪一方的君主是有道明君,能得民心?哪一方的将领更有能力?哪一方占有天时地利?哪一方的法规、法令更能严格执行?哪一方资源更充足,装备更精良,兵员更广大?哪一方的士兵训练更有素,更有战斗力?哪一方的赏罚更公正严明?通过这些比较,我就知道了胜负。



5. 将领听从我的计策,任用他必胜,我就留下他;将领不听从我的计策,任用他必败,我就辞退他。听从了有利于克敌制胜的计策,还要创造一种势态,作为协助我方军事行动的外部条件。势,就是按照我方建立优势、掌握战争主动权的需要,根据具体情况采取不同的相应措施。



6.用兵作战,就是诡诈。因此,有能力而装做没有能力,实际上要攻打而装做不攻打,欲攻打近处却装做攻打远处,攻打远处却装做攻打近处。对方贪利就用利益诱惑他,对方混乱就趁机攻取他,对方强大就要防备他,对方暴躁易怒就可以撩拨他怒而失去理智,对方自卑而谨慎就使他骄傲自大,对方体力充沛就使其劳累,对方内部亲密团结就挑拨离间,要攻打对方没有防备的地方,在对方没有料到的时机发动进攻。这些都是军事家克敌制胜的诀窍,不可先传泄于人也。



7.在未战之前,经过周密的分析、比较、谋划,如果结论是我方占据的有利条件多,有八、九成的胜利把握;或者如果结论是我方占据的有利条件少,只有六、七成的胜利把握,则只有前一种情况在实战时才可能取胜。如果在战前干脆就不做周密的分析、比较,或分析、比较的结论是我方只有五成以下的胜利把握,那在实战中就不可能获胜。仅根据庙算的结果,不用实战,胜负就显而易见了。





【作战第二】

1.孙子说:要兴兵作战,需做的物资准备有,轻车千辆,重车千辆,全副武装的士兵十万,并向千里之外运送粮食。那么前后方的军内外开支,招待使节、策士的用度,用于武器维修的胶漆等材料费用,保养战车、甲胄的支出等,每天要消耗千金。按照这样的标准准备之后,十万大军才可出发上战场。



2.因此,军队作战就要求速胜,如果拖的很久则军队必然疲惫,挫失锐气。一旦攻城,则兵力将耗尽,长期在外作战还必然导致国家财用不足。如果军队因久战疲惫不堪,锐气受挫,军事实力耗尽,国内物资枯竭,其他诸侯必定趁火打劫。这样,即使足智多谋之士也无良策来挽救危亡了。所以,在实际作战中,只听说将领缺少高招难以速胜,却没有见过指挥高明巧于持久作战的。战争旷日持久而有利于国家的事,从来没有过。所以,不能详尽地了解用兵的害处,就不能全面地了解用兵的益处。



3.善于用兵的人,不用再次征集兵员,不用多次运送军粮。武器装备由国内供应,从敌人那里设法夺取粮食,这样军队的粮草就可以充足了。国家之所以因作战而贫困,是由于军队远征,不得不进行长途运输。长途运输必然导致百姓贫穷。驻军附近处物价必然飞涨,物价飞涨,必然导致物资枯竭,物财枯竭,赋税和劳役必然加重。在战场上,军力耗尽,在国内财源枯竭,百姓私家财产损耗十分之七。公家的财产,由于车辆破损,马匹疲惫,盔甲、弓箭、矛戟、盾牌、牛车的损失,而耗去十分之六。



4.所以明智的将军,一定要在敌国解决粮草,从敌国搞到一钟的粮食,就相当于从本国启运时的二十钟,在当地取得饲料一石,相当于从本国启运时的二十石。



5.所以,要使士兵拼死杀敌,就必须怒之,激励之。要使士兵勇于夺取敌方的军需物资,就必须以缴获的财物作奖赏。所以,在车战中,抢夺十辆车以上的,就奖赏最先抢得战车的。而夺得的战车,要立即换上我方的旗帜,把抢得的战车编入我方车队。要善待俘虏,使他们有归顺之心。这就是战胜敌人而使自己越发强大的方法。



6.所以,作战最重要、最有利的是速胜,最不宜的是旷日持久。真正懂得用兵之道、深知用兵利害的将帅,掌握着民众的的生死,主宰着国家的安危。





【谋攻第三】

1.孙子说:战争的原则是:使敌人举国降服是上策,用武力击破敌国就次一等;使敌人全军降服是上策,击败敌军就次一等; 使敌人全旅降服是上策,击破敌旅就次一等;使敌人全卒降服是上策,击破敌卒就次一等;使敌人全伍降服是上策,击破敌伍就次一等。所以,百战百胜,算不上是最高明的;不通过交战就降服全体敌人,才是最高明的。



2.所以,上等的军事行动是用谋略挫败敌方的战略意图或战争行为,其次就是用外交战胜敌人,再次是用武力击败敌军,最下之策是攻打敌人的城池。攻城,是不得已而为之,是没有办法的办法。制造大盾牌和四轮车,准备攻城的所有器具,起码得三个月。堆筑攻城的土山,起码又得三个月。如果将领难以拟制焦躁情绪,命令士兵象蚂蚁一样爬墙攻城, 尽管士兵死伤三分之一,而城池却依然没有攻下,这就是攻城带来的灾难。所以善用兵者,不通过打仗就使敌人屈服,不通过攻城就使敌城投降,摧毁敌国不需长期作战,一定要用“全胜”的策略争胜于天下,从而既不使国力兵力受挫,又获得了全面胜利的利益。这就是谋攻的方法。



3.所以,在实际作战中运用的原则是:我十倍于敌,就实施围歼,五倍于敌就实施进攻,两倍于敌就要努力战胜敌军,势均力敌则设法分散各个击破之。兵力弱于敌人,就避免作战。所以,弱小的一方若死拼固守,那就会成为强大敌人的俘虏。



4.将帅,国家之辅助也。辅助之谋缜密周详,则国家必然强大,辅助之谋疏漏失当,则国家必然衰弱。所以,国君对军队的危害有三种:不知道军队不可以前进而下令前进,不知道军队不可以后退而下令后退,这叫做束缚军队;不知道军队的战守之事、内部事务而同理三军之政,将士们会无所适从;不知道军队战略战术的权宜变化,却干预军队的指挥,将士就会疑虑。军队既无所适从,又疑虑重重,诸侯就会趁机兴兵作难。这就是自乱其军,坐失胜机。



5.所以,预见胜利有五个方面:能准确判断仗能打或不能打的,胜;知道根据敌我双方兵力的多少采取对策者,胜;全国上下,全军上下,意愿一致、同心协力的,胜;以有充分准备来对付毫无准备的,胜;主将精通军事、精于权变,君主又不加干预的,胜。以上就是预见胜利的方法。



6.所以说:了解敌方也了解自己,每一次战斗都不会有危险;不了解对方但了解自己,胜负的机率各半;既不了解对方又不了解自己,每战必败。





【军形第四】

1.孙子说:以前善于用兵作战的人,总是首先创造自己不可战胜的条件,并等待可以战胜敌人的机会。使自己不被战胜,其主动权掌握在自己手中;敌人能否被战胜,在于敌人是否给我们以可乘之机。所以,善于作战的人只能够使自己不被战胜,而不能使敌人一定会被我军战胜。所以说,胜利可以预见,却不能强求。



2.敌人无可乘之机,不能被战胜,且防守以待之;敌人有可乘之机,能够被战胜,则出奇攻而取之。防守是因为我方兵力不足,进攻是因为兵力超过对方。善于防守的,隐藏自己的兵力如同在深不可测的地下;善于进攻的部队就象从天而降,敌不及防。这样,才能保全自己而获得全胜。



3.预见胜利不能超过平常人的见识,算不上最高明:交战而后取胜,即使天下都称赞,也不算上最高明。正如举起秋毫称不上力大,能看见日月算不上视力好,听见雷鸣算不上耳聪。古代所谓善于用兵的人,只是战胜了那些容易战胜的敌人。所以,真正善于用兵的人,没有智慧过人的名声,没有勇武盖世的战功,而他既能打胜仗又不出任何闪失,原因在于其谋划、措施能够保证,他所战胜的是已经注定失败的敌人。所以善于打战的人,不但使自己始终处于不被战胜的境地,也决不会放过任何可以击败敌人的机会。



4.所以,打胜仗的军队总是在具备了必胜的条件之后才交战,而打败仗的部队总是先交战,在战争中企图侥幸取胜。善于用兵的人,潜心研究致胜之道,修明政治,坚持致胜的法制,所以能主宰胜败。



5.兵法:一是度,即估算土地的面积,二是量,即推算物资资源的容量,三是数,即统计兵源的数量,四是称,即比较双方的军事综合实力,五是胜,即得出胜负的判断。土地面积的大小决定物力、人力资源的容量,资源的容量决定可投入部队的数目,部队的数目决定双方兵力的强弱,双方兵力的强弱得出胜负的概率。



6.获胜的军队对于失败的一方就如同用“镒”来称“铢”,具有绝对优势优势,而失败的军队对于获胜的一方就如同用“铢”来称“镒”。胜利者一方打仗,就象积水从千仞高的山涧冲决而出,势不可挡,这就是军事实力的表现。





【兵势第五】

1.治理大军团就象治理小部队一样有效,是依靠合理的组织、结构、编制;指挥大军团作战就象指挥小部队作战一样到位,是依靠明确、高效的信号指挥系统;整个部队与敌对抗而不会失败,是依靠正确运用“奇正”的变化:攻击敌军,如同用石头砸鸡蛋一样容易,关键在于以实击虚。



2.大凡作战,都是以正兵作正面交战,而用奇兵去出奇制胜。善于运用奇兵的人,其战法的变化就象天地运行一样无穷无尽,象江海一样永不枯竭。象日月运行一样,终而复始;与四季更迭一样,去而复来。宫、商、角、徵、羽不过五音,然而五音的组合变化,永远也听不完;红、黄、蓝、白、黑不过五色,但五种色调的组合变化,永远看不完;酸、甜、苦、辣、咸不过五味,而五种味道的组合变化,永远也尝不完。战争中军事实力的运用不过“奇”、“正”两种,而“奇”、“正”的组合变化,永远无穷无尽。奇正相生、相互转化,就好比圆环旋绕,无始无终,谁能穷尽呢。



3.湍急的流水所以能漂动大石,是因为使它产生巨大冲击力的势能;猛禽搏击雀鸟,一举可致对手于死地,是因为它掌握了最有利于爆发冲击力的时空位置,节奏迅猛。所以善于作战的指挥者,他所造成的态势是险峻的,进攻的节奏是短促有力的。“势险”就如同满弓待发的弩那样蓄势,“节短”正如搏动弩机那样突然。



4.旌旗纷纷,人马纭纭,双方混战,战场上事态万端,但自己的指挥、组织、阵脚不能乱;混混沌吨,迷迷蒙蒙,两军搅作一团,但胜利在我把握之中。双方交战,一方之乱,是因为对方治军更严整:一方怯懦,是因为对方更勇敢;一方弱小,是因为对方更强大。军队治理有序或者混乱,在于其组织编制;士兵勇敢或者胆怯,在于部队所营造的态势和声势;军力强大或者弱小,在于部队日常训练所造就的内在实力。



5.善于调动敌军的人,向敌军展示一种或真或假的军情,敌军必然据此判断而跟从;给予敌军一点实际利益作为诱饵,敌军必然趋利而来,从而听我调动。一方面用这些办法调动敌军,一方面要严阵以待。 6.所以,善战者追求形成有利的“势”,而不是苛求士兵,因而能选择人才去适应和利用已形成的“势”。善于创造有利“势”的将领,指挥部队作战就象转动木头和石头。木石的性情是处于平坦地势上就静止不动,处于陡峭的斜坡上就滚动,方形容易静止,圆形容易滚动。所以, 善于指挥打仗的人所造就的“势”,就象让圆石从极高极陡的山上滚下来一样,来势凶猛。这就是所谓的“势”。





【虚实第六】  

1.孙子说,大凡先期到达战地等待敌军的就精力充沛、主动安逸,而后到达战地匆忙投入战斗的就被动劳累。所以,善战者调动敌人而决不为敌人所调动。能够调动敌人使之自动前来我预想的战地,是用利益来引诱;能使敌人不能先我来到战场,是设置障碍、多方阻挠的结果。所以,敌人若处军安逸,能使之疲劳;若敌人粮食充足就能使之匮乏;若敌人安然不动,就能使他不得不行动起来。



2.通过敌人不设防的地区进军,在敌人预料不到的时间,向敌人预料不到的地点攻击。进军千里而不疲惫,是因为走在敌军无人抵抗或无力抵抗的地区,如入无人之境。我进攻就一定会获胜,是因为攻击的是敌人疏于防守的地方。我防守一定稳固,是因为守住了敌人一定会进攻的地方。所以善于进攻的,能做到使敌方不知道在哪防守,不知道怎样防守。而善于防守的,使敌人不知道从哪进攻,不知怎样进攻。深奥啊,精妙啊,竟然见不到一点形迹;神奇啊,玄妙啊,居然不漏出一点消息。所以能成为敌人命运的主宰。



3.进攻时,敌人无法抵御,那是攻击了敌人兵力空虚的地方;撤退时,敌人无法追击,那是行动迅速敌人无法追上。所以我军要交战,敌人就算垒高墙挖深沟,也不得不出来与我军交战,是因为我军攻击了它非救不可的要害之处;我军不想与敌军交战,虽然只是在地上画出界限权作防守,敌人也无法与我军交战,原因是我已设法改变了敌军进攻的方向。



4.所以,使敌军处于暴露状态而我军处于隐蔽状态,这样我军兵力就可以集中而敌军兵力就不得不分散。(如果敌我总兵力相当),我集中兵力与一点,而敌人分散为十处,我就是以十对一。这样,(在局部战场上)就出现我众敌寡的态势,在这种态势下,则我军所与战者用力少而成功多也。敌军不知道我军所预定的战场在哪里,就会处处分兵防备,防备的地方越多,能够与我军在特定的地点直接交战的敌军就越少。 所以防备前面,则后面兵力不足,防备后面,则前面兵力不足,防备左方,则右方兵力不足,防备右方,则左方兵力不足,所有的地方都防备,则所有的地方都兵力不足。兵力不足,全是因为分兵防御敌人;兵力充足,是由于迫使敌人分兵防御我。



5.所以,既预知与敌人交战的地点,又预知交战的时间,即使行军千里也可以与敌人交战。不能预知与敌人交战的地点,又不能预知交战的时间,仓促遇敌,就会左军不能救右军,右军不能救左军,前军不能救后军,后军不能救前军,何况远的相距十里,近的也有好几里呢。 依我对吴国所作的分析,越国虽然兵多,但对他的胜利又有什么帮助呢? 所以说:胜利是可以创造的,敌人虽然兵多,却可以使敌人无法有效地参加战斗。



6.通过仔细分析可以判断敌人作战计划的优劣得失;通过挑动敌人,可以了解敌方的活动规律;通过“示形”,可以弄清地形是否对敌有利;通过试探性进攻,可以探明敌方兵力布置的强弱多寡。所以,示形诱敌的方法运用得极其巧妙时,一点破绽也没有。到这种境地,即使隐藏再深的间谍也不能探明我的虚实,智慧高超的敌手也想不出对付我的办法。根据敌情采取制胜的策略,即使摆在众人面前,众人也理解不了。人们都知道我克敌制胜的方法,却不能知道我是怎样运用这些方法制胜的。所以战胜敌人的战略战术每次都是不一样的,应适应敌情灵活运用。



7.兵的性态就象水一样,水流动时是避开高处流向低处,用兵取胜的关键是避开设防严密实力强大的敌人而攻击其薄弱环节;水根据地势来决定流向,军队根据敌情来采取制胜的方略。所以用兵作战没有一成不变的态势,正如流水没有固定的形状和去向。能够根据敌情的变化而取胜的,就叫做用兵如神。金、木、水、火、土这五行相生相克,没有哪一个常胜;四季相继相代,没有哪一个固定不移,白天的时间有长有短,月亮有圆也有缺。万物皆处于流变状态。





【军争第七】

1.孙子说:用兵的原则,将领接受君命,从召集军队,安营扎寨,到开赴战场与敌对峙,没有比率先争得制胜的条件更难的事了。“军争”中最困难的地方就在于以迂回进军的方式实现更快到达预定战场的目的,把看似不利的条件变为有利的条件。所以,由于我迂回前进,又对敌诱之以利,使敌不知我意欲何去,因而出发虽后,却能先于敌人到达战地。能这么做,就是知道迂直之计的人。



2.“军争”为了有利,但“军争”也有危险。带着全部辎重去争利,就会影响行军速度,不能先敌到达战地;丢下辎重轻装去争利,装备辎重就会损失。卷甲急进,白天黑夜不休息地急行军,奔跑百里去争利,则三军的将领有可能会被俘获。健壮的士兵能够先到战场,疲惫的士兵必然落后,只有十分之一的人马如期到达;强行军五十里去争利,先头部队的主将必然受挫,而军士一般仅有一半如期到达;强行军三十里去争利,一般只有三分之二的人马如期到达。这样,部队没有辎重就不能生存,没有粮食供应就不能生存,没有战备物资储备就无以生存。



3.所以不了解诸侯各国的图谋,就不要和他们结成联盟;不知道山林、险阻和沼泽的地形分布,不能行军;不使用向导,就不能掌握和利用有利的地形。所以,用兵是凭借施诡诈出奇兵而获胜的,根据是否有利于获胜决定行动,根据双方情势或分兵或集中为主要变化。按照战场形势的需要,部队行动迅速时,如狂风飞旋;行进从容时,如森林徐徐展开;攻城掠地时,如烈火迅猛;驻守防御时,如大山岿然;军情隐蔽时,如乌云蔽日;大军出动时,如雷霆万钧。夺取敌方的财物,掳掠百姓,应分兵行动。开拓疆土,分夺利益,应该分兵扼守要害。这些都应该权衡利弊,根据实际情况,相机行事。率先知道“迂直之计”的将获胜,这就是军争的原则。



4.《军政》说:“在战场上用语言来指挥,听不清或听不见,所以设置了金鼓;用动作来指挥,看不清或看不见,所以用旌旗。金鼓、旌旗,是用来统一士兵的视听,统一作战行动的。既然士兵都服从统一指挥,那么勇敢的将士不会单独前进,胆怯的也不会独自退却。这就是指挥大军作战的方法。所以,夜间作战,要多处点火,频频击鼓;白天打仗要多处设置旌旗。这些是用来扰乱敌方的视听的。



5.对于敌方三军,可以挫伤其锐气,可使丧失其士气,对于敌方的将帅,可以动摇他的决心,可使其丧失斗志。所以,敌人早朝初至,其气必盛;陈兵至中午,则人力困倦而气亦怠惰;待至日暮,人心思归,其气益衰。善于用兵的人,敌之气锐则避之,趁其士气衰竭时才发起猛攻。这就是正确运用士气的原则。用治理严整的我军来对付军政混乱的敌军,用我镇定平稳的军心来对付军心躁动的敌人。这是掌握并运用军心的方法。以我就近进入战场而待长途奔袭之敌;以我从容稳定对仓促疲劳之敌;以我饱食之师对饥饿之敌。这是懂得并利用治己之力以困敌人之力。不要去迎击旗帜整齐、部伍统一的军队,不要去攻击阵容整肃、士气饱满的军队,这是懂得战场上的随机应变。



6.所以,用兵的原则是:对占据高地、背倚丘陵之敌,不要作正面仰攻;对于假装败逃之敌,不要跟踪追击;敌人的精锐部队不要强攻;敌人的诱饵之兵,不要贪食;对正在向本土撤退的部队不要去阻截;对被包围的敌军,要预留缺口;对于陷入绝境的敌人,不要过分逼迫,这些都是用兵的基本原则。





【九变第八】

1.孙子说:用兵的原则,将接受国君的命令,召集人马组建军队, 在难于通行之地不要驻扎,在四通八达的交通要道要与四邻结交,在难以生存的地区不要停留,要赶快通过,在四周有险阻容易被包围的地区要精于谋划,误入死地则须坚决作战。有的道路不要走,有些敌军不要攻,有些城池不要占,有些地域不要争,君主的某些命令也可以不接受。 2.所以将帅精通“九变”的具体运用,就是真懂得用兵了;将帅不精通“九变”的具体运用,就算熟悉地形,也不能得到地利。指挥作战如果不懂“九变”的方法,即使知道“五利”,也不能充分发挥部队的战斗力。



3.智慧明达的将帅考虑问题,必然把利与害一起权衡。在考虑不利条件时,同时考虑有利条件,大事就能顺利进行;在看到有利因素时同时考虑到不利因素,祸患就可以排除。因此,用最另人头痛的事去使敌国屈服,用复杂的事变去使敌国穷于应付,以利益为钓饵引诱敌国疲于奔命。



4.所以用兵的原则是:不抱敌人不会来的侥幸心理,而要依靠我方有充分准备,严阵以待;不抱敌人不会攻击的侥幸心理,而要依靠我方坚不可摧的防御,不会被战胜。



5.所以,将领有五种致命的弱点:坚持死拼硬打,可能招致杀身之祸;临阵畏缩,贪生怕死,则可能被俘;性情暴躁易怒,可能受敌轻侮而失去理智;过分洁身自好,珍惜声名,可能会被羞辱引发冲动;由于爱护民众,受不了敌方的扰民行动而不能采取相应的对敌行动。所有这五种情况,都是将领最容易有的过失,是用兵的灾难。军队覆没,将领牺牲,必定是因为这五种危害,因此一定要认识到这五种危害的严重性。

【行军第九】

1、孙子说:在各种不同地形上处置军队和观察判断敌情时,应该注意:通过山地,必须依靠有水草的山谷,驻扎在居高向阳的地方,敌人占领高地,不要仰攻,这是在山地上对军队的处置原则。横渡江河,应远离水流驻扎,敌人渡水来战,不要在江河中迎击,而要等它渡过一半时再攻击,这样较为有利。如果要同敌人决战,不要紧靠水边列阵;在江河地带扎营,也要居高向阳,不要面迎水流,这是在江河地带上对军队处置的原则。通过盐碱沼泽地带,要迅速离开,不要逗留;如果同敌军相遇于盐碱沼泽地带,那就必须靠近水草而背靠树林,这是在盐碱沼泽地带上对军队处置的原则。在平原上应占领开阔地域,而侧翼要依托高地,前低后高。这是在平原地带上对军队处置的原则。以上四中“处军”原则的好处,就是黄帝之所以能战胜其他四帝的原因。  



2、大凡驻军总是喜欢干燥的高地,避开潮湿的洼地;重视向阳之处,避开阴暗之地;靠近水草地区,军需供应充足,将士百病不生,这样就有了胜利的保证。在丘陵堤防行军,必须占领它向阳的一面,并把主要侧翼背靠着它。这些对于用兵有利的措施,是利用地形作为辅助条件的。上游下雨,洪水突至,禁止徒涉,应等待水流稍平缓以后。



3、凡遇到或通过“绝涧”、“天井”、“天牢”、“天罗”、“天陷”、“天隙”这几种地形,必须迅速离开,不要接近。我们应该远离这些地形,而让敌人去靠近它;我们应面向这些地形,而让敌人去背靠它。军队两旁遇到有险峻的隘路、湖沼、水网、芦苇、山林和草木茂盛的地方,必须谨慎地反复搜索,这些都是敌人可能埋设伏兵和隐伏奸细的地方。  



4、敌人离我很近而安静的,是依仗它占领险要地形;敌人离我很远但挑战不休,是想诱我前进;敌人之所以驻扎在平坦地方,是因为对它有某种好处。许多树木摇动,是敌人隐蔽前来;草丛中有许多遮障物,是敌人布下的疑阵;群鸟惊飞,是下面有伏兵;野兽骇奔,是敌人大举突袭;尘土高而尖,是敌人战车驶来;尘土低而宽广,是敌人的步兵开来;尘土疏散飞扬,是敌人正在拽柴而走;尘土少而时起时落;是敌人正在扎营。



5、敌人使者措辞谦卑却又在加紧战备的,是准备进攻;措辞强硬而军队又做出前进姿态的,是准备撤退;轻车先出动,部署在两翼的,是在布列阵势;敌人尚未受挫而来讲和的,是另有阴谋;敌人急速奔跑并排并列阵的,是企图约期同我决战;敌人半进半退的,是企图引诱我军。  



6、抵兵倚着兵器而站立的,是饥饿的表现;供水兵打水自己先饮的,是干渴的表现;敌人见利而不进兵争夺的,是疲劳的表现;敌人营寨上聚集鸟雀的,下面是空营;敌人夜间惊叫的,是恐慌的表现;敌营惊扰纷乱的,是敌将没有威严的表现;旌旗摇动不整齐的,是敌人队伍已经混乱。敌人军官易怒的,是全军疲倦的表现;用粮食喂马,杀马吃肉,收拾起汲水器具,部队不返营房的,是要拼死的穷寇;低声下气同部下讲话的,是敌将失去人心;不断犒赏士卒的,是敌军没有办法;不断惩罚部属的,是敌人处境困难;先粗暴然后又害怕部下的,是最不精明的将领;派来使者送礼言好的,是敌人想休兵息战;敌人逞怒同我对阵,但久不交锋又不撤退的,必须谨慎地观察他的企图。



7、打仗不在于兵力越多越好,只要不轻敌冒进,并集中兵力、判明敌情,取得部下的信任和支持,也就足够了。那种既无深谋远虑而又轻敌的人,必定会被敌人俘虏。士卒还没有亲近依附就执行惩罚,那么他们会不服,不服就很难使用。士卒已经亲近依附,如果不执行军纪军法,也不能用来作战。所以,要用怀柔宽仁使他们思想统一,用军纪军法使他们行动一致,这样就必能取得部下的敬畏和拥戴。平素严格贯彻命令,管教士卒,士卒就能养成服从的习惯;平素从来不严格贯彻命令,管教士卒,士卒就会养成不服从的习惯。平时命令能贯彻执行的,表明将帅同士卒之间相处融洽。





【地形第十】

1、孙子说:地形有“通”、“挂”、“支”、“隘”、“险”、“远”等六种。凡是我们可以去,敌人也可以来的地域,叫做“通”;在“通”形地域上,应抢先占开阔向阳的高地,保持粮道畅通,这样作战就有利。凡是可以前进,难以返回的地域,称作“挂”;在挂形的地域上,假如敌人没有防备,我们就能突击取胜。假如敌人有防备,出击又不能取胜,而且难以回师,这就不利了。凡是我军出击不利,敌人出击不利的地域叫做“支”。在“支”形地域上,敌人虽然以利相诱,我们也不要出击,而应该率军假装退却,诱使敌人出击一半时再回师反击,这样就有利。在“隘”形地域上,我们应该抢先占领,并用重兵封锁隘口,以等待敌人的到来;如果敌人已先占据了隘口,并用重兵把守,我们就不要去进攻;如果敌人没有用重兵据守隘口,那么就可以进攻。在“险”形地域上,如果我军先敌占领,就必须控制开阔向阳的高地,以等待敌人来犯;如果敌人先我占领,就应该率军撤离,不要去攻打它。在“远”形地域上,敌我双方地势均同,就不宜去挑战,勉强求战,很是不利。以上六点,是利用地形的原则。这是将帅的重大责任所在,不可不认真考察研究。  



2、军队打败仗有“走”、“驰”、“陷”、“崩”、“乱”、“北”六种情况。这六种情况的发生,不是天时地理的灾害,而是将帅自身的过错。地势均同的情况下,以一击十而导致失败的,叫做“走”。士卒强捍,军官懦弱而造成失败的,叫做“驰”。将帅强悍,士卒儒弱而失败的,叫做“陷”。偏将怨仇不服从指挥,遇到敌人擅自出战,主将又不了解他们能力,因而失败的,叫做“崩”。将帅懦弱缺乏威严,治军没有章法,官兵关系混乱紧张,列兵布阵杂乱无常,因此而致败的,叫做“乱”。将帅不能正确判断敌情,以少击众,以弱击强,作战又没有精锐先锋部队,因而落败的,叫做“北”。以上六种情况,均是导致失败的原因。这是将帅的重大责任之所在,是不可不认真考察研究的。



3、地形是用兵打仗的辅助条件。正确判断敌情,考察地形险易,计算道路远近,这是高明的将领必须掌握的方法,懂得这些道理去指挥作战的,必定能够胜利;不了解这些道理去指挥作战的,必定失败。所以,根据分析有必胜把握的,即使国君主张不打,坚持打也是可以的;根据分析没有必胜把握的,即使国君主张打,不打也是可以的。所以,战不谋求胜利的名声,退不回避失利的罪责,只求保全百姓,符合国君利益,这样的将帅,才是国家的宝贵财富。









4、对待士卒象对待婴儿,士卒就可以同他共患难:对待士卒象对待自己的儿子,士卒就可以跟他同生共死。如果对士卒厚待却不能使用,溺爱却不能指挥,违法而不能惩治,那就如同骄惯了的子女,是不可以用来同敌作战的。只了解自己的部队可以打,而不了解敌人不可打,取胜的可能只有一半;只了解敌人可以打,而不了解自己的部队不可以打,取胜的可能也只有一半。知道敌人可以打,也知道自己的部队能打,但是不了解地形不利于作战,取胜的可能性仍然只有一半。所以,懂得用兵的人,他行动起来不会迷惑,他的战术变化无穷。



5、所以说:知彼知己,胜乃不殆;知天知地,胜乃可全。





【九地第十一】

1、孙子说:按照用兵的原则,军事地理有散地、轻地、争地、交地、衢地、重地、圮地、围地、死地。诸侯在本国境内作战的地区,叫做散地。在敌国浅近纵深作战的地区,叫做轻地。我方得到有利,敌人得到也有利的地区,叫做争地。我军可以前往,敌军也可以前来的地区,叫做交地。多国相毗邻,先到就可以获得诸侯列国援助的地区,叫做衢地。深入敌国腹地,背靠敌人众多城邑的地区,叫做重地。山林险阻沼泽等难于通行的地区,叫做圮地。行军的道路狭窄,退兵的道路迂远,敌人可以用少量兵力攻击我方众多兵力的地区,叫做围地。迅速奋战就能生存,不迅速奋战就会全军覆灭的地区,叫做死地。因此,处于散地就不宜作战,处于轻地就不宜停留,遇上争地就不要勉强强攻,遇上交地就不要断绝联络,进入衢地就应该结交诸侯,深入重地就要掠取粮草,碰到圮地就必须迅速通过,陷入围地就要设谋脱险,处于死地就要力战求生。



2、从前善于指挥作战的人,能使敌人前后部队不能相互策应,主力和小部队无法相互依靠,官兵之间不能相互救援,上下级之间不能互相联络,士兵分散不能集中,合兵布阵也不整齐。对我有利就打,对我无利就停止行动。试问:敌人兵员众多且又阵势严整向我发起进攻,那该用什么办法对付它呢?回答是:先夺取敌人最关心爱护的,这样就听从我们的摆布了。用兵之理贵在神速,要乘敌人措手不及的时机,走敌人意料不到的道路,攻击敌人没有戒备的地方。



3、在敌国境内进行作战的一般规律是:越深入敌国腹地,我军军心就越坚固,敌人就不易战胜我们。在敌国丰饶地区掠取粮草,部队给养就有了保障。要注意休整部队,不要使其过于疲劳,保持土气,养精蓄锐。部署兵力,巧设计谋,使敌人无法判断我军的意图。将部队置于无路可走的绝境,士卒就会宁死不退。士卒既能宁死不退,那么他们怎么会不殊死作战呢!士卒深陷危险的境地,就不再存在恐惧,一旦无路可走,军心就会牢固。深入敌境军队就不会离散。遇到迫不得已的情况,军队就会殊死奋战。因此,不须整饬就能注意戒备,不用强求就能完成任务,无须约束就能亲密团结,不待申令就会遵守纪律。禁止占卜迷信,消除士卒的疑虑,他们至死也不会逃避。我军士卒没有多余的钱财,并不是不爱钱财;士卒置生死于度外,也不是不想长寿。当作战命令颁布之时,坐着的士卒泪沾衣襟,躺着的士卒泪流满面,但把士卒置于无路可走的绝境,他们就都会象专诸、曹刿一样的勇敢。









4、善于指挥作战的人,能使部队自我策应如同“率然”蛇一样。“率然”是常山地方一种蛇,打它的头部,尾巴就来救应;打它的尾,头就来救应;打它的腰,头尾都来救应。试问:可以使军队象“率然”一样吧?回答是:可以。那吴国人和越国人是互相仇视的,但当他们同船渡河而遇上大风时,他们相互救援,就如同人的左右手一样。所以,想用缚住马缰、深埋车轮这种显示死战决心的办法来稳定部队,是靠不住的。要使部队能够齐心协力奋勇作战如同一人,关键在于部队管理教育有方。要使强弱不同的士卒都能发挥作用,在于恰当地利用地形。所以善于用兵的人,能使全军上下携手团结如同一人,这是因为客观形势迫使部队不得不这样。



5、主持军事行动,要做到考虑谋略沉着冷静而幽深莫测,管理部队公正严明而有条不紊。要能蒙蔽士卒的视听,使他们对于军事行动毫无所知;变更作战部署,改变原定计划,使人无法识破真相;不时变换驻地,故意迂回前进,使人无从推测意图。将帅向军队赋予作战任务,要象使其登高而抽去梯子一样。将帅率领士卒深入诸侯国土,要象弩机发出的箭一样一往无前。对待士卒要能如驱赶羊群一样,赶过去又赶过来,使他们不知道要到哪里去。集结全军,把他们置于险境,这就是统帅军队的要点。九种地形的应变处置,攻防进退的利害得失,全军上下的心理状态,这些都是作为将帅不能不认真研究和周密考察的。 6、在敌国境内作战的规律是:深入敌境则军心稳固,浅入敌境则军心容易涣散。进入敌境进行作战的称为绝地;四通八达的地区叫做衢地;进入敌境纵深的地区叫做重地;进入敌境浅的地区叫做轻地;背有险阻前有隘路的地区叫围地;无路可走的地区就是死地。因此,在散地,要统一军队意志;在轻地,要使营阵紧密相连;在争地,要迅速出兵抄到敌人的后面;在交地,就要谨慎防守;在衢地,就要巩固与列国的结盟;入重地,就要保障军粮供应;在圮地,就必须迅速通过;陷入围地,就要堵塞缺口;到了死地,就要显示死战的决心。所以,士卒的心理状态是:陷入包围就会竭力抵抗,形势逼迫就会拚死战斗,身处绝境就会听从指挥。





7、不了解诸侯列国的战略意图,就不要与之结交;不熟悉山林、险阻、沼泽等地形情况,就不能行军;不使用向导,就无法得到地利。这些情况,如有一样不了解,都不能成为称王争霸的军队。凡是王霸的军队,进攻大国,能使敌国的军民来不及动员集中;兵威加在敌人头上,能够使敌方的盟国无法配合策应。因此,没有必要去争着同天下诸侯结交,也用不着在各诸侯国里培植自己的势力,只要施展自己的战略意图,把兵威施加在敌人头上,就可以拔取敌人的城邑,摧毁敌人的国都。施行超越惯例的奖赏,颁布不拘常规的号令,指挥全军就如同使用一个人一样。向部下布置作战任务,但不说明其中意图。只告知利益而不指出危害。将士卒置于危地,才能转危为安;使士卒陷于死地,才能起死回生。军队深陷绝境,然后才能赢得胜利。所以,指导战争的关键,在于谨慎地观察敌人的战略意图,集中兵力攻击敌人一部,千里奔袭,斩杀敌将,这就是所谓巧妙用兵,实现克敌制胜的目的。





8、因此,在决定战争方略的时候,就要封锁关口,废除通行符证,不充许敌国使者往来;要在庙堂里再三谋划,作出战略决策。敌人一旦出现间隙,就要迅速乘机而入。首先夺取敌人战略要地,但不要轻易与敌约期决战。要灵活机动,因敌情来决定自己的作战行动。因此,战争开始之前要象处女那样显得沉静柔弱,诱使敌人放松戒备;战斗展开之后,则要象脱逃的野兔一样行动迅速,使敌人措手不及,无从抵抗。





【火攻第十二】

1、孙子说:火攻形式共有五种,一是火烧敌军人马,二是焚烧敌军粮草,三是焚烧敌军辎重,四是焚烧敌军仓库,五是火烧敌军运输设施。实施火攻必须具备条件,火攻器材必须随时准备。放火要看准天时,起火要选好日子。天时是指气候干燥,日子是指月亮行经“箕”、“壁”、“翼”、“轸”四个星宿位置的时候。月亮经过这四个星宿的时候,就是起风的日子。



2、凡用火攻,必须根据五种火攻所引起的不同变化,灵活部署兵力策应。在敌营内部放火,就要及时派兵从外面策应。火已烧起而敌军依然保持镇静,就应等待,不可立即发起进攻。待火势旺盛后,再根据情况作出决定,可以进攻就进攻,不可进攻就停止。火可从外面放,这时就不必等待内应,只要适时放火就行。从上风放火时,不可从下风进攻。白天风刮久了,夜晚就容易停止。军队都必须掌握这五种火攻形式,等待条件具备时进行火攻。用火来辅助军队进攻,效果显著;用水来辅助军队进攻,攻势必能加强。水可以把敌军分割隔绝,但却不能焚毁敌人的军需物资。   3、凡打了胜仗,攻取了土地城邑,而不能巩固战果的,会很危险,这种情况叫做“费留”。所以说,明智的国君要慎重地考虑这个问题,贤良的将帅要严肃地对待这个问题。没有好处不要行动,没有取胜的把握不能用兵,不到危急关头不要开战。国君不可因一时愤怒而发动战争,将帅不可因一时的气忿而出阵求战。符合国家利益才用兵,不符合国家利益就停止。愤怒还可以重新变为欢喜,气忿也可以重新转为高兴,但是国家灭亡了就不能复存,人死了也不能再生。所以,对待战争,明智的国君应该慎重,贤良的将帅应该警惕,这是安定国家和保全军队的基本道理。





【用间第十三】



1、孙子说:凡兴兵十万,征战千里,百姓的耗费, 国家的开支,每天都要花费千金,前后方动乱不安,戌卒疲备地在路上奔波,不能从事正常生产的有七十万家。这样相持数年,就是为了决胜于一旦,如果吝惜爵禄和金钱,不肯用来重用间谍,以致因为不能掌握敌情而导致失败,那就是不仁到极点了。这种人不配作军队的统帅,算不上国家的辅佐,也不是胜利的主宰。





2、所以,明君和贤将之所以一出兵就能战胜敌人,功业超越众人,就在于能预先掌握敌情。要事先了解敌情,不可求神问鬼,也不可用相似的现象作类比推测,不可用日月星辰运行的位置去验证,一定要取之于人,从那些熟悉敌情的人的口中去获取。 3、间谍的运用有五种,即乡间、内间、反间、死间、生间。五种间谍同时用起来,使敌人无从捉摸我用间的规律,这是使用间谍神妙莫测的方法,也正是国君克敌制胜的法宝。所谓乡间,是指利用敌人的同乡做间谍;所谓内间,就是利用敌方官吏做间谍;所谓反间,就是使敌方间谍为我所用;所谓死间,是指制造散布假情报,通过我方间谍将假情报传给敌间,诱使敌人上当,一旦真情败露,我间难免一死;所谓生间,就是侦察后能活着回来报告敌情的人。



4、所以在军队中,没有比间谍更亲近的人,没有比间谍更为优厚奖赏的,没有比间谍更为秘密的事情了。不是睿智超群的人不能使用间谍,不是仁慈慷慨的人不能指使间谍,不是谋虑精细的人不能得到间谍提供的真实情报。微妙啊,微妙!无时无处不可以使用间谍。间谍的工作还未开展,而已泄露出去的,那么间谍和了解内情的人都要处死。凡是要攻打的敌方军队,要攻占的敌方城市,要刺杀的敌方人员,都须预先了解其主管将领、左右亲信、负责传达的官员、守门官吏和门客幕僚的姓名,指令我方间谍一定要将这些情况侦察清楚。 5、一定要搜查出敌方派来侦察我方军情的间谍,从而用重金收买他,引诱开导他,然后再放他回去,这样,反间就可以为我所用了。通过反间了解敌情,乡间、内间也就可以利用起来了。通过反间了解敌倩,就能使死间传播假情报给敌人了。通过反间了解敌情,就能使生间按预定时间报告敌情了。五种间谍的使用,国君都必须了解掌握。了解情况的关键在于使用反间,所以对反间不可不给予优厚的待遇。



6、从前殷商的兴起,在于重用了在夏朝为臣的伊挚,他熟悉并了解夏朝的情况;周朝的兴起,是由于周武王重用了了解商朝情况的吕牙。所以,明智的国君,贤能的将帅,能用智慧高超的人充当间谍,就一定能建树大功。这是用兵的关键,整个军队都要依靠间谍提供的敌情来决定军事行动。

Monday, May 10, 2010

Sendmail

What is Sendmail?
Sendmail is a general purpose internetwork email routing facility that supports many kinds of mail-transfer and delivery methods, including the Simple Mail Transfer Protocol (SMTP) used for email transport over the internet.

Features:1. Easy migration
a. It is simple and extremely efficient to migrate a mail server installed using sendmail, as compared to giants like Exchange, whose migration requires a lot of steps and might take hours.
2. Simple configuration
a. Sendmail configuration has been made easy with the introduction of its macro file sendmail.mc. All it needs to be done is just a few lines within the macro file and compile it into an actual sendmail configuration file.

Install SendmailSendmail requires 3 packages to work; sendmail, sendmail-cf and m4.
There are 3 ways to install sendmail:
  1. Installing through Yum
  2. Install RPM packages
  3. Build from source
Yum (Yellowdog Updater Modified)
Install through Yum is simple. Just execute the following command to install.
~]# Yum Install sendmail sendmail-cf m4

RPM Package Manager
Installing through RPM Package manager requires a bit more work. Normally we will install from the CD/DVD-ROM provided. If in any case a CD/DVD-ROM is not available, we might have to download the rpm file from online source.
a. Navigate to the source, which most like be the CD/DVD-ROM. The source CD/DVD-ROM have to be inserted first
~]# cd / media/RHEL_5.3\ x86_64\ DVD/Server

b.Install the rpm
~]# rpm –ivh sendmail*
~]# rpm –ivh m4*


Install from source
a.Download the source
~]# wget ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.14.4.tar.gz

b.Unzip the source
~]# tar –zxv sendmail.8.14.4.tar.gz

c. Compile the source
~]# cd sendmail.8.14.4
# ./Build
# ./Build install


Configure Sendmail
Sendmail is a very huge topic to cover. Yet in this document we will be covering on a simple installating to get sendmail working and the methods to test and troubleshooting sendmail should problem arises.
Dovecot is used in this document to IMAP and POP access to the clients. In this document we will also be covering how clients from both Linux and Windows platform are able to access the mail server.

Ensure DNS is configured properly for Mail Exchange
1.Make sure the fully qualified domain name (fqdn) of the mail server host can be resolved.
~]# host mail.ca.com
mail.ca.com is an alias for svr1.ca.com.
svr1.ca.com has address 192.168.205.10


2.Ensure that the MX record in the DNS zone file is pointed correctly to the IP address of the mail server.
~]# cat /var/named/ca.com.zone
;
; Zone file for my-site.com
;
; The full zone file
;
$TTL 3D
@ IN SOA ns1.ca.com. hostmaster.ca.com. (
200211152 ; serial#
3600 ; refresh, seconds
3600 ; retry, seconds
3600 ; expire, seconds
3600 ) ; minimum, seconds

IN NS ns1.ca.com. ; Inet Address of nameserver
IN MX 10 mail.ca.com. ; Primary Mail Exchangersvr1 IN A 192.168.205.10
mail IN CNAME svr1

Configure sendmail.mc
1. Ensure that sendmail is listening to the correct network
a. Using netstat to determine to network that the server is listening to
Correct result:
~]# netstat -an grep :25 grep tcp
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN


Incorrect result:
~]# netstat -an grep :25 grep tcp
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN


b.If the server is only listening to localhost, make the following changes by commenting the daemon_options line in sendmail.mc. To comment, just add dnl in front of the line.

~]# vi /etc/mail/sendmail.mc

dnl #
dnl # The following causes sendmail to only listen on the IPv4 loopback address
dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
dnl #
dnl DAEMON_OPTIONS(`Port=smtp, Name=MTA')

2.Comment out SMART_HOST entry, which is only required for client.
dnl define(`SMART_HOST',`mail.ca.com')

3.Regenerate sendmail.cf and start sendmail
~]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
~]# service sendmail restart


Configure DoveCot for POP access
1.Install dovecot if required
~]# rpm –ivh dovecot*

2.Ensure dovecot is configured for pop3
~]# vi /etc/dovecot.conf

# Protocols we want to be serving: imap imaps pop3 pop3s
# If you only want to use dovecot-auth, you can set this to "none".
protocols = imap imaps pop3 pop3s

3.Start dovecot
~]# service dovecot start

4.Ensure dovecot is serving by using netstat
~]# netstat -a egrep -i 'popimap'
tcp 0 0 *:imaps *:* LISTEN
tcp 0 0 *:pop3s *:* LISTEN
tcp 0 0 *:pop3 *:* LISTEN
tcp 0 0 *:imap *:* LISTEN

5.There are situation whereby the administrator needs to restrict POP3 access from certain domains. We shall achieve this by using IPTables at the POP3 server to deny the hosts from that domain. The below example demonstrate that all hosts within a domain of subnet 192.168.205.0 network are dropped, and all others will be accepted.

~]# iptables -A INPUT -s 192.168.205.0/24 -p tcp --dport 110 -j DROP
~]# iptables –A INPUT –j ACCEPT


Configure Linux Sendmail Client
1.Install Sendmail onto the client and ensure DNS is working properly
a.Refer to “Install Sendmail” section for installation
b.Ensure that FQDN of the mail server can be resolved.
~]# nslookup mail.ca.com
Server: 192.168.205.10
Address: 192.168.205.10#53

mail.ca.com canonical name = svr1.ca.com.
Name: svr1.ca.com
Address: 192.168.205.10

2.Configure sendmail.mc. Ensure that the option below is configured properly by pointing it to the FQDN of the mail server.

~]# vi /etc/mail/sendmail.mc

define(`SMART_HOST',`mail.ca.com')

3. Regenerate sendmail.cf and start sendmail
~]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
~]# service sendmail restart

Configure Windows Client (Microsoft Outlook 2007)
1.Start MS Outlook 2007. Cancel wizard if prompted.
2.Setup the account.
a.Go to Account setting



b. Add new account


c. Check “Manually configure server settings or additional server type” and click next


d. Select “Internet E-mail” for E-mail service and click next



e.Enter the following information for E-mail settings:
i.User Information:
ii.Server Information
  • Account Type: POP3
  • Incoming mail server: 192.168.205.10
  • Outgoing mail server: mail.ca.com
iii.Login Information
  • Username: student
  • Password: *omitted*
f.Click on Test Account Setting to test the connectivity of the service. Click next once everything is configured properly.








Troubleshooting Sendmail
1.Testing TCP connectivity of Sendmail using telnet
The mail server needs to be accessed by required clients without being blocked by firewalls or other connectivity issues. This step helps to check the remote connectivity from client to the mail server.
a.Telnet to the mail server using port 25. A success response will give you 220 status code, while a fail response will give you time-out or “No route to host” message.

Success:
~]$ telnet mail.ca.com 25Trying 192.168.205.10...
Connected to mail.ca.com (192.168.205.10).
Escape character is '^]'.
220 svr1.ca.com ESMTP Sendmail 8.13.8/8.13.8; Sun, 18 Apr 2010 14:33:24 +0800

Failure:
~]$ telnet mail.ca.com 25
Trying 192.168.205.10...
telnet: connect to address 192.168.205.10: No route to host
telnet: Unable to connect to remote host: No route to host

2.Monitoring sendmail events through /var/log/maillog file. Root access is required to access this file.
~]# tail -f /var/log/maillog
Apr 4 19:12:03 svr1 sendmail[6609]: o34BC2KE006609: to=root, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=31068, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (o34BC3ng006611 Message accepted for delivery)
Apr 4 19:12:03 svr1 sendmail[6612]: o34BC3ng006611: to=, ctladdr= (0/0), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=31509, dsn=2.0.0, stat=Sent

Tuesday, May 4, 2010

Squid

Introduction
Squid is a free caching proxy server that runs on Linux and many other operating systems. Squid can be deployed in two scenarios, forward or reverse proxy.
Squid as a forward proxy helps to save network resources by directly supplying common data access by clients, providing authentication and authorization, logging of internet usage, enforcing organization internet policy enforcement and managing of organization network resource.
Squid as a reverse proxy helps to manage and optimize resources of outgoing resources from a web server farm, by caching and serving frequently used static contents, act as a middle man for slower remote clients so as to quickly free up resources for faster clients (SpoonFeeding), perform requesting filtering to enhance web security or act as an IPv4-IPv6 gateway.

Feature
Squid is a robust service as it provides organization with many features. In this section we shall cover the more popular features used by organization to secure or optimize their network.

Transparent Proxy
The most basic reason to use Squid is its ability to act as a transparent proxy. This is when the organization wants the users and clients within the network to use the proxy without their knowing and without having the need to configure their browser to use the proxy.

Squid make this possible by acting as either a gateway router, or having the gateway redirecting traffic to a Linux server that is hosting

Access Control Lists (ACL)
Squid is able to control access of the clients within the organization by filtering source/destination IP address, time of access, URLs, port number or transfer protocol. Below is a list of how Squid can be configured for ACL:

1.Restricting access to local network users.
2.Blocking specific computers
3.Restriction of certain web sites during office hours
4.Blocking pornography or phishing websites

Proxy authentication
Squid allows to be configured so that only authorized users are allowed to access the network or internet within the organization, by using one of the three techniques listed below:
1.HTTP Basic authentication
2.HTTP Digest
3.NTLM

To use proxy authentication, Squid also provide API, auth_param to query a number of standard databases to verify the credentials.
Proxy authentication is not covered in this document.

Install Squid
Sendmail requires 3 packages to work; sendmail, sendmail-cf and m4.

There are 3 ways to install Squid:
1.Installing through Yum
2.Install RPM packages
3.Build from source

Yum (Yellowdog Updater Modified)
Install through Yum is simple. Just execute the following command to install.

~]# Yum Install squid

RPM Package Manager
Installing through RPM Package manager requires a bit more work. Normally we will install from the CD/DVD-ROM provided. If in any case a CD/DVD-ROM is not available, we might have to download the rpm file from online source.

a.Navigate to the source, which most like be the CD/DVD-ROM. The source CD/DVD-ROM have to be inserted first

~]# cd / media/RHEL_5.3\ x86_64\ DVD/Server

b.Install the rpm

~]# rpm –Uvh squid*

Install from source
a.Download the source

~]# wget ftp://squid.cbn.net.id/pub/squid/squid-3.1.1.tar.gz

b.Unzip the source

~]# tar –zxv squid-3.1.1.tar.gz

c.Compile the source

~]# cd squid-3.1.1
~]# ./configure
~]# make
~]# make install


Squid Configuration

Enter the following command to edit squid configuration file
~]#nano /etc/squid/squid.conf

Modify or add the following squid directives:
Httpd_accel_host virtual
Httpd_accel_port 80
Httpd_accel_with_proxy on
Httpd_accel_uses_host_header on
Acl lan src 192.168.1.1 192.168.100.1/24
Http_access allow localhost
http_access allow lan


Add the following lines at the bottom of the squid configuration files. Save and exit text editor.
•To allow access from local networks

~]#acl internalNetwork src 192.168.1.0/24
~]# http_access allow internalNetwork

•Deny user from accessing website
~]#acl blocksites www .google.com
~]#http_access deny blocksites


•Deny user who browses to a URL with the word ‘hack’ in it.
~]#acl blockword url_regex – i hack
~]#http_access deny blockword

•Filtering content
Start squid proxy server
~]# chkconfig squid on
~]#/etc/init.d/squid restart

Confirm that port is open

~]#netstat –tuna grep XXXX

Ensure that iptable allows access to squid server by editing the iptables configuration files. Save and Exit

~]#nano /etc/sysconfig/iptables -A RH-Firewall-1-INPUT –m state –state NEW,ESTABLISHED,RELATED –m tcp –p tcp – dport XXXX –j ACCEPT

Restart iptables
~]#/etc/init.d/iptables restart

Squid Testing
Read the squid proxy access log to confirm that the acl set is working according to what you required

~]#nano –f /var/log/squid/access.log

See access log file /var/log/squid/access.log:

~]# tail -f /var/log/squid/access.log