Freeradius und MySQL 
Ich habe jetzt einige Stunden damit zugebracht, einen FreeRADIUS mit MySQL sprechen zu lassen. Nicht, dass es dazu kein Modul gäbe, nein, apt-get install freeradius-mysql und alle Voraussetzungen sind da. Da Problem ist, dass das Befüllen der Datenbank nicht eindeutig geklärt ist. Wenn man darüber nachdenkt, ist das natürlich auch klar, weil die einzufüllenden Attribute vom Anwendungszweck abhängen: In meinem Projekt ging es um Dial-In User, die via L2TP von einer Cisco versuchen, sich zu authentifizieren. Ein diesem Spezialfall enthält der Benutzername auch noch ein # Zeichen. Sondernzeichen werden fom FreeRADIUS MIME-encoded and die DB weitergegeben. Das führt dazu, dass der Benutzername nicht "user#suffix@domain", sondern als "user=23suffix@domain" repräsentiert wird. Das ist natürlich Quatsch und läßt sich wie folgt beheben (Thx, Lilalinux!): Man fügt das # (hash) in der sql.conf zu den safe-characters hinzu:
safe-characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /#"
Das Anlegen der DB Schema lässt sich unter Debian wie folgt erledigen:
mysqladmin create radius
zcat /usr/share/doc/freeradius/examples/mysql.sql.gz | mysql radius
Und dann sollte dem Benutzer radius auch Zugriff auf die Datenbank "radius" gegeben werden:
GRANT ALL ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'PaSsW0Rt'; FLUSH PRIVILEGES;
Und zum Anlegen eines User habe ich das folgendes Bash-Script entwickelt (Da es nur ein Provisorium ist, fängt es u.a. keine Fehler ab)
#!/bin/sh
# (c)= Andras John, GPL V2
DBNAME=
"radius"
USERNAME=$1
PASS=$2
STATICIP=$3
echo
"insert into usergroup(UserName, Groupname) VALUES('${USERNAME}','static');" | mysql ${DBNAME}
echo
"insert into radcheck(UserName,Attribute,Value,Op) VALUES('${USERNAME}','Password','${PASS}','==');" | mysql ${DBNAME}
# only once
echo
"insert into radgroupcheck(GroupName,Attribute,Value,Op) VALUES('static','Auth-Type','Local',':=');" | mysql ${DBNAME}
#
echo
"insert into radreply(UserName,Attribute,Value,Op) VALUES ('${USERNAME}','Service-Type','Framed',':=');" | mysql ${DBNAME}
echo
"insert into radreply(UserName,Attribute,Value,Op) VALUES ('${USERNAME}','Framed-Protocol','PPP',':=');" | mysql ${DBNAME}
echo
"insert into radreply(UserName,Attribute,Value,Op) VALUES ('${USERNAME}','Framed-Routing','None',':=');" | mysql ${DBNAME}
echo
"insert into radreply(UserName,Attribute,Value,Op) VALUES ('${USERNAME}','Framed-IP-Address','${STATICIP}',':=');" | mysql ${DBNAME}