发掘可得到的模块

优质
小牛编辑
132浏览
2023-12-01

行动时刻 - 发现可用的模块

上表仅显示了几个模块。 还有许多其他被使用的模块未列出。 由于有这么多可用模块,所以最好了解更多有关它们的信息。 在本练习中,我们将查看以下内容:

  • 找到已安装的模块
  • 查找有关可用模块的更多信息
  • 安装缺少的模块
  • 找到已安装的模块

FreeRADIUS将模块存储在与其他库相同的目录中。 是时候看看这个目录在哪里了:

  1. 打开位于FreeRADIUS配置目录中的radiusd.conf文件,找到libdir指令。 这将指示模块在文件系统中的安装位置。
  2. 切换到指定的目录并执行以下命令以列出所有已安装的模块:
$> cd /usr/lib/freeradius
$> ls -l rlm_*

将显示已安装模块的列表。 他们中的大多数将有两个条目。 一个是指向特定版本模块的符号链接。

刚刚发生了什么?

我们确定了FreeRADIUS配置文件中FreeRADIUS存储模块指定的位置。 我们还查看了当前安装的模块列表。

在配置文件中查找文本并修改文本 以下是一个方便的命令,用于查找短语出现的行号: grep -i“libdir”-n /etc/freeradius/radiusd.conf 如果要编辑上一个命令返回的其中一行,可以使用vi编辑器并在指定文件名后添加+ <行号>开关: vi /etc/freeradius/radiusd.conf +106 这将打开/etc/freeradius/radius.conf,第106行上的光标可以编辑。

命名约定

FreeRADIUS中模块的命名约定如下: rlm_<module name>.so

像eap和sql这样的模块使用子模块。 这些子模块通常是特定于功能的,如eap的md5模块或sql的mysql模块。 然后,该功能将反映在子模块的名称中。 这就是为什么我们有rlm_eap_md5.so和rlm_sql_mysql.so。

.so扩展名是Unix和Linux系统上用于命名共享库(也称为共享对象)的约定。 这类似于Windows环境中用于命名DLL的.dll扩展名。 FreeRADIUS将模块视为共享库,并通过动态链接器加载它。

添加替代路径

如果您在与配置文件中的默认目录不同的目录中安装了额外的FreeRADIUS模块,则可以添加其他位置。这将指示动态链接器还在那里搜索模块。或者,您也可以使用LD_LIBRARY_PATH环境变量。 有时FreeRadius找不到可由FreeRadius或FreeRadius的特定模块使用的零件库(而不是模块)。然后,您通常会看到“未定义的符号”消息。如果已在libdir列表中指定了此库的路径但它仍然不起作用,请尝试使用LD_PRELOAD环境变量。我们在本书前面做过这个,作为分发特定perl模块bug的解决方法。 我们现在知道已安装的模块,但未安装的模块呢?当然必须有更多可用的?

可用模块

您的FreeRADIUS部署可能不包含所有可用的FreeRADIUS模块。您可以使用更多模块。开始搜索的最佳位置是FreeRADIUS Wiki。以下页面列出了大量模块: http://wiki.freeradius.org/List_of_modules 它概述了可用的模块。每个列出的模块都有指向该特定模块的文档的链接。文档量取决于模块的复杂程度。有一些链接导致空白的Wiki页面。 大多数模块都可以配置。下一节将介绍模块的包含和配置。

缺少模块

所以你注意到这个超级酷的模块,它在FreeRADIUS Wiki上列出但未安装在你的FreeRADIUS服务器上。大多数情况下,只需使用包管理器查找所有可用的FreeRADIUS包并安装包含丢失模块的包。 根据您使用的分发方式,某些模块是单独打包的。如果您正在使用CentOS并且想要使用perl模块,则必须安装freeradius2-perl软件包。另一个可以缺少的常见模块是sql_mysql模块(rlm_sql_mysql.so),它通常是单独打包的。

因为FreeRADIUS是在积极开发的,所以它包含一些令人兴奋的模块,这些模块尚未准备就绪。 要包含这些模块,您通常会使用带有--with-experimental-modules配置选项的configure,make,make install patern从最新源编译和安装FreeRADIUS。 在以这种方式编译源代码之前,请确保已安装所有必需的开发库。 您还可以使用服务器上安装的源代码编写和编译自己的模块。 但是,这超出了本书的范围,但FreeRADIUS Wiki提供了可供您入门的文档。 定制模块的分发者通常还包括有关如何编译和安装其模块的说明。 我们现在知道已安装的模块,可用的模块以及可能缺失的模块。 在下一节中,我们将了解如何包含和配置模块。