ตั้งค่า freeradius exec python

ต่อจากงานที่ต้องทำให้ freeradius ต่อกับ ad แล้วไปเจอปัญหาว่า

ลูกค้าต้องการให้ แยก OU ที่ต่างกันให้ได้รับ reply แอตทริบิวต์ ที่ต่างกัน

ปัญหาที่เจอคือ radius ไม่สามารถอ่าน OU แล้วส่งแยกได้แบบนั้น (จากที่หาข้อมูลและพยายามตั้งค่านะ หากได้จะมาแจ้งอีกที)

จึงได้ทำให้freeradius สามารถexec  ไฟล์ python ในการไปอ่าน ad และดึง ou แทน โดยมีรายละเอียดดังนี้

ไปที่ mods-enabled/exec โดยไปแก้ที่ wait = yes

จากนั้นไปที่  sites-enabled/default

แล้วไปที่ authorize แล้วลงมาดูที่ -sql  โดยเพิ่มด้งนี้

 

-sql{
notfound = 1
reject = 2
}
if(notfound){

if ( “%{exec:/usr/bin/python3.6 /etc/raddb/radiusAuthentication.py %{User-Name} %{%{User-Password}:-Chap-Password}}” == “accept” ) {
if ( “%{exec:/usr/bin/python3.6 /etc/raddb/radius_check_ou.py %{User-Name} %{%{User-Password}:-Chap-Password}}” == “OU=guestDC=kmzohanDC=com” ) {
update control {
Auth-Type := accept
reply:Service-Type := ‘NAS-Prompt-User’
}
}elsif ( “%{exec:/usr/bin/python3.6 /etc/raddb/radius_check_ou.py %{User-Name} %{%{User-Password}:-Chap-Password}}” == “OU=strefDC=kmzohanDC=com” ) {
update control {
Auth-Type := accept
reply:Service-Type := ‘Administrative-User’
}
}else{
update reply {
Reply-Message := “Login Failed. Please check your Username and Password”
}
reject
}

}else{
update reply {
Reply-Message := “Login Failed. Please check your Username and Password”
}
reject
}
}
if(reject){
update reply {
Reply-Message := “Login Failed. Please check your Username and Password”
}
reject
}

 

จากด้านบนขออธิบายดังนี้

-sql{
notfound = 1
reject = 2
}

อันนี้คือผลที่ได้จาก sql โดย notfound  จะเกิดตอน username ผิด ส่วน หาก password ผิด จะไม่สามารถ ส่งมาหา python ได้

if(notfound){  << ในนี้คือ if ที่จะเช็คหลังจาก username ผิด

if ( “%{exec:/usr/bin/python3.6 /etc/raddb/radiusAuthentication.py %{User-Name} %{%{User-Password}:-Chap-Password}}” == “accept” ) {

if นี้คือ จะใช้ radiusAuthentication.py ไป login ตรวจสอบกับ ad โดยผมจะไม่ได้อธิบาย radiusAuthentication.py แต่หากพบว่าถูกให้ตอบ accept ออกมา หรือ print ถ้าไม่ผ่านให้ reject

if ( “%{exec:/usr/bin/python3.6 /etc/raddb/radius_check_ou.py %{User-Name} %{%{User-Password}:-Chap-Password}}” == “OU=guestDC=kmzohanDC=com” ) {

if นี้จะตรวจสอบ OU โดยที่ หากพบว่าถูกจะreply:Service-Type := ‘NAS-Prompt-User’ ออกไปแล้วแต่ if เลย

update reply {
Reply-Message := “Login Failed. Please check your Username and Password”
}
reject

จากอันนี้ สรุปคือหาก reject ตรงไหนโปรแกรมจะยิงออกเลย

 

แต่หากเอาไปลองแล้วมี user มากกว่า 1 ที่เช่น sql ad หรืออืนๆด้วย แนะนำให้เตรียม user ที่ต่างสักที่ละ 2 user เพื่อทดสอบ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *