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 |
Chia sẻ: lylyngoc | Lượt xem: 1666 | 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.