Các kiến trúc VNC và X server
Linux® sử dụng Hệ thống Window X (gọi tắt là X ) là giao diện người dùng đồ họa (GUI). X là 
một GUI khác thường theo nhiều cách, một trong số đó là nó vốn dĩ là một mạng lưới được kích 
hoạt. Một X server (X server) theo nghĩa đen là một chương trình máy chủ mạng. Các chương 
trình máy chủ mạng cung cấp cho các trình máy khách (client) truy cập vào các tài nguyên cục 
bộ và điều này cũng đúng với một X server. Điều lạ lùng là ở chỗ "các tài nguyên cục bộ" trong 
trường hợp của một X server là màn hình hiển thị, bàn phím và chuột, mà người dùng sử dụng. 
Trong hầu hết cấu hình phổ biến, các X client chạy trên cùng một máy tính nơi trình máy chủ 
chạy. Như vậy, LibreOffice, GIMP (GNU Image Manipulation Program – Chương trình thao tác 
ảnh GNU) hoặc các chương trình khác là các X server, mà nó sử dụng các giao thức mạng của X 
để nhận đầu vào người dùng và hiển thị kết quả đầu ra cho những người dùng trên cùng một máy 
tính.
                
              
                                            
                                
            
                       
            
                 9 trang
9 trang | 
Chia sẻ: lylyngoc | Lượt xem: 1865 | Lượt tải: 1 
              
            Bạn đang xem nội dung tài liệu Cho phép nhiều người dùng đăng nhập với VNC, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Cho phép nhiều người dùng đăng nhập với VNC 
Các kiến trúc VNC và X server 
Linux® sử dụng Hệ thống Window X (gọi tắt là X ) là giao diện người dùng đồ họa (GUI). X là 
một GUI khác thường theo nhiều cách, một trong số đó là nó vốn dĩ là một mạng lưới được kích 
hoạt. Một X server (X server) theo nghĩa đen là một chương trình máy chủ mạng. Các chương 
trình máy chủ mạng cung cấp cho các trình máy khách (client) truy cập vào các tài nguyên cục 
bộ và điều này cũng đúng với một X server. Điều lạ lùng là ở chỗ "các tài nguyên cục bộ" trong 
trường hợp của một X server là màn hình hiển thị, bàn phím và chuột, mà người dùng sử dụng. 
Trong hầu hết cấu hình phổ biến, các X client chạy trên cùng một máy tính nơi trình máy chủ 
chạy. Như vậy, LibreOffice, GIMP (GNU Image Manipulation Program – Chương trình thao tác 
ảnh GNU) hoặc các chương trình khác là các X server, mà nó sử dụng các giao thức mạng của X 
để nhận đầu vào người dùng và hiển thị kết quả đầu ra cho những người dùng trên cùng một máy 
tính. 
Tuy nhiên, khi X được sử dụng trên một mạng thì người dùng ngồi tại máy tính chạy X server và 
các X client chính là các chương trình mà người dùng muốn chạy trên một máy tính khác. Cấu 
hình này đòi hỏi một giao thức mạng thứ hai để khởi đầu kết nối. Giao thức thứ hai này có thể là 
telnet, Secure Shell (SSH) hoặc XDMCP. Trình máy chủ cho giao thức đăng nhập này chạy trên 
máy tính của X client và trình máy khách đăng nhập từ xa chạy trên máy tính của X server. Trình 
máy chủ đăng nhập từ xa khởi chạy các X client, mà các trình X client này lần lượt liên hệ với X 
server. Hình 1 mô tả mối quan hệ này. Các mũi tên nét đứt biểu thị sự bắt đầu của phiên làm 
việc. (Trong trường hợp của XDMCP, X clientDMCP được gắn vào chương trình X server). 
Hình 1. Truy cập từ xa X đòi hỏi một trình máy khách và một trình máy chủ trên cả hai 
máy tính 
Kiểu thiết lập này hoạt động tốt trên nhiều mạng cục bộ, nhưng nó có nhược điểm. Ví dụ, cấu 
hình này yêu cầu phải khởi đầu giao thức mạng hai chiều, mà có lẽ giao thức này không thể thực 
hiện được xuyên qua một số tường lửa hoặc các bộ định tuyến dịch địa chỉ mạng (NAT). (SSH 
có thể tạo đường hầm cho các phiên làm việc X, tránh được yêu cầu này). Hơn nữa, mặc dù các 
X server có sẵn cho hầu hết các nền tảng, nhưng chúng thường không được cài đặt trên các máy 
tính chạy hệ điều hành Windows®. Vì các lý do này và khác, nhiều trang web thích sử dụng một 
giao thức khác, đó là RFB (Remote Frame Buffer - Bộ đệm khung từ xa), được triển khai thực 
hiện trong họ các chương trình VNC. 
VNC là một công cụ nhiều nền tảng, có thể cung cấp truy cập từ xa tới Linux, UNIX®, Mac OS 
X, Windows và các hệ thống khác từ bất kỳ kiểu trình máy khách nào. Với VNC, người dùng 
ngồi tại máy tính của trình máy khách và truy cập một máy tính của trình máy chủ từ xa. Trên 
Linux, VNC server hoặc phản chiếu các nội dung của màn hình của X server cục bộ đến máy 
tính từ xa hoặc bao gồm X server riêng của mình, có thể chạy một cách độc lập với trình máy 
chủ quản lý màn hình cục bộ. Kết quả tương tự như Hình 2. Một lần nữa, mũi tên nét đứt chỉ thị 
sự bắt đầu của phiên làm việc. Cấu hình này giúp loại bỏ yêu cầu kết nối mạng đảo ngược và vì 
các trình máy khách và các VNC server đều có mặt trên nhiều hệ điều hành, nên những người 
dùng có thể sử dụng một chương trình máy khách duy nhất để truy cập bất kỳ trình máy chủ nào. 
Hình 2. Một VNC server gồm có một X server có thể truyền thông với các chương trình X 
client cục bộ 
Nhược điểm của VNC là ở chỗ việc xác thực RFB dựa trên các mật khẩu mà không cần các tên 
người dùng. Như vậy, mỗi người dùng phải khởi chạy một phiên làm việc của VNC server độc 
lập và kết nối tới cá thể VNC đó bằng cách chỉ định số cổng đúng. Yêu cầu này có thể chấp nhận 
được trên một hệ thống chỉ có một người dùng, nhưng lại vô cùng bất tiện trên một máy tính có 
nhiều người dùng. 
Để giải quyết vấn đề này, bạn có thể kết hợp hai giải pháp. Bạn có thể cấu hình lại XDMCP 
server cục bộ của mình để giúp X server đã tích hợp vào VNC cung cấp việc xác thực nhiều 
người dùng còn thiếu (cấu hình kết quả tương tự như Hình 3). Mũi tên nét đứt cho thấy sự bắt 
đầu của phiên làm việc. Bây giờ, khi những người dùng VNC từ xa liên hệ với máy tính của 
VNC server, họ sẽ có thể nhập vào các tên người dùng và mật khẩu của mình để truy cập các 
phiên làm việc VNC duy nhất riêng của họ, vì thế máy tính có thể xử lý bao nhiêu người dùng 
tùy ý bạn. 
Hình 3. Việc thêm XDMCP vào một cấu hình VNC sẽ cung cấp thêm tính linh hoạt 
Về đầu trang 
Cấu hình VNC server của bạn 
Có một số cách để khởi chạy VNC, bao gồm việc sử dụng các kịch bản lệnh, kết nối VNC vào 
môi trường máy tính để bàn của bạn bằng cách sử dụng các công cụ máy tính để bàn và sử dụng 
xinetd để nghe các kết nối VNC. Cách tiếp cận thứ hai này là cách được mô tả ở đây, vì nó cho 
phép bạn khởi chạy VNC sao cho nó có thể sử dụng XDMCP server của bạn. Trước khi đi vào 
chi tiết cách cấu hình VNC để khởi chạy thông qua xinetd, bạn phải chọn một VNC server. 
Chọn một VNC server 
Có sẵn một số trình VNC server. (Phần Tài nguyên cung cấp một số chương trình điển hình). 
Một số chương trình trong số các tùy chọn phổ biến hơn gồm có TightVNC, TigerVNC và 
RealVNC. Bài viết này sử dụng TightVNC làm một ví dụ. Thật không may, thông tin chi tiết về 
cấu hình thay đổi với mỗi trình máy chủ là khác nhau cũng như mỗi bản phân phối cũng khác 
nhau, nên có thể bạn cần phải điều chỉnh các hướng dẫn được cung cấp ở đây cho đúng với phần 
mềm của mình. 
Cài đặt xinetd 
Nhiều bản phân phối cài đặt siêu máy chủ xinetd theo mặc định, nhưng một số thì không. Vì 
phương pháp mô tả ở đây sử dụng xinetd, nên bạn cần cài đặt xinetd nếu nó chưa được cài đặt. 
Trên hầu hết các bản phân phối, bạn có thể cài đặt xinetd bằng cách sử dụng hệ thống đóng gói, 
chẳng hạn như apt-get install xinetd trên các bản phân phối dựa trên Debian hoặc zypper 
install xinetd trên openSUSE. 
Bạn cũng có thể cần cấu hình xinetd để chạy. Bạn thường có thể chạy nó mỗi khi cần đến bằng 
cách sử dụng kịch bản lệnh khởi động System V (SysV) của nó: 
# /etc/init.d/xinetd start 
Việc cấu hình xinetd để chạy tự động khi máy tính khởi động đòi hỏi phải có kiến thức về các 
phương pháp kịch bản lệnh khởi động cho bản phân phối của bạn. Thông thường, bạn sử dụng 
một tiện ích như chkconfig (thường dùng trong Fedora, openSUSE và các bản phân phối có liên 
quan), update-rc.d (thường dùng trong bản phân phối Debian và các bản phân phối có liên 
quan) hoặc rc-update (thường dùng trong Gentoo) để thực hiện việc này, như sau: 
# chkconfig xinetd 
 on 
# update-rc.d xinetd enable 
# rc-update add 
 xinetd default 
Chỉ gõ một trong các lệnh trên hoặc tìm đến lệnh tương đương với bản phân phối của bạn. 
Lưu ý rằng xinetd có thể từ chối khởi động nếu nó không có bất kỳ dịch vụ nào được cấu hình. 
Vì vậy, có thể bạn muốn khởi chạy nó sau khi bạn đã cấu hình xong xinetd để quản lý VNC 
server của mình. 
Cấu hình xinetd 
Các trình máy chủ sẽ được xinetd quản lý sẽ đặt các tệp cấu hình trong thư mục /etc/xinetd.d. 
Do đó, muốn cấu hình xinetd để xử lý VNC, bạn nên tạo hoặc chỉnh sửa một tệp có tên là 
/etc/xinetd.d/vnc. (Trên một số bản phân phối, chẳng hạn như openSUSE, gói VNC server cài 
đặt một tệp như vậy). Liệt kê 1 là một ví dụ. 
Liệt kê 1. Một ví dụ về cấu hình VNC với xinetd 
service vnc 
{ 
 disable = no 
 socket_type = stream 
 protocol = tcp 
 wait = no 
 user = nobody 
 server = /usr/bin/Xvnc 
 server_args = -inetd -once -query localhost -geometry 1024x768 -depth 16 
 type = UNLISTED 
 port = 5900 
} 
Mục này thiết lập một số tùy chọn xinetd, hầu hết trong số đó bạn nên giữ nguyên. Những tùy 
chọn mà bạn có thể cần điều chỉnh bao gồm như sau: 
 service (dịch vụ). Bạn có thể chạy VNC trên nhiều cổng với các tùy chọn khác nhau 
trên mỗi cổng, nhưng nếu bạn làm như vậy, bạn nên cung cấp cho VNC một tên dịch vụ 
khác nhau cho mỗi cổng ở dòng đầu tiên trong Liệt kê 1. 
 server (trình máy chủ). Bạn nên thay đổi mục này trỏ tới tệp nhị phân chính của VNC 
server của bạn, tệp này thường có tên là Xvnc. 
 server_args (các đối số của trình máy chủ). Bạn sẽ gần như chắc chắn muốn thay đổi 
một số trong các tùy chọn này, như được mô tả ngay sau đây. 
 port (cổng). VNC sử dụng các cổng được đánh số từ 5900 trở lên. Bạn có thể chạy trình 
máy chủ với các tùy chọn khác nhau trên các cổng khác nhau. Nếu bạn làm như vậy, bạn 
nên gán cho mỗi cá thể số cổng riêng của mình. 
Phần khó khăn nhất trong cấu hình xinetd là thiết lập các đối số của trình máy chủ. Bạn có thể 
sử dụng các đối số trong Liệt kê 1 làm mẫu, nhưng bạn có thể muốn thay đổi một số trong số 
chúng: 
 -query localhost. Tùy chọn này nói cho VNC X server kiểm tra hệ thống localhost để 
xác thực XDMCP. Bạn có thể thay đổi nó nếu bạn muốn sử dụng một máy tính như là 
một trạm chuyển tiếp (relay) để truy cập các chương trình trên một máy tính khác. 
 -geometry 1024x768. Bạn thiết lập độ phân giải ảo của phiên làm việc VNC với tùy 
chọn này. Lưu ý rằng độ phân giải này không cần phải giống như độ phân giải của X 
server thông thường chạy trên máy tính của trình máy chủ . Bạn có thể muốn tạo ra nhiều 
mục chạy ở các độ phân giải khác nhau để cho phép người dùng đăng nhập vào VNC 
server trong khi sử dụng bất kỳ độ phân giải nào thuận tiện cho các hệ thống cục bộ riêng 
của họ. 
 -depth 16. Tùy chọn này để thiết lập độ sâu của màu. Giá trị thấp hơn có thể đưa ra các 
bản cập nhật hiển thị nhanh hơn, nhưng các môi trường máy tính để bàn 15bit/16 bit màu 
(high-color) có thể bị màu giả tạo. Dải các giá trị hợp lệ là từ 2 đến 32. 
Còn có sẵn nhiều tùy chọn khác nữa và một số tùy chọn thay đổi khác nhau tùy theo mỗi VNC 
server. Hãy tham khảo tài liệu hướng dẫn về VNC server của bạn để tìm hiểu thêm. 
Về đầu trang 
Cấu hình XDMCP server của bạn 
Hầu hết các bản phân phối Linux cấu hình các XDMCP server của chúng chỉ để quản lý việc 
hiển thị cục bộ. Để cung cấp truy cập từ xa, bạn phải cấu hình lại XDMCP server của mình để 
nhận các yêu cầu truy cập từ VNC server chạy trên cùng một máy tính. Các chi tiết thay đổi khác 
nhau tùy theo mỗi trình ứng dụng chủ XDMCP. Ba trình máy chủ hay sử dụng nhất trên Linux là 
GNOME Display Manager (GDM – Trình quản lý hiển thị GNOME), Light Display Manager 
(LightDM – Trình quản lý hiển thị nhẹ) và KDE Display Manager (KDM - Trình quản lý hiển thị 
KDE). Các XDMCP server khác, chẳng hạn như XDM, yêu cầu những điều chỉnh khác hơn so 
với những gì mô tả ở đây. Trong mọi trường hợp, sau khi cài đặt lại cấu hình XDMCP server của 
mình, bạn cần phải khởi động lại nó. 
Chỉnh sửa tệp cấu hình XDMCP 
Nếu bạn không chắc chắn hệ thống của bạn sử dụng XDMCP server nào, bạn có thể xác định nó 
bằng cách xem xét một danh sách quá trình để tìm chuỗi dm, như sau: 
$ ps ax | grep dm 
 929 ? Ss 0:00 /usr/bin/kdm 
 962 tty7 Ss+ 0:19 /usr/bin/Xorg -br :0 vt7 -nolisten tcp -auth \ 
 /var/lib/xdm/authdir/authfiles/A:0-pp4shb 
30157 pts/3 S+ 0:00 grep --color=auto dm 
Dòng đầu tiên của kết quả này cho thấy rằng KDM đang chạy, do đó bạn sẽ cần phải chỉnh sửa 
tệp cấu hình của trình máy chủ này để cho phép VNC sử dụng XDMCP. Hầu hết các chương 
trình XDMCP có các tệp cấu hình theo một định dạng tương tự. Chúng bao gồm các phần 
(section) được xác định bởi các tên phần trong dấu ngoặc vuông, chẳng hạn như [xdmcp]. Các 
dòng tiếp theo tên phần đó sẽ thiết lập các tùy chọn bằng cách sử dụng một dấu bằng, như 
enable=true. Bảng 1 tóm tắt các tên tệp cấu hình, các tên phần và các tùy chọn mà bạn phải 
thiết lập để cho phép XDMCP chạy trên một số XDMCP server Linux phổ biến. 
Bảng 1. Các tùy chọn cho phép XDMCP hỗ trợ VNC với các XDMCP server khác nhau 
Trình ứng dụng chủ XDMCP Tên tệp cấu hình Tên phần Tùy chọn 
GDM /etc/X11/gdm/custom.conf [xdmcp] enable=true 
KDM /usr/share/kde4/config/kdm/kdmrc [Xdmcp] Enable=true 
LightDM /etc/lightdm/lightdm.conf [XDMCPServer]enabled=true
Bạn có thể tìm thấy phần XDMCP trong tệp cấu hình của mình hoặc nó có thể hoàn toàn không 
có. Nếu có, nó phải rõ ràng vô hiệu hóa sự hỗ trợ XMDCP, gồm các tùy chọn bị đặt dấu chú 
thích hoặc để rỗng. Bất kể trạng thái của tệp ban đầu như thế nào, bạn cần bảo đảm rằng có mặt 
phần XDMCP và đã cho phép sự hỗ trợ này. Ví dụ, hãy xem xét một cấu hình KDM để cho phép 
XDMCP: 
[Xdmcp] 
Enable=true 
Một số bản phân phối cho phép thêm các biện pháp bảo đảm an toàn mà bạn có thể phải nới 
lỏng. Một trong số đó là tường lửa. Các kịch bản lệnh tường lửa có xu hướng là đặc trưng của 
từng bản phân phối, do đó hãy tham khảo tài liệu hướng dẫn trong hệ thống của bạn để tìm hiểu 
cách thay đổi tường lửa của bạn. Bạn nên bảo đảm localhost có quyền truy cập đến cổng 177 và 
các VNC client của bạn có quyền truy cập vào cổng 5900 (hoặc bất cứ các cổng khác nào mà bạn 
sử dụng cho VNC). 
OpenSUSE sử dụng thêm một tệp cấu hình dùng để điều khiển một số kiểu truy cập, bao gồm cả 
truy cập XDMCP: /etc/sysconfig/displaymanager. Hãy mở tệp này trong một trình soạn thảo văn 
bản và tìm kiếm dòng sau: 
DISPLAYMANAGER_REMOTE_ACCESS="no" 
Hãy thay đổi tùy chọn này thành "yes". Nếu nó vẫn giữ là "no", dấu nhắc đăng nhập của 
XDMCP server của bạn sẽ không nhìn thấy được khi bạn kết nối đến VNC server. Sự thay đổi 
này là không cần thiết trên hầu hết các bản phân phối: Chỉ có openSUSE sử dụng tệp này. 
Khởi động lại XDMCP server 
Sau khi XDMCP server của bạn được cấu hình để nhận các đăng nhập từ xa, bạn phải khởi động 
lại nó. Trên các bản phân phối khởi động X thông qua một tệp init SysV, chẳng hạn như Debian 
và Gentoo, bạn có thể dùng tùy chọn restart (khởi động lại) cho nó: 
# /etc/init.d/gdm restart 
Nếu hệ thống của bạn sử dụng số mức chạy (runlevel) để khởi động X, như Fedora và 
openSUSE, bạn sẽ cần phải chuyển đổi sang một mức chạy theo chế độ văn bản (thường là mức 
3) và sau đó quay lại mức chạy GUI (thường là 5): 
# telinit 3 
# telinit 
 5 
Cần lưu ý rằng cả hai giải pháp này đều tắt X, vì thế hãy bảo đảm rằng bạn đã lưu tất cả các công 
việc đã mở trong phiên làm việc X trước khi tiếp tục. 
Về đầu trang 
Kiểm tra và gỡ lỗi cấu hình 
Tại thời điểm này, bạn sẽ có thể đăng nhập từ một máy tính từ xa bằng cách sử dụng một trình 
VNC client. Ví dụ, hầu hết các bản phân phối Linux đều cung cấp một lệnh tên là vncviewer; 
bạn có thể gõ: 
vncviewer remotename 
. . . để đăng nhập vào remotename (tên ở xa) thông qua VNC. Khi VNC được cấu hình và làm 
việc đúng, kết quả giống như Hình 4. Nếu bạn đã cấu hình nhiều phiên làm việc VNC trên các 
cổng khác nhau, bạn có thể chỉ rõ số phiên VNC bằng cách thêm số phiên này vào như một phần 
của hostname (tên máy chủ), như trong: 
vncviewer remotename:3 
. . . để đăng nhập vào phiên 3 (trên cổng 5903). 
Hình 4. Khi được cấu hình để làm việc với XDMCP, VNC cung cấp một dấu nhắc đăng 
nhập Linux truyền thống 
Nếu bạn không nhìn thấy một màn hình đăng nhập XDMCP khi bạn thực hiện việc kiểm tra này, 
có thể bạn cần phải sửa một số lỗi. Một số thứ cần kiểm tra gồm có: 
 Nếu vncviewer báo cáo rằng kết nối bị từ chối, điều đó rất có thể có nghĩa là siêu máy 
chủ không được cấu hình đúng trên máy tính của VNC server. Hãy xem xét lại cấu hình 
xinetd của bạn và cố gắng khởi động lại siêu máy chủ. Cũng có thể là một tường lửa 
đang chặn truy cập vào máy tính của VNC server. 
 Nếu VNC client khởi chạy và kết nối đến trình máy chủ nhưng tất cả những gì bạn nhìn 
thấy là một màn hình màu xám với một con trỏ mà bạn có thể di chuyển qua lại, có lẽ có 
vấn đề với cấu hình XDMCP server. Hãy xem lại các thiết lập đã mô tả ở trên và khởi 
động lại XDMCP server. 
 Như một kỹ thuật xử lý sự cố phổ biến, hãy kiểm tra các tệp ghi logcủa bạn. Bạn có thể 
cần tìm kiếm tất cả các tệp ghi log trong /var/log để tìm các tham chiếu đến xinetd, 
XDMCP server của bạn và VNC server của bạn. 
Về đầu trang 
Các vấn đề bảo mật VNC 
RFB không phải là một giao thức an toàn; hầu hết các trình máy khách và các VNC server đều 
không mã hóa dữ liệu của chúng. (VNC chỉ mã hóa mật khẩu riêng của mình, nhưng phương 
pháp được mô tả ở đây không sử dụng các mật khẩu này). Hãy thận trọng về cách bạn triển khai 
VNC ở đâu và như thế nào. Nếu bạn muốn sử dụng VNC qua một mạng không an toàn, bạn có 
ba lựa chọn: 
 Sử dụng một mạng riêng ảo (VPN). 
 Tạo đường hầm giao thức qua SSH. 
 Sử dụng một biến thể VNC có hỗ trợ mã hóa, chẳng hạn như TigerVNC, cho phép mã 
hóa Bảo mật tầng truyền tải (Transport Layer Security). 
Việc cho phép các đăng nhập VNC như được mô tả trong bài này sẽ mở ít nhất hai cổng (cổng 
VNC và cổng XDMCP) ra thế giới bên ngoài. Bạn có thể muốn hạn chế cả hai cổng này với các 
quy tắc tường lửa để giảm thiểu nguy cơ bị lạm dụng. Lưu ý rằng cổng XDMCP (cổng UDP 
177) chỉ cần được mở ra cho localhost, nên quy tắc tường lửa của nó có thể rất ngặt nghèo. 
Về đầu trang 
Kết luận 
Nhìn chung, việc kết nối VNC và XDMCP là một kỹ thuật có ích để cho phép các đăng nhập 
GUI từ xa tới các máy tính Linux nhiều người dùng. Phương pháp này có lợi thế hơn khi sử dụng 
XDMCP trực tiếp trong các môi trường nhiều nền tảng hoặc khi làm việc xung quanh các vấn đề 
về tường lửa hoặc NAT có thể là một vấn đề. Nó có ích đối với nhiều cách tiếp cận VNC phổ 
biến trực tiếp trên các máy tính nhiều người dùng. Nếu bạn sử dụng phương pháp này, hãy chắc 
chắn xem xét các vấn đề bảo đảm an toàn. Hãy sẵn sàng thiết lập các quy tắc tường lửa để hạn 
chế truy cập không mong muốn từ bên ngoài và sử dụng mã hóa nếu việc truyền dữ liệu của bạn 
đi qua các mạng không tin cậy.