咱们这个不甚成器的『团队』蜗居于一个房间里,原本有什么事喊两声即可搞定。可是,有一些信息是难以喊出来的。譬如,我该怎么喊出来这份文档的地址?网络即时通信工具是很是有必要的。因而,问题就来了。工做环境是 Linux,注定与 QQ,微信之类的现代网络即时通信工具无缘了,几乎只剩下 IRC 可选。安全
为何不用 wine 模拟 qq 或微信?由于,不值得。为了这么一点小事,去加载一个内存开销并不过小的 win32 运行时库,还要运行一个内存开销更不会过小的 QQ,内存消耗几百 MB。内存虽然不像过去那么珍贵了,可是跑个 IM 软件,用的内存都抵上跑一个 mate 桌面了,这太夸张了。Linux 用户要用 QQ,微信什么的,仍是用手机吧。服务器
IRC,古老,外观永远简陋,可是从另外一个角度来看,它依然保持着网络即时通信的初心——感受现代人在不少事情上忘记或者不敢正视本身的初心了。更重要的是,很容易在本地搭建一个 IRC 服务器。对于群体的内部通信而言,原本就不必将信息发送到外网,而后再由外网传送回来。微信
几年前,曾在实验室内部使用的 IBM 服务器的 FreeBSD 系统上配置过 ircd-hybrid。去年,那台服务器去年坏掉了,没钱再买新的,结果咱们就基本靠喊了。如今我公而忘私,决定在个人机器上搭建 IRC 服务。网络
我用的系统是 Gentoo。在官方仓库里没找到 ircd-hybrid——即便找到了,我也忘记咋配置的了,可是我发现了号称是『Next Generation IRC Daemon』的 ngircd。这个下一代 IRC 守护神是用 C 写的,依赖不多,很快就装上了。tcp
ngircd 认为我已经会用它了,因此只是在 /etc/ngircd/
目录里提供了一份示例性质的配置文件,让我根据本身的状况酌情修改。我只简单的将 [Global]
部分的 Name
项设置为我机器的 IP:ide
[Global] Name = 192.168.0.7
而后启动 IRC 服务(传统的 init 启动方式,没用 systemd,由于不喜欢):工具
$ sudo /etc/init.d/ngircd start
为了验证能不能连上这个服务,我在 pidgin 里建了一个 IRC 账号(密码置空):ui
当我用这个账号登陆 IRC 服务器——个人本机时,便开启了差很少一个下午的折腾模式,由于登陆不进去。加密
停掉 ngircd 服务,而后手动启动它:spa
$ sudo /etc/init.d/ngircd stop $ sudo ngircd -n
而后再用 pidgin 账号链接,ngircd 在终端中输出提示,说 PAM 什么什么……仔细查看 /etc/ngircd/ngircd.conf
的 PAM 配置项,
[Options] ;PAM = yes
PAM 功能并未开启(去掉分号,方能开启)。即便我将它们改为:
[Options] PAM = no
结果仍是没法登陆。
PAM 是什么?用了这么多年 Linux,看到这个词,一贯都是绕着走的(遇到 polkit,SELinux 之类的词,我也是绕着走),今天,彷佛没办法再躲开了。
接下来须要省略好几千字,由于我四处搜索 PAM 的科普,搜索 ngircd 与 PAM 有啥关系以及如何进行配置,搜索为何要用 PAM 以及为何 PAM 让我以为厌烦……结果,我依然没有真正弄明白到底什么是 PAM。那些文档无一例外的都在大讲特讲 PAM 是怎么出现的,多么多么好,却永远不给出一个通俗易懂的简单示例。
不懂也不要紧,后来我找到了 ngircd 官方给出的一份 ngircd 的 PAM 文档,这份文档很短。短的让我不知道我该在 /etc/ngircd/ngircd.passwd
文档里应该放入谁的加密口令,是写 ngircd,仍是要登陆 ngircd 服务器的咱们?根据 ngircd 输出的登陆失败提示信息,应该是写咱们这些用户的加密口令。即便我理解这些也没用,由于 ngircd 要使用 PAM 的功能,须要个人系统 /lib/security/
目录中要有 pam_pwdfile.so
库文件,然而个人系统却没这个库文件。Gentoo 官方仓库也没 pam_pwdfile
或 pam-pwdfile
这样的包。
就这样,一个下午过去了。配置文件即便不开启 PAM 功能,ngircd 服务运行的时候依然硬性的要求 PAM……最后没辙了,查看一下 ngircd 的 USE 标识:
$ emerge -pv ngircd [ebuild R ] net-irc/ngircd-23-r1::gentoo USE="iconv tcpd zlib pam ssl -debug -gnutls -ident -ipv6 -libre
我将它的 pam
标识关闭,从新安装。完毕后,启动 ngircd 服务,再用 pidgin 帐户登陆,结果成功了!担忧 ssl
也会出幺蛾子,因此又将 ssl
标识也关闭了,又从新编译了一次。
事实上,我不须要 PAM 与 SSL,不管它有多么安全。内部使用 IRC,还须要设防么?尽管瞎折腾了一番,可是对 PAM 有了一些认识,并见识了 ngircd 的奇葩之处——你编译了 PAM 模块,就必须用 PAM,也算是对得起这令我抓狂的一个下午了。看到了吧,Linux 用户就是这么贱兮兮的。
下面给出个人 ngircd 完整的配置文件,谨做参考:
[GLOBAL] Name = 192.168.0.7 AdminInfo1 = Nothing AdminInfo2 = Nothing AdminEMail = liyanrui.m2@gmail.com HelpFile = /usr/share/doc/ngircd-23-r1/Commands.txt Info = 124 IRC Listen = 0.0.0.0 MotdFile = /etc/ngircd/ngircd.motd MotdPhrase = Network = Password = PidFile = Ports = 6667 ServerGID = nogroup ServerUID = ngircd [LIMITS] ConnectRetry = 60 IdleTimeout = 0 MaxConnections = 0 MaxConnectionsIP = 5 MaxJoins = 10 MaxNickLength = 9 MaxListSize = 100 PingTimeout = 120 PongTimeout = 20 [OPTIONS] AllowedChannelTypes = #&+ AllowRemoteOper = no ChrootDir = CloakHost = CloakHostModeX = CloakHostSalt = 43=B*_sq!rLS\,yA:c6n)bz"U5Z&F0KJ CloakUserToNick = no DefaultUserModes = DNS = yes IncludeDir = /etc/ngircd/ngircd.conf.d MorePrivacy = no NoticeBeforeRegistration = no OperCanUseMode = no OperChanPAutoOp = yes OperServerMode = no RequireAuthPing = no ScrubCTCP = no SyslogFacility = local5 WebircPassword = [CHANNEL] Name = #基地 Modes = Key = MaxUsers = 0 Topic = 有话好好说! KeyFile =
其中,大部分条目都是默认的,我本身设置的条目以下:
[Global] # 服务器 IP Name = 192.168.0.7 # IRC 命令帮助文件,Gentoo 系统安装后,是 .bz2 文件,需本身解压缩 HelpFile = /usr/share/doc/ngircd-23-r1/Commands.txt # 124 咱们的房间号,设着玩的 Info = 124 IRC # 这个 .motd 文件本身去建,内容是介绍一下今天的主要话题,或发布通告 MotdFile = /etc/ngircd/ngircd.motd [Channel] # 咱们不是恐怖组织 Name = #基地 # 都用 IRC 了,想很差好说话也不行 Topic = 有话好好说!
下一篇介绍用 pidgin 玩 IRC 的一些招。
后记:
后来,我发现,即便 ngircd 默认开启了 PAM 功能,可是若是像下面这样进行配置:
[Options] PAM = yes PAMIsOptional = yes
上文中所建的 pidgin 的 IRC 账户可以以未经 PAM 受权的身份登陆 IRC 服务器。