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.

pdf9 trang | Chia sẻ: lylyngoc | Lượt xem: 1568 | Lượt tải: 1download
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.