xem xét nguyên tắc hoạt động của radius server và webadmin trên mô hình mạng wan đơn giản và không phân cấp nhiều - Pdf 11

Mục lục
Lời mở đầu
Chương I. Một số khái niệm căn bản về mạng
I. Mô hình mạng OSI
II. Mô hình mạng TCP/IP
III. UDP (User Datagram Protocol)
Chương II. Các kỹ năng bổ trợ trong việc phát triển mã nguồn
I. Giao diện socket
II. Semaphores
III. Shared memory
Chương III. Radius
I.Giới thiệu
II.Kiến trúc client / server của Radius
III.Hoạt động
IV.Những lợi ích của an toàn phân tán
Chương IV.Giao thức Radius
I. Giới thiệu
II. Giao thức Radius 1
III. Giao thức Radius 2
IV. Phương pháp mã hoá
V.Cài đặt Radius
VI. Giải thuật Radius server
Chương V.Xây dựng Radius Proxy
I. Phương pháp 1
II. Phương pháp 2
III. Phương pháp 3
Chương VI. Webmin và giao diện quản lý Radius Proxy
E. Phụ lục
F. Chương trình nguồn
Được phát triển dựa theo tiêu chuẩn của Hiệp hội chuẩn quốc tế (International Standards
Organization - ISO). Chuẩn này được gọi là OSI (Open Systems Interconnection). OSI có 7
lớp:
1. Lớp vật lý (physics): liên quan đến việc chuyển các bit, tín hiệu điện tử, các môi
trưòng truyền.
2. Lớp data link: nhiệm vụ chính là thực hiện chức năng chuyển và nhận các dữ liệu từ
hoặc đến lớp network. Nó có nhiệm vụ chia các data nhận thành các frame, chuyển
các frame đi lần lượt và xử lý các frame được bên nhận gửi trả về bên gửi.
3. Lớp network: quyết đònh các gói dữ liệu sẽ được hướng (route) từ nguồn đến đích như
thế nào.
4. Lớp transport: nhiệm vụ chính là nhận data từ lớp session , chia thành các đơn vò nhỏ
hơn và chuyển đến lớp network và bảo đảm rằng chúng sẽ được gửi đến đầu cuối
chính xác.
5. Lớp session: cho phép các user trên các hệ máy khác nhau thiết lập session giữa
chúng. Nó có chức năng gần giống lớp transport nhưng cung cấp thêm các chức năng
mở rộng tiện lợi ở các trình ứng dụng.
6. Lớp presentation.
7. Lớp application.
II. Mô hình mạng TCP/IP:
Được phát triển dựa trên hệ thống ARPANET và trở thành mô hình của hệ thống Internet
như hiện nay. TCP/IP có nhiệm vụ là phải kết nối các thiết bò của các nhà sản xuất khác
nhau, phải có khả năng chạy trên các phương tiện và liên kết các dữ liệu khác nhau. Các
giao thức này phải thống nhất nhiều mạng thành một liên mạng đơn nhất để mọi người sử
dụng mạng đó có thể sử dụng được các dòch vụ chung.

Các ứng dụng và

Các ứng dụng và dòch vụ

Application Layer

Source port Destination port
UDP length UDP checksum

Một UDP segment có 8 byte header, sau đó là dữ liệu. Hai port có chức năng là xác đònh ra
các điểm nút (end point) giữa máy nguồn và máy đích. Trøng UDP length gồm 8 byte
header và data. Trường UDP checksum chứa pseudoheader, UDP header và UDP data
32 bit

Source address
Destination address
00000000 Protocol = 6 Chieàu daøi segment

Pseudoheader chöùa trong UDP checksum

Chương II
GIỚI THIỆU CÁC KỸ NĂNG BỔ TR
TRONG VIỆC PHÁT TRIỂN MÃ NGUỒN
I-Giao diện Sockets (The Sockets Interface)
Sockets được giới thiệu lần đầu tiên vào năm 1981 như là một phần của hệ thống
phân phối phần mềm Berkeley 4.2 và được dùng như một giao diện cho một ứng dụng nền
quan trọng. Hiện giờ, sockets đã được đặt vào UNIX System phiên bản V như là một phần
của sự hợp nhất BSD/System V.
Socket thực ra là một khối xây dựng cơ bản (basic building block) cho việc giao tiếp
(communication). Socket là một đầu cuối (endpoint) của giao tiếp và có thể được gắn cho
một cái tên (bound). Mỗi socket đang sử dụng có một kiểu (type) và có một hay nhiều
process liên kết. Các sockets tồn tại trong các vùng giao tiếp (communication domains).
Vùng giao tiếp là sự trừu tượng hóa bao hàm cả một cấu trúc đòa chỉ hay họ đòa chỉ
(addressing structure – address family) và một tập các giao thức (protocols) thực hiện các
kiểu sockets nằm trong vùng đó hay còn gọi là họ giao thức (protocol family).
Communication domains được đưa ra nhằm chứa đựng các thuộc tính chung của các quá trình

thuộc vào giao diện được cung cấp bởi protocol. Raw socket không có ý đònh trang bò chung
cho các user mà chỉ dành cho các user muốn phát triển các giao thức giao tiếp mới hoặc
muốn truy xuất sâu thêm vào các tiện ích bí mật (esoteric facilities) của giao thức đã có.
2-Tạo socket:
Sử dụng lời gọi hệ thống socket() để tạo một socket.
S= socket( domain, type, protocol);
Lời gọi trên sẽ yêu cầu hệ thống tạo ra một socket trong một domain chỉ đònh và có kiểu chỉ
đònh. Nếu protocol vẫn không được xác đònh (giá trò 0) thì hệ thống sẽ chọn một protocol
thích hợp mà có thể chứa đựng domain đã cho và hổ trợ cho kiểu socket được yêu cầu. Một
descriptor (một số nguyên nhỏ) được dùng sau lời gọi hệ thống như là một số hiệu để thực
hiện các thao tác trên socket đã tạo ra.
Các domains được đònh nghóa như những hằng số trong file <sys/socket.h>. Ví dụ, UNIX
domain là AF_UNIX, Internet domain là AF_INET.
Các kiểu của socket cũng được đònh nghóa trong file <sys/socket.h>. Ví dụ, stream socket là
SOCK_STREAM, datagram socket là SOCK_DGRAM, raw socket là SOCK_RAW.
Để tạo một socket stream trong Internet domain ta có thể gọi:
S = socket (AF_INET, SOCK_STREAM, 0);
Socket call có thể thất bại do nhiều nguyên nhân. Chẳng hạn, sự cố thiếu bộ nhớ
(ENOBUFS), sự cố không hiểu protocol (EPROTONOSUPPORT), hoặc sự cố không có kiểu
socket yêu cầu (EPROTOTYPE).
3- Đặt tên cho socket
Một socket khi tạo ra không có tên. Các process không thể truy cập socket, và do đó
không có message nào được nhận trên nó, mỗi khi nó chưa được đặt tên. Các quá trình giao
tiếp được ràng buộc bởi một liên kết. Trong Internet domain, liên kết này là local, foreign
addresses và local, foreign ports. Trong UNIX domain liên kết này là local, foreign
pathnames.
Để đặt tên cho socket, ta dùng lời gọi hệ thống:
bind (s, name, namelen);
Ví dụ, Muốn đặt tên cho socket trong Internet address, ta có thể gọi:
#include <sys/types.h>

fromlen = sizeof from;
newsock = accept (s, (struct sockaddr *) &from, fromlen);
5-Truyền dữ liệu:
Với một cầu nối đã được thiết lập, việc truyền dữ liệu có thể bắt đầu. Có nhiều cách
gọi để thực hiện việc gởi (sending) và nhận (receiving) dữ liệu.
Thực hiện việc truyền dữ liệu bằng lời gọi read () và write ().
Read (s, buf, sizeof buf);
Write (s, buf, sizeof buf);
Thực hiện việc truyền dữ liệu bằng lời gọi send () và recv()
Send (s, buf, sizeof buf, flags);
Recv (s, buf, sizeof buf, flags);
Giá trò của flags là rất quan trọng (flags được khai báo như những hằng số trong file
<sys/socket.h>). Nó cho phép ta trực tiếp biến đổi nội dung dữ liệu trên socket sau lời gọi
send () hoặc recv ().
Ví dụ, Flags = MSG_PEEK cho phép ta chỉ dò trên socket xem đã có dữ liệu hay
chưa, nội dung dữ liệu đó là gì, mà không thay đổi nội dung dữ liệu sau lời gọi. Do đó, lời gọi
recv() hay read () có thể nhận lại dữ liệu trên socket sau khi dò. Điều này trang bò khả năng
kiểm tra dữ liệu trước khi nhận.
6-Đóng socket:
Sau khi thực hiện xong việc truyền dữ liệu và không cần dùng đến socket nữa, ta nên
đóng socket lại bằng lời gọi hệ thống:
Close (s);
Sau khi lời gọi được thực hiện, dữ liệu còn chưa xử lý trên socket sẽ chỉ được xử lý
sau một thời gian nhất đònh, sau thời gian này nếu dữ liệu vẫn chưa xử lý xong vì một lý do
nào đó thì nó sẽ bò mất. Nếu muốn tất cả dữ liệu trên socket sẽ được xử lý trước khi socket bò
đóng, ta nên thực hiện lời gọi shutdown().
Shutdown (s, how);
Giá trò how sẽ quyết đònh việc xử lý dữ liệu trước khi đóng socket s.
7-Socket kết không kết nối (connectionless sockets)
Các bước trên được giới thiệu cho các sockets hướng kết nối (connection-oriented

Tham số nfd = MAX(descriptors) + 1, chính là khoảng giá trò cho các sockets.
Để kiểm tra xem một socket có thuộc tập các socket được chọn lựa không, ta có thể
dùng macro FD_ISSET(fd, &mask).

Có rất nhiều lời gọi cho các thao tác được cung cấp bởi giao diện giao tiếp qua socket
cần thiết trong quá trình phát triển các ứng dụng truyền dữ liệu giữa các processes trên mạng
có thể tham khảo chi tiết trong bộ sách AT&T UNIX System V Release 4, Programmers’s
Guide: Networking Interfaces của nhà xuất bản Pretice Hall.
II- Semaphores
Semaphore là một kỹ thuật đảm bảo cho tài nguyên dùng chung (shared resource) an
toàn về mặt dữ liệu đối với sự truy cập đồng thời của các process. Lấy một ví dụ, trên hệ
thống đường ray, một semaphore đảm bảo cho các đoàn tàu đang vận hành không đụng nhau
ở các vùng giao nhau. Trong máy tính cũng tương tự như vậy. Nếu một process không kiểm
tra semaphore trước khi truy cập tài nguyên dùng chung thì sự hỗn loạn (chaos) về dữ liệu sẽ
xảy ra.
Ta có thể lấy một ví dụ về sự nguy hiểm khi xảy ra sự hỗn loạn về dữ liệu khi truy
cập tài nguyên dùng chung mà không dùng kỹ thuật semaphore. Giả sử ta có một đoạn
chương trình rút tiền khỏi nhà băng theo tài khoản khai báo, với biến dùng chung cho các
process là deposit là số tiền ký quỹ hiện hành của tài khoản khai báo.
int deposit;
void withdraw(int account, double money)
{
if (checkInAccount(account))
{
deposit = getLastDeposit(account);
if (deposit >= money)
deposit -=money;
depositMoney(deposit);
}
}

depositMoney(deposit);
leaveCriticalSection(sem); /* Ra khỏi vùng chanh chấp, cho phép các process truy cập vào*/
releaseSemaphore(sem); /* Giải phóng semaphore */
Khoảng thời gian chuyển tiếp giữa các lệnh vó mô điều có thể là điểm mà các process
có thể trao quyền cho nhau, và do đó nguy cơ dẫn đến sự hỗn loạn về dữ liệu của tài nguyên
dùng chung tồn tại trong các khoảng thời gian nhỏ này. Như vậy , để xây dựng semaphore, ta
không thể dùng các lệnh vó mô được mà phải dùng các lời gọi trang bò bởi kernel, ở đó chúng
được bảo vệ khỏi sự tác động của các process. System V có trang bò các lời goiï hệ thống thao
tác trên semaphore như sau.
-Tạo semaphore
int semget (key, nsems, flags) /* return semaphore-set-ID or –1 on error */
key_t key; /* get semaphore-set-ID*/
int nsems; /* semaphore-set key */
int flags; /* option flags */

-Thao tác trên semaphore
int semop (sid, ops, nops) /* return semaphore value prior to last operation or –1 on error*/
int sid; /* semaphore-set-ID*/
struct sembuf (*ops)[]; /* pointer to array of operations*/
int nops; /* number of operations */
-Hủy semaphore
int semctl (sid, snum, command, arg) /* return value depending on command or –1 on error*/
int sid;
int snum; /* semaphore number */
int cmd; /* command */
char *arg; /* argument */

Các hàm yêu cầu ở trên có thể được xây dựng như sau:
int createSemaphore()
{

đến biến này. Điều này không thể thực hiện được với việc khai báo biến thông thường cho
dù có khai báo toàn cục. Bởi vì mỗi process có vùng nhớ riêng của nó, các process không thể
tham khảo vùng nhớ của nhau được. Do đó mặc dù biến được khai báo toàn cục nhưng mỗi
khi sinh ra process con, các tính chất của biến này được sao chép vào vùng nhớ dành riêng
cho process con đó, mọi sự thay đổi giá trò trên biến này ở process cha và ở process con từ
lúc đó không còn tác động lên nhau nữa (Trừ trường hợp thao tác với đòa chỉ I/O, nhưng lúc
đó hậu quả là do bản chất của hệ thống).
Như vậy, để có được một vùng nhớ chứa biến khai báo sao cho mọi process có thể truy cập
tới, hệ thống phải cho phép cấp phát một vùng nhớ nằm ngoài tất cả các vùng nhớ của các
process (tất nhiên phải nằm trong vùng nhớ của process đầu tiên khi hệ thống khởi động.), và
mỗi lúc một process nào đó muốn truy cập vào vùng nhớ này chỉ việc ánh xạ nó vào không
gian đòa chỉ của process. đây, ta giới hạn với các process trên cùng một host.
Muốn sử dụng dữ liệu của vùng nhớ chung chính xác, ta phải dùng kỹ thuật semaphore.
Việc ứng dụng shared memory và semaphore vào truyền dữ liệu giữa các process trên cùng
một host sẽ tiết kiệm một số thời gian đáng kể so với việc dùng socket hoặc message. Các
lời gọi gởi và nhận dữ liệu sẽ được xây dựng lại dựa trên việc đọc ghi trên một vùng nhớ chỉ
ra trong shared memory và kỹ thuật semaphore đảm bảo sao cho receiver không đọc dữ liệu
từ shared memory quá sớm hoặc sender không ghi dữ liệu vào shared memory cho tới khi
nào receiver đã đọc hoàn tất.
System V có cung cấp một số lời gọi thao tác với shared memory như sau:
-Xin cấp phát vùng nhớ dùng chung kích thước nbytes bytes.
int segid = shmget (key_t key, int nbytes, int flags);
-ánh xạ shared memory vào không gian đòa chỉ mà process quản lý để truy cập.
char *shmat (int segid, char *addr, int flags);
-Bỏ ánh xạ
int shmdt (char *addr);
-Giải phóng shared memory
int shmctl (int segid, int cmd, struct shmid_ds *sbuf);
với cmd = IPC_RMID
Ta có thể gây ra các lỗi khó tìm khi dùng kèm shared memory với các lệnh cấp phát

thống an toàn kiểu client/server mở và có thể cải tiến (scalable). RADIUS server có
thể dễ dàng sửa đổi thích ứng với những sản phẩm an toàn của các công ty thứ ba
(third-party) hoặc là những hệ thống an toàn độc quyền (proprietary). Bất cứ một máy
chủ giao tiếp hoặc một phần cứng mạng nào được trang bò giao thức RADIUS client
đều có thể giao tiếp với một RADIUS server.
II. Kiến trúc client/server của RADIUS (RADIUS Client/Server architecture)
RADIUS là một hệ thống an toàn phân tán có chức năng đảm bảo an toàn cho việc
truy cập từ xa tới một mạng và các dòch vụ mạng khỏi các truy cập bất hợp pháp.
RADIUS bao gồm hai phần : trình chủ xác nhận quyền (authentication server) và các
giao thức khách (client protocols). Trình chủ được cài đặt trên máy tính trung tâm khu
vực của khách hàng (customer’s site). RADIUS được thiết kế sao cho đơn giản hoá
quá trình xử lý an toàn bằng cách tách rời kỹ thuật xử lý an toàn ( sercurity
technology) và kỹ thuật giao tiếp (communications techonology).
Thông tin tất cả quyền hạn của user và khả năng truy xuất các dòch vụ mạng
được chứa trên máy chủ xác nhận quyền (hay RADIUS). Những thông tin này được
lưu ở những dạng phù hợp với yêu cầu của khách hàng. RADIUS sẽ xác nhận quyền
của các user đối với tập tin mật mã (UNIX password file), NIS (Network Information
Service) và cả một cơ sở dữ liệu của RADIUS được quản lý một cách riêng biệt. Các
máy chủ giao tiếp (Communications servers) làm việc với các modems như là những
RADIUS clients. RADIUS client gởi các yêu cầu xác nhận quyền cho RADIUS server
và thực thi dựa trên các kết quả trả lời gởi về từ server.
III. RADIUS hoạt động như thế nào: sự xác nhận quyền của user với RADIUS.
RADIUS xác nhận quyền các user thông qua một chuỗi các giao tiếp giữa client và
server. Mỗi khi một user đã được xác nhận quyền, client sẽ cho phép user đó truy cập
các dòch vụ mạng tương ứng. Sau đây là sự mô tả quá trình xác nhận quyền sử dụng
máy chủ giao tiếp (communications server) và RADIUS.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status