2008年9月21日星期日

gnupg

gnupg 亦即 GNU Privacy Guard,含有
/usr/lib/gnupg/gpgkeys_ldap
/usr/lib/gnupg/gpgkeys_curl
/usr/lib/gnupg/gpgkeys_finger
/usr/lib/gnupg/gpgkeys_hkp
/usr/lib/gnupg/gpgkeys_mailto
/usr/share/man/man7/gnupg.7.gz
/usr/share/man/man1/gpg-convert-from-106.1.gz
/usr/share/man/man1/gpg-zip.1.gz
/usr/share/man/man1/gpg.1.gz
/usr/share/man/man1/lspgpot.1.gz
/usr/share/man/man1/gpgsplit.1.gz
/usr/share/doc/gnupg/THANKS.gz
/usr/share/doc/gnupg/changelog.include.gz
/usr/share/doc/gnupg/faq.html.gz
/usr/share/doc/gnupg/changelog.Debian.gz
/usr/share/doc/gnupg/changelog.po.gz
/usr/share/doc/gnupg/changelog.cipher.gz
/usr/share/doc/gnupg/OpenPGP.gz
/usr/share/doc/gnupg/TODO.gz
/usr/share/doc/gnupg/highlights-1.4.txt.gz
/usr/share/doc/gnupg/FAQ.gz
/usr/share/doc/gnupg/changelog.g10.gz
/usr/share/doc/gnupg/Upgrading_From_PGP.txt.gz
/usr/share/doc/gnupg/changelog.checks.gz
/usr/share/doc/gnupg/changelog.toplevel.gz
/usr/share/doc/gnupg/DETAILS.gz
/usr/share/doc/gnupg/README.gz
/usr/share/doc/gnupg/changelog.tools.gz
/usr/share/doc/gnupg/changelog.util.gz
/usr/share/doc/gnupg/copyright
/usr/share/doc/gnupg/changelog.mpi.gz
/usr/share/doc/gnupg/NEWS.gz
/usr/share/gnupg/options.skel
/usr/bin/gpg
/usr/bin/gpg-zip
/usr/bin/gpg-convert-from-106
/usr/bin/gpgsplit
/usr/bin/lspgpot
/usr/share/doc/gnupg/changelog.gz
主要程序就是 gpg,用于加密和签名,gpg-zip 用于将文件归档后加密签名。现在 gpg 已经有新的 2.x 版本了,这里主要介绍 1.x。两者差异主要是构架上的,2.x 增加了 agent 来 caching、以及新的协议(X.509),这个我们会在后面慢慢介绍。这里主要介绍一些基本的用法。

为什么要用 gpg 这类程序?其一可以安全的存放自己的数据,通过 gpg 的不对称、对称密钥系统,可以轻松的加密文件。其二作为身份验证的绝佳手段(数字签名),避免身份欺骗。前者,有很多类似的工具,比如 openssl,还有文件系统级别的,那就更加的方便了,但是仍然有些应用,比如邮件,常用的还是 gpg。后者,得益于不对称密钥系统,每个用户产生自己的一堆密钥,保存好私钥,传播公钥。一般来说可以通过密钥的 fingerprint 验证拿到的是否为对方的公钥,还可以通过信任机制,在 keyserver 上获得。

常见的申请出国的同学被黑手写拒信抢了 offer,用好 gpg 这类工具就不会产生这种麻烦(不过要求对方也使用 gpg 验证)。另外很多实时聊天协议并没对传输文本加密,使用 gpg 也能获得这个效果。当然,比较好的是使用签名,如果文本本身并不敏感,避免出现自己机器被其他人使用,冒名顶替。著名的 pidgin 就有一个 pidgin-encryption 插件,可以实现这个功能。常见的有建客户端程序,如 thunderbird、kmail、mutt 都可以方便的使用 gpg。Windows 用户可以使用 gpg,还可以使用商业软件 pgp 以更好的支持诸如 outlook、outlook express 这种软件。

对于开发人员而言,签名还可以作为验证数据完整性的工具,这在发布软件的时候尤为有用

下面就让我们花点时间产生自己的 gpg 密钥,学习如何使用它实现最基本的功能吧。首先看看自己有没有产生自己的密钥,
gpg -k 或者 gpg --list-keys
这里列出来的是公钥,公钥一般用来给别人寄送加密文件时(注意公钥只能加密,加密后如果自己没有私钥是无法解密的;这也就是为什么多数邮件客户端寄送加密邮件时会要同时用自己的公钥加密,不然以后自己看自己发送的邮件都不知道是什么了)、或者验证他人签名时使用。如果是想看有没有私钥,则
gpg -K 或者 gpg --list-secret-keys

如果你不曾使用过 gpg,那么很可能两者都没有。这时候我们可以
gpg --gen-key
产生自己的密钥对。一般说来 DSA 使用于签名、ElGamal 用于加密,前者长度为 1024 bits,后者最长可以到 4096 bits。建议使用默认的,产生签名和加密的密钥。密钥会对应一个 user ID,通过姓名、电子邮件和备注(可选)确定的,后面我们会发现一个密钥里面可以添加多个 UID 和多个 subkeys,方便用户使用多个帐户、在不同地方使用不同的密钥。产生密钥需要随机数,gpg 会从系统很多地方采集 entropy(比较搞笑的是说使用 gpg --gen-random 产生随机数会降低系统的 entropy),这需要一定的时间。然后用户需要给一个 passphrase 保护密钥(也是 gpg 这个体系的最大弱点之一)。密钥有一个过期时间,这个可以修改,但建议最好是不要修改。我们假设产生的密钥 id 是 12345678(可以用 -k 看到)

密钥产生以后,应尽快制作一个吊销证书,这可以避免一旦密钥失效(如被人窃取、忘记 passphrase 了),可以使用该证书吊销密钥(主要是私钥),吊销而不是删除可以允许你还能访问曾经用该密钥加密的数据(删掉了自己就看不到了),但是程序会拒绝继续使用该密钥签名、加密。这个吊销证书的重要性不言而喻,因此应和私钥分开保存。使用
gpg --gen-revoke 12345678
产生一个吊销证书,注意这样调用可能会使得你的屏幕花掉(reset),我们可以通过 --output 指定输出到文件,这会产生 ASCII 输出,因此可以将它打印出来,保存到安全的地方,如保险柜、银行,需要的时候通过 OCR 识别即可。比如
gpg --output someone.revoke --gen-revoke 12345678

那么我们想到的最直接和其他 gpg 用户交互的方法,就是导出自己的 gpg public key,然后寄给对方,让我们在这里共享一下自己的 public key 吧。不过注意,直接
gpg --export 12345678
是会花屏的(reset 之),使用 --armor 可以将它变成 ASCII,然后还可以用 --output 啦(后面就不说了)。

当然,私钥也是能导出的,不过如果你的密钥在安全的地方,导出一份到不安全的地方反而不好。后面我们会谈到,可以导出一个 subkey 到其他的地方去用,如果泄露了尽早吊销就好了,不会影响主密钥。
gpg --output someone.sec --export-secret-key 12345678

拿到了别人的公钥后,首先要导入(这部分不存在信任,只是为了处理),然后确定信任关系,才能使用。到入只需要
gpg --import someone.pub
即可。那么我们怎么确定我们拿到的公钥就是声称是自己发布的那个人的呢?我们可以通过密钥的 fingerprint,
gpg --edit-key 12345678
进入到一个 shell 里面,使用 fpr 命令,我们应该通过绝对可靠的方式验证这个指纹,比如找他当面对比(电话... 其实也不安全的说)。一旦确认了这个,我们就可以信任该密钥了。首先,我们应该对该密钥签名(sign 或者 lsign),然后 check 发现该密钥上除了原来对方自己的签名,还有自己的签名。不过这时没有改变信任关系,仅仅是使得自己可以使用该签名加密了。

加密(-e)和解密(-d)很简单,使用对方的公钥可以
gpg --output file.enc --encrypt file

这会提示添加接受人,也可以用 --receipient 指定。解密需要对应的公钥,直接
gpg --output file --decrypt file.enc
即可。加密也可以使用 --armor 产生一个文本文件,体积会比较大;默认情况下会压缩后加密,体积较小。

事实上,也可以直接使用对称密钥(-c)给自己的文件加密,
gpg --output file.enc --symmetric file
解密方法与原来一样。

更重要的功能是签名,签名分为几种,一种签名和原文件放在一起,那只需要
gpg --output file.sig --sign file
即可,这时一般需要 --decrypt 该文件才能获得原来的文件;只需要验证的话,可以用
gpg --verify file.sig
这种签名也会压缩文件,而处理 Email 等文件我们不需要压缩(否则看起来麻烦)。我们选择 --clear-sign,这样就不会改动原文件。另外发布软件的时候,我们也多把签名和发布包分开,这就是所谓的 detached signature,
gpg --output file.sig --detach-sig file
验证的时候写两个参数即可,
gpg --verify file.sig file

下面我们看看如何管理我们的密钥,重要的命令是 --edit-key,这将会让我们进入一个 shell,通过各种命令修改我们手中的密钥,比如增加/删除/吊销 UID(对应多个帐号),增加/删除/吊销 subkeys(可以签名或者加密),指定某个 key 对应的 keyserver(后面介绍如何使用 key server 传播自己的密钥),各种 sign(lsign 只能本地使用不能导出,tsign 同是修改信认为 trust,nrsign 使得不能吊销,delsig 删除签名),添加照片(addphoto),expire 设置过期,primary 设置主 UID,设置信任(trust)等。

我们可以把添加之后的这些信息通过 --export 导出,同时用 gpgsplit 分成若干部分,每部分可以用 pgpdump 查看是否是有效的部分。比如
gpg --export-secret-key | gpgsplit -vp prefix
然后我们可以取一部分去组成新的 key,这里有一篇文章介绍如何修改 primary key 为 subkey,当然比较暴力了。比较文明的是用 --export-secret-subkey。

我们来看看 trust 的级别,分 full、marginal、none 和 unkown,如果是 trust,那么用户 sign 过的密钥的私钥 sign 过的密钥跟自己 sign 过的等同效力,也就是说相信这个人的朋友一定是你自己的朋友(他不会认错人);marginal 则不然,这只是表示信任当前密钥的有效性(我认识你而已,你认识的未必是我认识的);none 表示就不是有效的密钥;unknown 则表示对此一无所知。通过信任关系,可以形成一个有向图。一般信任规则如下:如果自己 sign 了;自己 trust 的人 sign 了;或者三个以上 marginal 信任的人 sign 了,那么就是有效的。或者在 trust 的有向图上,该人和你的最短距离是不超过 5。

利用这个信任关系,更好的方法是用 key server,这样每个人上传自己的 signature 就可以了。从服务器上下载,
gpg --keyserver serverurl --recv-key keyid
或者上传
gpg --keyserver serverurl --send-key keyid

最后提一下一些 frontend,gpg 自己也做了一个叫 gpa(用 gtk+ 写的,不过尚不好用,虽然自称懂得 gpg 的 frontend);GNOME 里面有 seahorse;KDE 里面原来是 kgpg,到了 KDE 4 似乎还有一个 kleopatra。懒得用命令行的人,或者图形界面整合比较方便的人可以玩玩。

2008年9月12日星期五

more, less and most

很早就听说了 more,似乎是 dos 时代的事情,后来发现似乎 more 起源不是 dos,进入 Linux 之后发现了 less,而现在又找到了一个 most。这些程序的主要任务是进行分页(pager),便于终端用户阅读超过一屏的文件或者程序输出。

less 意义上和 more 相反,因为 more 只能向后翻页,所以你只能获得 more content,而 less 则允许你向前翻页。下面是 less 相关的内容,
/usr/bin/less
/usr/bin/lesskey
/usr/bin/lessecho
/usr/bin/lesspipe
/usr/share/man/man1/lessecho.1.gz
/usr/share/man/man1/lesspipe.1.gz
/usr/share/man/man1/less.1.gz
/usr/share/man/man1/lesskey.1.gz
/usr/share/doc/less/LESSOPEN
/usr/share/doc/less/README.Debian
/usr/share/doc/less/copyright
/usr/share/doc/less/changelog.gz
/usr/share/doc/less/changelog.Debian.gz
/usr/lib/mime/packages/less
/usr/bin/lessfile
/usr/share/man/man1/lessfile.1.gz
一般 less 可以查看文件或者通过管道使用,在 less 查看内容时候可以用某些命令,这些命令来源于 more 或者 vi,

而 most 含有
/usr/bin/most
/usr/lib/mime/packages/most
/usr/share/doc/most/README
/usr/share/doc/most/changelog.Debian.gz
/usr/share/doc/most/changelog.gz
/usr/share/doc/most/copyright
/usr/share/doc/most/lesskeys.rc
/usr/share/doc/most/most-fun.txt
/usr/share/doc/most/most.rc
/usr/share/man/man1/most.1.gz
但是似乎比 less 强的就是可以分多个 screen 出来,可以同时打开几个文件阅览,每个打开的文件可以有自己的 mode。比较有用的就是 C-x 2 分屏,o 切换焦点,:n 到下一个文件。

2008年9月11日星期四

at

机缘巧合,不得不用,于是研究下吧:
/var/spool/cron/atjobs
/var/spool/cron/atspool
/etc/at.deny
/etc/init.d/atd
/etc/pam.d/atd
/usr/bin/batch
/usr/bin/at
/usr/share
/usr/share/man/man8/atd.8.gz
/usr/share/man/man1/at.1.gz
/usr/share/man/man5/at.allow.5.gz
/usr/share/doc/at/copyright
/usr/share/doc/at/readme.txt.gz
/usr/share/doc/at/changelog.gz
/usr/share/doc/at/timespec
/usr/share/doc/at/changelog.Debian.gz
/usr/share/doc/at/Problems
/usr/sbin/atd
/usr/bin/atq
/usr/bin/atrm
/usr/share/man/man1/atq.1.gz
/usr/share/man/man1/batch.1.gz
/usr/share/man/man1/atrm.1.gz
/usr/share/man/man5/at.deny.5.gz
其主要的功能是在指定的时间执行指定的程序(at),也可以在系统负荷较低的时候执行(batch)。

at 命令和 batch 用法类似,通过 at TIME 就会获得一个提交命令的 prompt,也可以把命令写入一个文件,然后 -f 指定。-q 可以指定一个 queue(字母 a-zA-Z 指定,获得不同的 nice)。-l 和 atq 作用一样,-d 和 atrm 一样。另有 -c 显示命令到 stdout 和 -v 显示执行时间。配置文件主要是 /etc/at.allow 和 /etc/at.deny,存在前者时仅有里面的用户可以用 at,如果不存在根据后者文件内容拒绝用户(为空时拒绝所有用户)。

atd 是 at 的 daemon,可以指定一个 average load 供 batch 判断是否可以执行任务。

如何声明时间呢?这个是非常的自由的,如果想看看语法,可以参考 /usr/share/doc/at/timespec,用绝对的时间,如 23:11 或者 10:00 pm 等写法都可以,后面可以用 Sep 16 2008 等指定日期。还可以用相对的时间如 now + 4h 获得四小时以后执行的任务。

2008年9月4日星期四

Linux 下的无线网络配置(一)

到现在我使用的无线网卡仅仅局限在 D-Link 的 DWL-G650,这使用的是 atheros 芯片,驱动是 madwifi 提供的,不过有的无线网卡现在的内核已经直接可以驱动了,使用的某些工具和本文类似。不过值得注意的是,将来可能会使用 ath5k 或者 ath9k 的驱动,而不是用 madwifi + hal 的构架了。

相关的包有:
  • madwifi-source 提供 madwifi 的源代码。
  • madwifi-tools 提供一些关于 atheros 芯片的一些程序。
  • wireless-tools 提供配置无线网络的基本命令。
  • wpasupplicant 为无线网络提供 WPA 支持。
  • dhcp3-client 提供 DHCP 配置网络功能。
通过 debian 的 module assistant 安装 madwifi 提供的内核模块,这样就可以避免后期的维护工作,这可以通过
# m-a prepare madwifi
# m-a a-i madwifi
完成。这样就会把 ath_* 等内核模块加载。然后可以用 madwifi-tools 工具创建几个设备。该包主要提供了
/usr/sbin/athstats
/usr/sbin/ath_info
/usr/sbin/80211debug
/usr/sbin/athdebug
/usr/sbin/athkey
/usr/sbin/athchans
/usr/sbin/80211stats
/usr/sbin/athctrl
/usr/share/man/man8/ath_info.8.gz
/usr/share/man/man8/wlanconfig.8.gz
/usr/share/man/man8/80211stats.8.gz
/usr/share/man/man8/athkey.8.gz
/usr/share/man/man8/80211debug.8.gz
/usr/share/man/man8/athctrl.8.gz
/usr/share/man/man8/athchans.8.gz
/usr/share/man/man8/athdebug.8.gz
/usr/share/man/man8/athstats.8.gz
/usr/share/doc/madwifi-tools/README.Debian
/usr/share/doc/madwifi-tools/changelog.Debian.gz
/usr/share/doc/madwifi-tools/copyright
/etc/modprobe.d/madwifi
/etc/network/if-pre-up.d/050madwifi
/etc/network/if-post-down.d/z50madwifi
/sbin/wlanconfig
主要的工具就是 wlanconfig。

首先澄清的一个概念是 atheros 芯片支持多个 VAP,共享在一个物理的无线网卡上。使用 ifconfig 可以获得一个 wifi0 的 interface,这个就是物理设备本身。使用 VAP 的好处是可以产生多个不同类型(mode)的 VAP 分别进行连接。那么 VAP 有些什么类型呢?
  • ahdemo 是另一种 ad-hoc demo (aka pseudo IBSS) mode 模式的 station。
  • adhoc 亦即 ad-hoc mode 的 station,该状态下不需要 AP 就可以互相连接,应该是作为两台笔记本直接联机的用途。
  • ap 亦即 AP mode,这个存在的目的是为了把自己的网卡变成一个 AP,但是可以存在多个 AP mode 的 VAP。自己的网卡作为一个 AP,就可以进行网络的桥接,做好适当的 routing 配置好 forwarding 就能实现很多好玩的功能了。
  • monitor 创建一个 monitor mode 的 station,这个模式类似于网卡的混杂模式。
  • sta 即 station mode,默认情况下(加载 ath_pci 模块时)创建的 VAP 类型,局限在于如果是该设备上第一个 VAP,后面就不能再创建其他的 VAP;但是如果不是第一个创建则可以创建多个不同的 VAP,但是 sta 只能有一个。
  • wds 亦即 WDS mode 下的 station,一般可以直接通过 iwpriv 修改一个 VAP 的对应功能。
我们最常用的可能就是 sta 模式了,这时我们作为一个 client 连接到某个 AP 上工作。后面我们将介绍几种最可能用到的连接方式:
  • sta + phycical AP 最常用无线网络,自己的无线网卡和别人提供的 AP 连接。
  • ad-hoc + ad-hoc 双机对联,两个无线网卡之间联机。
  • monitor 用于窃听,如捕获无线网络中数据,破解 WEP 密码等。
  • ap + sta 一个网卡作为 ap,一个作为 sta 进行连接。
对于桥接等比较高级的话题,等到对网络本身熟悉到足够程度后就知道怎么作了。

对 sta + physical AP 这个模式,我们首先需要创建 sta 模式下的 VAP,这一般在加载 ath_pci 时已经自动的完成了,很可能直接 ifconfig ath0 up 就能看见了,如果没有,可以用
# wlanconfig ath create wlandev wifi0 wlanmode sta
获得,然后我们需要通过该设备获得环境中可以连接的 AP,这部分就开始依靠 wireless-tools 的工具了。如果后面讲到创建 ap 模式的 VAP,我们可能需要去除掉该 VAP,这一般是
# wlanconfig destroy ath0
完成,类似的可以知道如何建立其他的 VAP 并将其销毁。

在 madwifi-tools 里面还有一些其他的工具:
  • athstats 显示物理设备网络负载等统计信息。
  • ath_info 显示 module 的信息、写 eeprom 信息(可以改变通信频段)。
  • 80211debug 用于在 madwifi 的 802.11 栈中设置或者清除调试信息。
  • athdebug 设置或者清除 madwifi 子系统的调试信息。
  • athkey 用于设置 wifiN 设备的四个 key,如 wep 等。
  • ahtchans 设置 wifiN 设备的频道范围。
  • 80211stats 用于显示 802.11 的统计信息。
  • athctrl 用于显示通讯的 stations 之间的最大距离。
  • wlanconfig 除了创建/销毁需要的 VAP 以外,还有 list 功能,如 wlanconfig ath0 list scan 将会列出搜索到的所有 AP 的信息。

下面我们来看 wireless-tools 的作用,这是里面含有的内容:
/sbin/iwconfig
/sbin/iwevent
/sbin/iwgetid
/sbin/iwlist
/sbin/iwpriv
/sbin/iwspy
/usr/share/man/man8/iwconfig.8.gz
/usr/share/man/man8/iwevent.8.gz
/usr/share/man/man8/iwgetid.8.gz
/usr/share/man/man8/iwlist.8.gz
/usr/share/man/man8/iwpriv.8.gz
/usr/share/man/man8/iwspy.8.gz
/usr/share/man/man7/wireless.7.gz
/usr/share/doc/wireless-tools/README.Debian
/usr/share/doc/wireless-tools/copyright
/usr/share/doc/wireless-tools/DISTRIBUTIONS.txt.gz
/usr/share/doc/wireless-tools/PCMCIA.txt.gz
/usr/share/doc/wireless-tools/HOTPLUG.txt.gz
/usr/share/doc/wireless-tools/README.gz
/usr/share/doc/wireless-tools/changelog.Debian.gz
/usr/share/doc/wireless-tools/changelog.gz
/etc/network/if-pre-up.d/wireless-tools
/etc/network/if-post-down.d/wireless-tools
这里面最重要的命令是 iwconfig 和 iwpriv。iwconfig 用于配置一些比较 general 的功能,如 ESSID、AP 的 MAC 地址、mode、频道、速率等。和 ifconfig 类似,不加任何参数的时候显示 /proc/net/wireless 的内容;而 iwpriv 则配置比较 private 的内容,和各个网卡相关的东西,可以用 -a 获得所有可以执行的命令。下面是这些命令的说明:
  • iwevent 显示 wireless 事件,主要是驱动程序或者配置更新的事件。
  • iwgetid 获得当前连接网络的信息,相对于 iwconfig 更适合写脚本使用。
  • iwlist 用于显示无线网络的各种信息,通过 scaning 网络中 AP 获得。
  • iwspy 用于获取无线网络某些节点上的统计信息。

那么,当我们通过 wlanconfig 创建了 sta 后,就应该利用该 ath0 获得可供连接的无线网络,这可以使用
# iwlist ath0 scan
得到一个列表,然后通过
iwconfig ath0 essid something
设置对应的 ESSID,或者也可以用诸如 MAC 地址之类的东西获得连接。在我的无线网卡上,如果没有驱动,会单灯慢速闪烁,另外一个灯熄灭;如果有驱动,插上后,一灯熄灭一灯亮起。使用 iwconfig 指定了连接的 AP 后则会双灯闪烁,这时候我们应该根据 iwlist 列出来的信息,如是否加密设置相应的密码。无线网络和有线网络一样都可以被监听,但是无线的特性使得这个问题更加严重。这个问题往往使用 link-layer 加密解决。如使用的 WEP 加密,可以直接用
# iwconfig ath0 enc ...
命令设置密码,如果是 WPA 类型,我们需要 wpasupplicant,这个包里面含有:
/etc/dbus-1/system.d/wpa_supplicant.conf
/etc/logrotate.d/wpa_action
/etc/logrotate.d/wpa_supplicant
/etc/wpa_supplicant/ifupdown.sh
/etc/wpa_supplicant/functions.sh
/etc/init.d/wpa-ifupdown
/usr/bin/wpa_passphrase
/usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service
/usr/share/doc/wpasupplicant/NEWS.Debian.gz
/usr/share/doc/wpasupplicant/examples
/usr/share/doc/wpasupplicant/examples/wep.conf
/usr/share/doc/wpasupplicant/examples/wpa2-eap-ccmp.conf
/usr/share/doc/wpasupplicant/examples/wpa-roam.conf
/usr/share/doc/wpasupplicant/examples/openCryptoki.conf
/usr/share/doc/wpasupplicant/examples/ieee8021x.conf
/usr/share/doc/wpasupplicant/examples/wpa-psk-tkip.conf
/usr/share/doc/wpasupplicant/examples/plaintext.conf
/usr/share/doc/wpasupplicant/changelog.Debian.gz
/usr/share/doc/wpasupplicant/copyright
/usr/share/doc/wpasupplicant/changelog.gz
/usr/share/doc/wpasupplicant/README.wpa_supplicant.conf.gz
/usr/share/doc/wpasupplicant/README.gz
/usr/share/doc/wpasupplicant/README.Debian.gz
/usr/share/man/man8/wpa_action.8.gz
/usr/share/man/man8/wpa_passphrase.8.gz
/usr/share/man/man8/wpa_cli.8.gz
/usr/share/man/man8/wpa_supplicant.8.gz
/usr/share/man/man8/wpa_background.8.gz
/usr/share/man/man5/wpa_supplicant.conf.5.gz
/sbin/wpa_action
/sbin/wpa_cli
/sbin/wpa_supplicant
/etc/network/if-up.d/wpasupplicant
/etc/network/if-down.d/wpasupplicant
/etc/network/if-post-down.d/wpasupplicant
/etc/network/if-pre-up.d/wpasupplicant
/usr/share/doc/wpasupplicant/README.modes.gz
这里面主要的两个命令是 wpa_passphrase 和 wpa——supplicant,前者用于产生需要的密钥信息,后者用于给指定的设备添加 WPA。一般利用
wpa_passphrase essid passphrase
生成一段信息,将其置入某个文件,然后用 wpa_supplicant 这个 daemon 产生需要的加密:
wpa_supplicant -B -Dwext -iath0 -c file
下面是一些其他程序的介绍:
  • wpa_supplicant 其中 -D 选择的是 wireless 的 driver 类型,-i 指定 interface(-N 可以指定多个)。
  • wpa_action 对指定 interface 发布指定的命令。可以用 wpa_cli 调用该命令。
  • wpa_cli 是一个文本界面下和 WPA 交互的客户端。

一般通过 ifconfig ath0 up 启动了对应的 interface 后,需要配置 IP 地址,这可以用 dhclient 通过 DHCP 实现动态的配置,这在 dhcp3-client 包中。

下面我们就其他的几种情况讲解如何配置无线网络:
ad-hoc + ad-hoc: