Tuesday, December 27, 2011

มารู้จัก Freeradius ให้ลึกซึ้งกันดีกว่า

Freeradius เป็นโปรแกรมที่ใช้ในการจัดการแอคเค้าท์และใช้ในการตรวจสอบสิทธิ ตามมาตรฐาน IEEE 802.1X ตามคอนเซ็ปคือ AAA
เรามาดูกันซิว่า AAA มาจากคำว่าอะไรบ้าง
Accounting นั่นคือการจัดการแอคเค้าท์ในด้านต่างๆทั้งการสร้างแอคเค้าท์ ลบ และเพิ่มแอคเค้าท์ ตลอดจนการเพิ่มเติมคุณสมบัติต่างๆของแแต่ละแอคเค้าท์
Authentication
สิทธิ ตามวิธีการ A แรกที่ได้กล่าวมาในขั้นตอนนี้จะมีการแจ้งแมสเสจต่างๆว่าผ่านหรือไม่ ผ่าน การตรวจสอบสิทธิและเมื่อผ่านกระบวนการนี้ได้สำเร็จก็จะเข้าสู่กระบวนการสุด ท้าย นั่นคือ
Authorize

ทีนี้มาดูกระบวนการการทำงานของ freeradius กันดีกว่า

เริ่ม แรกหลังจากที่ได้มีการสร้างแอคเคาท์เป็นที่เรียบร้อยแล้ว มีการใช้งานโปรแกรม radius-client ต่างๆเช่น Pgina, ntradping หรือโปรแกรมอื่นๆเพื่อล็อกอินหรือตรวจสอบสิทธิ ก็จะเข้าสู่กระบวนการต่างๆดังนี้
1.โปรแกรม radius-client จะติดต่อโปรแกรม freeradius ตามหมายเลขไอพีและพอร์ทที่ได้กำหนดไว้ (โดยปรกติพอร์ทของโปรแกรมจะอยู่ที่1812 ตาม default)
2.โปรแกรมจะนำชื่อแอคเค้าท์ รหัสผ่าน และค่า secret key ไปตรวจสอบว่าถูกต้องหรือไม่ในขั้นตอนนี้จะมีกระบวนการดังนี้

2.1 (radius-client) >>>{username,password,secret key} >>>(freeradius)
ในขั้นตอนนี้จะมีการส่งยูสเซอร์เนม พาสเวิร์ด และ ซีเคร็ดคีย์ไปยังเซอร์ฟเวอร์เพื่อใช้ ในการตรวจสอบความถูกต้อง

2.2 (radius-client) >>>>{access-request}>>>>(freeradius)
ในขั้นตอนนี้ทางฝั่งไคลเอ้นท์จะสร้างส้ญญาณร้องขอผลตอบกลับมาจากเซอร์ฟเวอร
์หรือรอสัญญาณตอบรับความถูกผิดของข้อมูลที่ส่งจากขั้นตอนแรก

2.3(radius-client) <<<<{access-reply}<<<<<<<<<(freeradius)
ใน ขั้นตอนนี้เซอร์ฟเวอร์จะตอบกลับไปยังเครื่องไคลเอ้นท์ด้วยสัญญาณ access-reply โดยสัญญาณนี้จะประกอบไปด้วย2สัญญาณย่อยที่สำคัญแต่จะเกิดขึ้นเพียงแค่หนึ่ง สัญญาณ
ต่อเงื่อนไขนั่นคือสัญญาณ access-accept และ access-reject โดยสัญญาณ  
access-accept นี้คือสัญญาณที่ใช้ตอบกลับไปยังไคลเอ้นท์ว่ายูสเซอร์เนม รหัสผ่าน และซีเคร็ดคีย์นั้นถูกต้องส่วน สัญญาณ access-reject นั้นจะตรงกันข้ามกับสัญญาณแรก โดยมีความหมายคือยูสเซอร์เนม รหัสผ่าน และซีเคร็ดคีย์ไม่ถูกต้องหรืออาจมี เฉพาะตัวหนึ่งตัวใดไม่ถูกต้องก็ได้ เป็นต้น

ในโปรแกรม freeradius ต้องอาศัยฐานข้อมูลเพื่อดึงข้อมูลมาใช้ในการประมวลผลไม่ว่าจะเป็น
ยู สเซอร์เนม และพาสเวิร์ด หรือเมสเสจและเงื่อนไขต่างๆของแต่ละยูสเซอร์ โดยในฐานข้อมูลจะมีตารางที่เกี่ยวข้องดังนี้ radcheck , radgroupcheck , radgroupreply,usergroup และ radacct มาดูแต่ละเทเบิลดีกว่า

radcheck ในเทเบิลนี้จะมีฟิลด์ดังนี้
username เอาไว้กำหนดยูสเซอร์เนม
Attribute เอาไว้กำหนดแอททริบิวท์ ว่าจะใช้อะไรเช่นต้องการการกำหนดพาสสเวิร์ดก็ใช้ Password เป็นต้น
op เป็นสัญลักษณ์เอาไว้กำหนดรายละเอียดของแต่ละ Attribute
value เอาไว้กำหนดค่าของแต่ละ Attribute

มาดูตัวอย่างการกำนดหรือสร้างแอคเค้าท์กันดังนี้
insert into radcheck value(Null,'oportino','Password',':=','opor_test');
อธิบาย ในขั้นตอนนี้เราก็ได้แอคเค้าท์ แล้วดังนี้ user=oportino มี password=opor_test เป็นต้น แต่ยังไม่สมบูรณ์นะเหลือที่เทเบิล usergroup อีกดูตัวอย่างข้างล่างประกอบด้วย

usergroup
username เอาไว้กำหนดยูสเซอร์เนม
groupname เอาไว้เก็บชื่อกรุ๊ปหรือกำหนดกรุ๊ปให้แก่ยูสเซอร์นั้น
มาดูตัวอย่างการกำนดหรืออสร้างแอคเค้าท์ให้สมบูรณ์ต่อจากตัวอย่างที่แล้วดังนี้
insert into usergroup value(Null,'oportino','User_blog');
อธิบาย ในขั้นตอนนี้เราก็ได้แอคเค้าท์ที่ประจำกรุ๊ปแล้วนั่นคือ ยูสเซอร์ oportino มีกรุ๊ปที่สังกัดคือ User_blog เป็นต้น


radgroupcheck เทเบิลนี้เอาไว้กำหนดนโยบายให้แต่ละกรุ๊ปนั่นคือสมาชิกใดถ้าอยู่ในกรุ๊ปนี้ก็จะถูกกำกนดตามเงื่อนไขที่ระบุ
groupname กำหนดกรุ๊ปที่ต้องการทำนโยบาย
Attribute เอาไว้กำหนดแอททริบิวท์ที่เป็นนโยบายระดับกรุ๊ปให้แก่กร๊ป
op คือสัญลักษณ์ที่ระบุให้แต่ละแอททริบิวท์
value คือค่าของแอททริบิวท์ที่กำหนดแต่ละกรุ๊ป
*ดูการกำหนดท้ายบทความ

radgroupreply เทเบิลนี้เอาไว้กำหนดเงื่อนไขและเมสเสจที่โชว์ให้แก่กรุ๊ปนั้นๆ เช่น หมดเวลาการล็อกอิน หรือหมดอายุการใช้งาน เป้นต้น โดยฟิลด์ต่างๆก็จะเหมือนกับ radgroupcheck และมีการใช้งานเหมือนกัน
* ดูการใช้งานจริงท้ายบทความ


เกริ่นมาพอสมควรแล้วคราวนี้มาดูการใช้งานจริงกันบ้าง**หมายเหต ทุกยูสเซอร์ต้องสังกัดกรุ๊ปด้วยโดยกรุ๊ปนั้นเรากำหนดขึ้นเอง จะใช้ชื่อกรุ๊ปอะไรก็ได้
ตกลงตามนี้ ยกตัวอย่างผมอยู่ในบริษัทแห่งหนึ่ง มี3แผนกที่ต้องการใช้งาน freeradius นั่นคือ
แผนกบัญชี 10 คน มีชื่อแอคเค้าท์ดังนี้ acc1 - acc10
แผนกการตลาด 5 คน มีชื่อแอคเค้าท์ดังนี้ market1 - market5
และผู้บริหาร 7 คน มีชื่อแอคเค้าท์ดังนี้ vip1 - vip7

เริ่มเลยละกัน
1.กำหนดชื่อกรุ๊ป แผนกบัญชีคือ Accounting แผนกการตลาดคือ Margeting และผู้บริหารคือ VIP

2. กำหนดยูสเซอร์เนมและพาสเวิร์ดให้แก่แต่ละแผนก
insert into radcheck (Null,'acc1','Password',':=','acc1_pass'); ที่เหลือก็กำหนดเข้าไปจนถึง acc10
insert into radcheck (Null,'market1','Password',':=','market1_pass'); ที่เหลือก็กำหนดเข้าไปจนถึง market5
insert into radcheck (Null'vip1','Password',':=','vip1_password'); ที่เหลือก็กำหนดเข้าไปจนถึง vip7

3.จับแต่ละยูสเซอร์มาสังกัดกรุ๊ปของตนเอง
insert into radcheck (Null,'acc1','Accounting'); ที่เหลือก็กำหนดเข้าไปจนถึง acc10 ตรงตำแหน่งกรุ๊ปก็คงไว้
insert into radcheck (Null,'market1','Margeting'); ที่เหลือก็กำหนดเข้าไปจนถึง market5
insert into radcheck (Null'vip1','VIP'); ที่เหลือก็กำหนดเข้าไปจนถึง vip7
ทุกยูสเซอร์ก็จะมีกรุ๊ปอยู่แล้วตรงตามชื่อกรุ๊ปของแผนกตัวเอง

4.จากนั้นกำหนดให้แต่ละกรุ๊ปหมดเวลาการใช้งานเมื่อใดดังนี้
ี้insert into radgroupcheck (Null,'Accounting',Expiration',':=','Oct 30 2007');
insert into radgroupcheck (Null,'Margeting','Expiration',':=','Nov 10 2008');
คราวนี้เมื่อยูสเซอร์นั้นล็อกอินในภายหลังที่เราระบุ พี่แกก็จะล็อกอินไม่ได้พร้อมมีเมสเสจกลับมาว่าหมดอายุการใช้งานแล้ว

ต้องการให้กรุ๊ปของผู้บริหารนั่นคือ VIP ไม่มีวันหมดอายุการใช้งานกำหนดดังนี้
insert into radgroupcheck (Null'VIP','Auth-Type',':=','Local');

5.

0 comments:

Post a Comment