团队内部不甚讲究的 IRC 服务搭建

CodeTrailblazerX
• 阅读 11987

我们这个不甚成器的『团队』蜗居于一个房间里,本来有什么事喊两声便可搞定。但是,有一些信息是难以喊出来的。譬如,我该怎么喊出来这份文档的地址?网络即时通讯工具是非常有必要的。于是,问题就来了。工作环境是 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 写的,依赖很少,很快就装上了。

ngircd 认为我已经会用它了,所以只是在 /etc/ngircd/ 目录里提供了一份示例性质的配置文件,让我根据自己的情况酌情修改。我只简单的将 [Global] 部分的 Name 项设置为我机器的 IP:

[Global]
    Name = 192.168.0.7

然后启动 IRC 服务(传统的 init 启动方式,没用 systemd,因为不喜欢):

$ sudo /etc/init.d/ngircd start

为了验证能不能连上这个服务,我在 pidgin 里建了一个 IRC 帐号(密码置空):

团队内部不甚讲究的 IRC 服务搭建

当我用这个帐号登录 IRC 服务器——我的本机时,便开启了差不多一个下午的折腾模式,因为登录不进去。

停掉 ngircd 服务,然后手动启动它:

$ 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_pwdfilepam-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 服务器。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Stella981 Stella981
3年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
CodeTrailblazerX
CodeTrailblazerX
Lv1
岁月,造就了厚重的历史,驱走了英雄的风流。
文章
4
粉丝
0
获赞
0