團隊內部不甚講究的 IRC 服務搭建

咱們這個不甚成器的『團隊』蝸居於一個房間裏,原本有什麼事喊兩聲即可搞定。可是,有一些信息是難以喊出來的。譬如,我該怎麼喊出來這份文檔的地址?網絡即時通信工具是很是有必要的。因而,問題就來了。工做環境是 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

pidgin-irc-account

當我用這個賬號登陸 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_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 服務器。

相關文章
相關標籤/搜索