在2006.03.13時我依照此份文件於CentOS 4.2的機器上重新安裝freeradius server,發現此文章有需要修改之處,所以重新更新此文章內容。
一 前言RADIUS是 Remote Authentication Dial-In User Service 的縮寫,可以執行對用戶的驗證、授權和記費(AAA)。
在Unix-Like的作業系統(如linux,bsd...)上最常被使用的radius伺服器軟體是freeradius,這是一套開源碼(open source code)且免費的軟體,所以本文重點就在於如何在linux上架設freeradius伺服器的過程,至於RADIUS本身的運作原理則不在本文討論範圍。
二 安裝環境本文件依照以下環境安裝與執行並進行相關測試:
OS : CentOS 4.2 i386(RedHat RHEL 4 clone version)
website :
http://www.centos.orgfreeradius : freeradius-1.1.1.tar.gz
website :
http://www.freeradius.orgMysql : mysql-4.1.12-3.RHEL4.1 (2006.03.20釋出)
Compiler : GCC-3.4.4-2
三 下載與解壓縮軟體下載freeradius軟體請至
http://www.freeradius.org/getting.html 載回最新版軟體。
下載之軟體建議放至 /usr/local/src下進行編譯,以下的文章皆以 /usr/local/src目錄為安裝目錄。
解壓縮軟體請執行
tar zxvf freeradius-1.1.1.tar.gz解壓縮完畢之後將會產生一個freeradius-1.1.1的目錄,所有解壓縮完的檔案都會放在這個目錄下。
四 移除舊軟體如果你的OS是完整安裝的話,那在開始進行編譯與安裝之前,必須先將OS所附的舊版freeradius移除掉再進行後續的編譯與安裝。
以root使用者權限執行以下指令:
rpm -e freeradius*五 編譯與安裝以root權限執行以下指令:
./configure
make
make install沒錯,這樣就完成了整個程式的編譯與安裝,夠簡單了吧?
如果要指定安裝的目錄與設定檔的目錄的話,可以改成:
./configure --localstatedir=/var --sysconfdir=/etc
make
make install六 設定mysql資料庫在進行freeradius的設定與執行之前,我們先將mysql的資料庫與相關設定做好,在資料庫這方面我建議以phpmyadmin來進行相關工作會比較輕鬆。
當然,如果你很熟mysql的指令操作的話也可以使用文字模式下的指令來進行。
mysql資料庫的安裝可以參考本站這篇文章:
http://www.bell.idv.tw/modules/newbb/viewtopic.php?topic_id=4&forum=1phpmyadmin的安裝可以參考本站這篇文章:
http://www.bell.idv.tw/modules/newbb/viewtopic.php?topic_id=53&forum=3首先先建立一個新的資料庫,名稱為 radius。
然後建立一個資料庫使用者,名稱為 radius,並賦予他使用資料庫radius的權力。
匯入 radius 資料表
cd /usr/src/freeradius-1.1.1/src/modules/rlm_sql/drivers/rlm_sql_mysql
mysql -uroot -p密碼 radius < db_mysql.sql 完成之後便會在資料庫radius中建立相關資料。
在radius資料庫中加入群組資料:
先登入資料庫
mysql -uroot -p密碼 radius在mysql提示號之後輸入以下指令
insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Address',':=','255.255.255.254');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');
加入測試帳號
指令
insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test');群組中加入測試帳號
指令
insert into usergroup (username,groupname) values ('test','user');以後新增人員時只要使用下列命令
指令
insert into radcheck (username,attribute,op,value) values ('帳號','User-Password',':=','密碼');
insert into usergroup (username,groupname) values ('帳號','user');到此已經完成mysql的準備工作了。
七 設定RADIUSfreeradius的設定檔統一放在 /etc/raddb 目錄下,欲進行下列變更之前請先將原始設定檔備份。
更改 radiusd.conf 部份設定
原始設定:
#user = nobody
#group = nobody
hostname_lookups = no
allow_core_dumps = no
regular_expressions = yes
extended_expressions = yes
log_stripped_names = no
log_auth = no
log_auth_badpass = yes
log_auth_goodpass = yes
usercollide = no
lower_user = no
lower_pass = no
nospace_user = no
nospace_pass = no 改成如下:
user = root 拿掉前面的#號
group = root 拿掉前面的#號
hostname_lookups = yesallow_core_dumps = no
regular_expressions = yes
extended_expressions = yes
log_stripped_names = yeslog_auth = yeslog_auth_badpass = yes
log_auth_goodpass = yes
usercollide = no
lower_user = yeslower_pass = no
nospace_user = no
nospace_pass = no 接下來修改以下部份,原始設定如下
# detail auth_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
# detailperm = 0600
#}
# detail reply_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
# detailperm = 0600
#}
authorize {
preprocess
# auth_log
# attr_filter
chap
mschap
suffix
eap
files
# sql
}
accounting {
detail
radutmp
# sql
}
session {
radutmp
# sql
}
post-auth {
# reply_log
# sql改成如下
detail auth_log { <-拿掉前面的#號
detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d <-拿掉前面的#號
detailperm = 0600 <-拿掉前面的#號
} <-拿掉前面的#號
detail reply_log { <-拿掉前面的#號
detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
detailperm = 0600 <-拿掉前面的#號
} <-拿掉前面的#號
authorize {
preprocess
auth_log <-拿掉前面的#號
attr_filter <-拿掉前面的#號
chap
mschap
suffix
eap
files
sql <-拿掉前面的#號
}
accounting {
detail
radutmp
sql <-拿掉前面的#號
}
session {
radutmp
sql <-拿掉前面的#號
}
post-auth {
reply_log <-拿掉前面的#號
sql <-拿掉前面的#號
}到這邊就完成了radiusd.conf的設定,接下來要修改的是 clients.conf 檔。
在檔案的最後面新增以下內容:
client 192.168.1.1 {
secret = testing123
shortname = test
}注意!此處的ip address請依照自己的區域網路內容設定,不可照抄,以我自己的設定來說,我就將client 192.168.1.1修改為 10.0.0.xx,因為我的區網使用的private ip segment就是10.0.0.0。再來修改 sql.conf 的內容
sql {
driver = "rlm_sql_mysql"
server = "localhost" MySQL 主機位置
login = "radius" MySQL 帳號
password = "radius" MySQL 密碼
radius_db = "radius" MySQL 資料庫名稱
還記得在第六項時所作的mysql資料庫相關設定嗎?這裡的設定必須與第六項中的設定一致才行,如果你並不是依照範例設定,那記得在這邊要將內容設成與你的資料庫及使用者名稱還有密碼相符。
sqltrace = no <-請改成
yes以上便完成了 sql.conf 檔案的修改,接下來修改 eap.conf 檔案。
eap {
default_eap_type = md5改為
default_eap_type = peap拿掉下列幾行的註解符號 #
tls {
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem
certificate_file = ${raddbdir}/certs/cert-srv.pem
CA_file = ${raddbdir}/certs/demoCA/cacert.pem
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
}
peap {
default_eap_type = mschapv2
}
以上便完成了 eap.conf 檔案的修改,接下來修改 users 這個檔案。
找到這一段
#"John Doe" Auth-Type := Local, User-Password == "hello"
# Reply-Message = "Hello, %u"在他的後面加入
"testf" Auth-Type := Local, User-Password == "testf"
Reply-Message = "Hello, %u" 目的在於新增一個名稱為testf密碼為testf的使用者。
然後在以下兩行前面加入註解符號 #
DEFAULT Auth-Type = System
Fall-Through = 1變成如下這樣
#DEFAULT Auth-Type = System
# Fall-Through = 1進行到這裡,已經完成了所有相關設定檔案的修改。
八 執行freeradiusfreeradius的主程式有兩種執行模式,一種是正常執行,只要以root權限輸入指令
radiusd便可以正常執行freeradius程式,執行畫面如下
[
root@bell raddb]# radiusd
Tue Mar 14 15:53:41 2006 : Info: Starting - reading configuration files ...
要知道是否有正常執行起來可以用以下指令查詢
ps -A | grep radiusd會看到類似以下的畫面就是成功了,表示程式已經常駐在記憶體中執行
[
root@bell raddb]# ps -A | grep radiusd
18197 ? 00:00:00 radiusd
前面的數字18197是PID(program ID),每台機器得到的結果並不會一樣,請不必在意,重點在後面。
另一種執行方式是除錯模式,請執行以下指令
[root@bell raddb]# radiusd -x這時螢幕上會出現如下般的訊息畫面
Starting - reading configuration files ...
Using deprecated naslist file. Support for this will go away soon.
Module: Loaded exec
rlm_exec: Wait=yes but no output defined. Did you mean output=none?
Module: Instantiated exec (exec)
Module: Loaded expr
Module: Instantiated expr (expr)
Module: Loaded PAP
Module: Instantiated pap (pap)
Module: Loaded CHAP
.
.
.
[中間多餘的訊息節略]
Ready to process requests.
這表示radiusd進入除錯模式(debug mode),client端的任何存取都會將相關訊息顯示在螢幕上,以方便管理者進行除錯。
如果程式能正常執行,那就可以進行下一步了。
九 測試首先先測試 flies 認證,請執行以下指令
radtest testf testf localhost 0 testing123如看到以下顯示就表示 files 認證正常
Sending Access-Request of id 206 to 127.0.0.1 port 1812
User-Name = "testf"
User-Password = "testf"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=206, length=34
Reply-Message = "Hello, testf"
這裡看到的 Reply-Message 就是你設定在 users 設定檔裡的內容,如果你改變了相關內容這裡顯示的部份也會跟著改變。而 testf testf 就是你設定在 users 設定檔裡的帳號與密碼。
不過要記得,每次變更完 users 檔案內容後,都必須重新開啟 radiusd 以使程式載入新的設定內容。
再來測試 MySQL 認證,執行以下指令
radtest test test localhost 0 testing123如看到以下顯示就表示 mysql 認證正常
[
root@bell raddb]# radtest test test localhost 0 testing123
Sending Access-Request of id 192 to 127.0.0.1 port 1812
User-Name = "test"
User-Password = "test"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=192, length=38
Service-Type = Framed-User
Framed-IP-Address = 255.255.255.254
Framed-IP-Netmask = 255.255.255.0
進行到這裡都能正常的話就表示你的 freeradius 伺服器已經可以利用 files 與 mysql 資料庫來進行認證了。
注意!在測試完畢之後請記得將 users 檔案中與 mysql的radius資料庫中將測試帳號刪除掉,以免造成系統漏洞,使不懷好意的使用者得以鑽過認證對系統產生危害。十 結語freeradius伺服器能接受的認證方式很多,這裡僅舉了 files 與 mysql 的認證方式,至於其他如LDAP,PAM....等認證方式等以後有機會時再介紹。
十一 附錄本文參考以下相關資料寫成
來自酷!學園討論區
http://phorum.study-area.org//viewtopic.php?t=33002&sid=405835706ac1b7ae0012e49490ed8a51來自IBM網站
http://www-128.ibm.com/developerworks/tw/library/l-radius/來自中國天極網
http://www.yesky.com/20030306/1655467.shtml本文中以
藍色字體標示的部份表示是linux系統下藥執行的指令。
以
草綠色字體標示的部份則是mysql 提示符號下執行的指令。
以
黃色字體標示的部份則為設定檔中的內容。
以
紅色字體標示的部份則是要修改的地方或是警語。
十二 相關設定檔範例下載在這裡我將已經按照上述文章修改過的設定檔提供有需要的人下載,下載之後有兩個檔案需視環境稍做修改,一個是clients.conf,client ip請依照你的環境去設。另一個是sql.conf,其中關於資料庫帳密等地方需依照你的環境做修改。
radiusd.conf範例下載:
http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/radiusd.confclients.conf範例下載:
http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/clients.confsql.conf範例下載:
http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/sql.confeap.conf範例下載:
http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/eap.confusers範例下載:
http://www.bell.idv.tw/bell/doc/linux/conf/freeradius/users文章日期:2006.03.14
文章作者:Bell