简介
文件格式是围绕三个基本元素构建的:变量赋值、变量和模块引用以及章节。
配置文件的格式是基于行的文本。每个配置设置必须在单独的行上。任何看过其他Unix配置文件的人都应该熟悉这种格式。
注释是允许的,并且很容易通过使用#字符识别:#字符之后的任何文本都被认为是注释,因此解析器会忽略它。空格、制表符和空行没有任何意义,解析器也会忽略它们。
可以通过在换行的位置上放置反斜杠()作为最后一个字符来撤销无意的换行。在下面的例子中,等号后面的反斜杠将第一行和第二行都强制放到一个连续的行上:
foo =
bar
上面的例子被解释为:
foo = bar
变量赋值
FreeRADIUS一般具有具有预定义含义的预定义变量名。例如,变量raddbdir定义了服务器存储配置文件的目录。变量被赋值。值可以是整数、字符串、文件名等。
可以使用多种格式将字符串赋值给变量。与大多数系统一样,可以使用单引号和双引用字符串。空格和其他字符也可以在字符串中使用。例如:
secret = testing123
secret = "testing 1 2 3"
secret = 'testing 1 2 3'
上面的第一个示例将secret变量设置为testing123。第二个和第三个例子设置为1 2 3,其中包含了空格。
第二个示例和第三个示例的区别在于,双引号表明字符串可以动态扩展,而字符串周围的单引号表明值是“as-is”,不进行扩展。
动态展开在使用变量间引用时最有用。例如:
foo = bar # sets variable foo’ to value ’bar’
other = "my ${foo}" # sets variable ’other’ to value ’a bar’
third = 'my ${foo}’ # sets variable ’third’ to value ’my ${foo}'
变量引用
当多个变量包含一样的值时,可以使用变量引用。在本例中,默认配置(第一行)定义了一个logdir变量。然后根据logdir变量引用引用该目录中各种日志文件的位置。
logdir = /var/log/radius
...
file = ${logdir}/radius.log
...
detailfile = ${logdir}/detail
模块引用
模块引用可以实现服务器加载共享模块,在服务器收到数据包时调用该模块。服务器只在选定的位置使用这些引用(例如,授权或认证子模块),如果在其他地方使用,则会导致错误。
章节
章节用来定义配置变量的逻辑组。网络管理员给每个章节一个名称,并使用{}字符将组括起来:
mygroup {
foo = bar
other = "my ${foo}"
}
前面的示例定义了一个名为' mygroup '的简单章节,其中包含两个变量' foo '和' other '。和变量名一样,在FreeRADIUS系统中,章节名也被赋予特定的含义。例如,章节名称client定义了一组与特定RADIUS客户端相关联的变量。
要定义多个client,需要为每个client创建一个client章节。第二个限定符(也称为“实例名”)被添加到章节中,以区分同一类型的不章节。下面的例子显示了两个名为foo和bar的客户端:
client foo {
ipaddr = 192.0.2.100
secret = testing123
}
client bar {
ipaddr = 192.0.2.200
secret = very_secret
}
有许多章节类型名称,包括client、home_server、home_server_pool和realm,服务器将识别这些名称。于每个章节类型的是有可以在该章节中特定使用的变量列表。展示这些概念的例子可以在默认配置中找到;章节名、函数和变量赋值都记录在每行周围的注释中。
通过包含文件进行引用
配置文件可以被分割成多个部分,然后在加载时使用$INCLUDE指令重新组装。这个指令使配置包含当前位置的特定文件,就像引用的文件被插入到文件中取代$INCLUDE一样。例如,如果我们有一个名为other.conf的文件,其中包含以下文本:
other = "my ${foo}"
那么以下两种构型是一样的:
1.
foo = bar
other = "my ${foo}"
2.
foo = bar
$INCLUDE other.conf
上面的示例2使用$INCLUDE来拉入other.conf文件,这将导致与上面的示例1一样的配置。
网络管理员使用$INCLUDE指令来组织配置文件。以/开头的文件是绝对路径。否则,路径是相对于当前文件的。
绝对路径:$INCLUDE /etc/raddb/foo.conf
相对路径:$INCLUDE example/foo.conf