上一篇遠程桌面採用的獨立服務配置不適用於過多用戶,這一篇採用超級Internet伺服器搭建vnc服務可以解決多用戶問題。 vnc之xinetd服務搭建配置 Linux遠程桌面(一):vnc之獨立服務配置 步驟一: (1)檢查是否安裝vnc服務和xinetd服務 (2)若沒有這兩項服務就需要安裝 /e ...
上一篇遠程桌面採用的獨立服務配置不適用於過多用戶,這一篇採用超級Internet伺服器搭建vnc服務可以解決多用戶問題。
vnc之xinetd服務搭建配置
Linux遠程桌面(一):vnc之獨立服務配置
步驟一:
(1)檢查是否安裝vnc服務和xinetd服務
(檢測是否安裝vnc) # rpm -qa | grep vnc (檢測是否安裝xinetd) # rpm -qa | grep xinetd
(2)若沒有這兩項服務就需要安裝
/etc/xinetd.conf和/etc/xinetd.d/* (啟動關閉) # /etc/init.d/xinetd restart # service xinetd restart xinetd:未識別的服務 # service xinetd reload xinetd:未識別的服務 # # rpm -ivh xinetd-2.3.14-10.el5.i386.rpm Preparing... #####################[100%] 1:xinetd #####################[100%] # service xinetd restart Stopping xinetd: [FAILED] Starting xinetd: [ OK ] # 安裝完成!View Code
步驟二:
(1)配置xinetd
由xinetd管理的伺服器會將配置文件放在 /etc/xinetd.d 目錄中。
因此,要配置xinetd來處理VNC,您應當創建或編輯一個名稱類似 /etc/xinetd.d/vnc 的文件。
(在某些發行版上,比如openSUSE,VNC 伺服器包會安裝這樣的一個文件。)
# vi /etc/xinetd.d/vnc (vnc為新建文件,名稱可任意)
內容如下:
service vnc_001 { user = user001 port = 5901 type = UNLISTED disable = no socket_type = stream protocol = tcp wait = no server = /usr/bin/Xvnc server_args = -inetd -query localhost -geometry 1366x768 -once -securitytypes=none } service vnc_002 { user = user002 port = 5902 type = UNLISTED disable = no socket_type = stream protocol = tcp wait = no server = /usr/bin/Xvnc server_args = -inetd -query localhost -geometry 1366x768 -once -securitytypes=none } service vnc_003 { user = user003 port = 5903 type = UNLISTED disable = no socket_type = stream protocol = tcp wait = no server = /usr/bin/Xvnc server_args = -inetd -query localhost -geometry 1366x768 -once -securitytypes=none }View Code
說明:
1 user = root 表示執行此服務進程的用戶是root。 2 port = 5900 vnc使用5900及以上埠 3 disable = yes 表示禁用這個服務。 4 socket_type = stream 表示服務的數據包類型為stream。 5 wait = no 表示不需等待,即服務將以多線程的方式運行。 6 server = /usr/bin/Xvnc 啟動腳本的位置。 7 log_on_failure += USERID:表示設置失敗時,UID添加到系統登記表。 8 server_args = :8 -inetd -once -query localhost -depth 16 -geometry 1024x768 -securitytypes=none 9 10 :8 指定啟動Xvnc伺服器的X Window系統顯示器 11 -inetd 把Xvnc伺服器作為守護進程運行,並預期從xinetd(inetd)運行它 12 -once 當建立連接時從頭啟動Xvnc伺服器,當連接結束時,終止伺服器。此參數還能阻止Xvnc伺服器的多個副本在同一埠上啟動。 13 -query localhost 該選項告訴VNC X伺服器查詢localhost系統以便進行XDMCP 身份驗證。 14 如果您想使用一臺電腦作為中繼來訪問另一臺電腦上的程式,您可以更改它。 15 -depth 16 該選項設置顏色深度。較低的值能夠產生較快的顯示更新,但是高色彩桌面環境會因顏色工件而受到折損。 16 有效的值介於2到32之間。 17 -geometry 1024x768 您可以使用該選項設置 VNC 會話的虛擬解析度。 18 註意,該解析度不需要類同於在伺服器電腦上運行的常規X伺服器的解析度。值小於伺服器使用解析度。 19 您可能想要創建以不同解析度運行的多個條目,以便讓用戶使用其本地系統便於應用的任何解析度登錄到VNC伺服器。 20 -securitytypes=none 指定Xvnc伺服器不使用它自己內部安全機制(vncpasswd)來允許對vnc伺服器的訪問,因為XDMCP會處理這個問題。 21 22View Code
還有許多其他選項,一些隨VNC伺服器的不同而不同。查詢您的VNC伺服器的文檔,瞭解更多內容。
步驟三:
(1)添加vnc服務(可省略此步驟,作用在此步驟最後...)
# vi /etc/services
內容如下:
1 # /etc/services: 2 # $Id: services,v 1.42 2006/02/23 13:09:23 pknirsch Exp $ 3 # 4 # Network services, Internet style 5 # 6 # Note that it is presently the policy of IANA to assign a single well-known 7 # port number for both TCP and UDP; hence, most entries here have two entries 8 # even if the protocol doesn't support UDP operations. 9 # Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports 10 # are included, only the more common ones. 11 # 12 # The latest IANA port assignments can be gotten from 13 # http://www.iana.org/assignments/port-numbers 14 # The Well Known Ports are those from 0 through 1023. 15 # The Registered Ports are those from 1024 through 49151 16 # The Dynamic and/or Private Ports are those from 49152 through 65535 17 # 18 # Each line describes one service, and is of the form: 19 # 20 # service-name port/protocol [aliases ...] [# comment] 21 22 tcpmux 1/tcp # TCP port service multiplexer 23 tcpmux 1/udp # TCP port service multiplexer 24 rje 5/tcp # Remote Job Entry 25 rje 5/udp # Remote Job Entry 26 echo 7/tcp 27 echo 7/udp 28 ...(省略過多內容) 29 ...(省略過多內容) 30 ...(省略過多內容) 31 com-bardac-dw 48556/tcp # com-bardac-dw 32 com-bardac-dw 48556/udp # com-bardac-dw 33 iqobject 48619/tcp # iqobject 34 iqobject 48619/udp # iqobject 35 # Local services 36 vnc_001 5901/tcp (添加) 37 vnc_002 5902/tcp (添加) 38 vnc_003 5903/tcp (添加) 39 vnc_004 5904/tcp (添加)View Code
(2)添加到service的作用說明
1 (1)作用: 2 /etc/services文件是記錄網路服務名和它們對應使用的埠號及協議。 3 (2)格式: 4 文件中的每一行對應一種服務,它由4個欄位組成,中間用TAB或空格分隔,分別表示“服務名稱”、“使用埠”、“協議名稱”以及“別名”。 5 服務名 "tab" 埠號/協議名 “tab” 別名 6 7 kermit 1649/udp 8 l2tp 1701/tcp l2f 9 l2tp 1701/udp l2f 10 h323gatedisc 1718/tcp 11 (3)應用: 12 很多的系統程式要使用這個文件。 13 如果每一個服務都能夠嚴格遵循該機制,在此文件里標註自己所使用的埠信息,則主機上各服務間對埠的使用,將會非常清晰明瞭,易於管理; 14 在該文件中定義的服務名,可以作為配置文件中的參數使用。例如:在配置路由策略時,使用"www"代替"80",即為調用了此文件中的條目“www 80”; 15 且當有特殊情況,需要調整埠設置,只需要在/etc/services中修改www的定義,即可影響到服務。 16 例如: 17 在文件中增加條目“privPort 55555”,在某個私有服務中多個配置文件里廣泛應用,進行配置。 18 當有特殊需要,要將這些埠配置改為66666,則只需修改/etc/services文件中對應行即可。 19 在應用程式中可以通過服務名和協議獲取到對應的埠號,通過在該文件註冊可以使應用程式不再關心埠號。 20 (4)埠分配: 21 Linux系統的埠號的範圍為0–65535,不同範圍有不同的意義。 22 0 不使用 23 1--1023 系統保留,只能由root用戶使用 24 1024---4999 由客戶端程式自由分配 25 5000---65535 由伺服器端程式自由分配 26 (5)如何使應用程式不再關心服務所使用的埠號? 27 [1]確定服務程式名稱,協議,埠號 28 [2]在/etc/services中配置[1]中信息 29 [3]應用程式可以不直接使用埠號,通過函數getservbyname("server","tcp")獲取埠號。 30 [4]如果服務想更改埠號只要更改/etc/services中的埠號就可以了,應用程式不需要做任何更改。 31 註:同時可以通過函數getservbyport(htons(50),“tcp”)獲取對應埠和規約上的服務名。 32 使用這兩個系統函數需要包含頭文件:#include <netdb.h>View Code
步驟四:
(1)配置XDMCP伺服器
大部分Linux發行版配置其XDMCP服務,主要是為了管理本地顯示。
為了提供遠程訪問,您必須重新配置您的XDMCP伺服器,以接受在同一臺電腦上運行的VNC伺服器的請求。具體細節因XDMCP伺服器而異。
Linux上最常用的三個XDMCP伺服器是GNOME Display Manager(GDM)、Light Display Manager(LightDM)和KDE Display Manager(KDM)。
其他XDMCP伺服器,比如XDM,需要接受不同於此處所描述的調整。不管怎麼,在重新配置您的XDMCP伺服器之後,您需要重啟它。
# vi /etc/gdm/custom.conf (/usr/share/gdm/defaults.conf //GNOME管理預設的配置文件)
內容如下:
1 # For full reference documentation see the gnome help browser under 2 # GNOME|System category. You can also find the docs in HTML form on 3 # http://www.gnome.org/projects/gdm/ 4 # 5 # NOTE: Lines that begin with "#" are considered comments. 6 # 7 # Have fun! 8 9 [daemon] 10 # RemoteGreeter=/usr/libexec/gdmlogin (添加)(此遠程登錄界面為傳統界面) 11 RemoteGreeter=/usr/libexec/gdmgreeter (添加)(此遠程登錄界面為正常界面) 12 13 [security] 14 AllowRemoteRoot=true (添加) 15 16 [xdmcp] 17 Enable=true (添加) 18 Port=177 (添加,可去) 19 20 [gui] 21 22 [greeter] 23 24 [chooser] 25 26 [debug] 27 28 # Note that to disable servers defined in the defaults.conf file (such as 29 # 0=Standard, you must put a line in this file that says 0=inactive, as 30 # described in the Configuration section of the GDM documentation. 31 # 32 [servers] 33 34 # Also note, that if you redefine a [server-foo] section, then GDM will 35 # use the definition in this file, not the defaults.conf file. It is 36 # currently not possible to disable a [server-foo] section defined 37 # in the defaults.conf file. 38 #View Code
說明:daemon表示使用和本地一樣的登錄界面,不配置是個醜陋的簡潔界面;
security是允許使用root用戶直接遠程登錄,一般不配置,不配置也可su - root登錄終端;
xdmcp表示啟用服務,服務使用177埠。
保存退出後,重啟gdm,放開防火牆埠,即可遠程登錄。
# /usr/sbin/gdm-restart
(2)也可以在rhel的桌面控制臺上,使用圖形視窗配置custom.conf內容。
# /usr/bin/gdmsetup
最後,如果inittab(vi /etc/inittab)設置在文本模式運行級別3,命令行可能無法啟動gdmsetup,估計是gdm相關的服務在引導3下沒有啟動。
# cat /etc/inittab|grep id (查看運行級別)
# vi /etc/inittab (編輯運行模式級別為GUI運行)
內容如下:
1 # 2 # inittab This file describes how the INIT process should set up 3 # the system in a certain run-level. 4 # 5 # Author: Miquel van Smoorenburg, <[email protected]> 6 # Modified for RHS Linux by Marc Ewing and Donnie Barnes 7 # 8 9 # Default runlevel. The runlevels used by RHS are: 10 # 0 - halt (Do NOT set initdefault to this) 11 # 1 - Single user mode 12 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 13 # 3 - Full multiuser mode 14 # 4 - unused 15 # 5 - X11 16 # 6 - reboot (Do NOT set initdefault to this) 17 # 18 id:5:initdefault: 19 20 # System initialization. 21 si::sysinit:/etc/rc.d/rc.sysinit 22 23 l0:0:wait:/etc/rc.d/rc 0 24 l1:1:wait:/etc/rc.d/rc 1 25 l2:2:wait:/etc/rc.d/rc 2 26 l3:3:wait:/etc/rc.d/rc 3 27 l4:4:wait:/etc/rc.d/rc 4 28 l5:5:wait:/etc/rc.d/rc 5 29 l6:6:wait:/etc/rc.d/rc 6 30 31 # Trap CTRL-ALT-DELETE 32 ca::ctrlaltdel:/sbin/shutdown -t3 -r now 33 34 # When our UPS tells us power has failed, assume we have a few minutes 35 # of power left. Schedule a shutdown for 2 minutes from now. 36 # This does, of course, assume you have powerd installed and your 37 # UPS connected and working correctly. 38 pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" 39 40 # If power was restored before the shutdown kicked in, cancel it. 41 pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" 42 43 44 # Run gettys in standard runlevels 45 1:2345:respawn:/sbin/mingetty tty1 46 2:2345:respawn:/sbin/mingetty tty2 47 3:2345:respawn:/sbin/mingetty tty3 48 4:2345:respawn:/sbin/mingetty tty4 49 5:2345:respawn:/sbin/mingetty tty5 50 6:2345:respawn:/sbin/mingetty tty6 51 52 # Run xdm in runlevel 5 53 x:5:respawn:/etc/X11/prefdm -nodaemonView Code
步驟五:
(1)配置防火牆
# vi /etc/sysconfig/iptables
內容如下:
1 # Firewall configuration written by system-config-securitylevel 2 # Manual customization of this file is not recommended. 3 *filter 4 :INPUT ACCEPT [0:0] 5 :FORWARD ACCEPT [0:0] 6 :OUTPUT ACCEPT [0:0] 7 :RH-Firewall-1-INPUT - [0:0] 8 -A INPUT -j RH-Firewall-1-INPUT 9 -A FORWARD -j RH-Firewall-1-INPUT 10 -A RH-Firewall-1-INPUT -i lo -j ACCEPT 11 -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT 12 -A RH-Firewall-1-INPUT -p 50 -j ACCEPT 13 -A RH-Firewall-1-INPUT -p 51 -j ACCEPT 14 -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT 15 -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT 16 -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT 17 -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 18 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 19 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT (添加) 20 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5902 -j ACCEPT (添加) 21 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5903 -j ACCEPT (添加) 22 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5904 -j ACCEPT (添加) 23 -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 24 COMMITView Code
(2)也可關閉防火牆(不建議)
# service iptables stop (即時關閉防火牆,重啟失效)
# chkconfig iptables off (永久關閉防火牆,重啟有效)
步驟六:
重啟,vnc客戶端連接測試
# shutdown -h now (立刻關機)
# shutdown -r now (立刻重啟)
步驟七: 維護
如果在執行該測試時您沒有看到一個XDMCP登錄界面,那麼就需要進行一些調試。要檢查的內容包括:
(1)如果vncviewer報告連接被拒絕,這很可能意味著超級伺服器沒有在VNC伺服器電腦上得到適當的配置。檢查您的 xinetd配置,嘗試重啟超級伺服器。也有可能是防火
牆阻止對 VNC 伺服器電腦的訪問。
(2)如果 VNC 客戶端啟動並連接到了伺服器,但是您所看到的只是一個灰色屏幕以及一個可隨處移動的游標,問題可能出在XDMCP伺服器配置上。檢查之前描述的設置,並
重新啟動XDMCP伺服器。
(3)一個通用的故障排除方法就是檢查您的日誌文件。您可能需要搜索/var/log中的所有日誌文件,查看是否引用到xinetd、您的XDMCP 伺服器和您的VNC伺服器。
VNC 安全隱患:
RFB 不是一個安全協議;大多數 VNC 客戶端和伺服器不對它們的數據進行加密。(雖然 VNC 對其自己的密碼進行加密,但是這裡描述的方法不使用這些密碼。)要對部署
VMC 的地點和方式十分謹慎。如果您希望在一個不安全的網路上使用 VNC,您有三個選擇:
使用一個虛擬專用網路 (VPN)。
通過 SSH 通道傳輸協議。
使用一個支持加密的 VNC 變體,比如 TigerVNC,它啟用傳輸層安全加密。
實現本文所描述的 VNC 登錄會至少開啟兩個通向外界的埠(VNC 埠和 XDMCP 埠)。您可能希望使用防火牆規則同時限制這兩個埠,以最大限度地降低濫用的風險。註意,XDMCP埠(UDP埠177)僅需要向 localhost開放,因此其防火牆規則會相當嚴格。
結束語:
總的來講,鏈接VNC和XDMCP是支持通過遠程GUI登錄到多用戶Linux電腦的一個非常有用的技術。該方法比在跨平臺環境中直接使用XDMCP 或者在防火牆或NAT問題難
以解決時使用XDMCP更有優勢。它比多用戶電腦上更加常見的直接VNC方法更有益。如果您使用該方法,一定要考慮安全性問題。請準備好設置防火牆規則來限制不需要的外部
訪問,並且如果您的傳輸經由不可信賴的網路,請務必使用加密功能。
https://www.ibm.com/developerworks/cn/opensource/os-multiuserloginsvnc/#ibm-pcon
如有錯誤還請指出,如有侵權還請告知,如需轉載請註明出處!
本人博客:http://www.cnblogs.com/yllinux/