上一篇远程桌面采用的独立服务配置不适用于过多用户,这一篇采用超级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 ] #
安装完成!

步骤二:

(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 =
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 =
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 =
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
}

    说明:

 user            = root 表示执行此服务进程的用户是root。
port = vnc使用5900及以上端口
disable = yes 表示禁用这个服务。
socket_type = stream 表示服务的数据包类型为stream。
wait = no 表示不需等待,即服务将以多线程的方式运行。
server = /usr/bin/Xvnc 启动脚本的位置。
log_on_failure += USERID:表示设置失败时,UID添加到系统登记表。
server_args = : -inetd -once -query localhost -depth -geometry 1024x768 -securitytypes=none : 指定启动Xvnc服务器的X Window系统显示器
-inetd 把Xvnc服务器作为守护进程运行,并预期从xinetd(inetd)运行它
-once 当建立连接时从头启动Xvnc服务器,当连接结束时,终止服务器。此参数还能阻止Xvnc服务器的多个副本在同一端口上启动。
-query localhost 该选项告诉VNC X服务器查询localhost系统以便进行XDMCP 身份验证。
如果您想使用一台计算机作为中继来访问另一台计算机上的程序,您可以更改它。
-depth 该选项设置颜色深度。较低的值能够产生较快的显示更新,但是高色彩桌面环境会因颜色工件而受到折损。
有效的值介于2到32之间。
-geometry 1024x768 您可以使用该选项设置 VNC 会话的虚拟分辨率。
注意,该分辨率不需要类同于在服务器计算机上运行的常规X服务器的分辨率。值小于服务器使用分辨率。
您可能想要创建以不同分辨率运行的多个条目,以便让用户使用其本地系统便于应用的任何分辨率登录到VNC服务器。
-securitytypes=none 指定Xvnc服务器不使用它自己内部安全机制(vncpasswd)来允许对vnc服务器的访问,因为XDMCP会处理这个问题。

        还有许多其他选项,一些随VNC服务器的不同而不同。查询您的VNC服务器的文档,了解更多内容。

步骤三:

(1)添加vnc服务(可省略此步骤,作用在此步骤最后...)

 # vi /etc/services

    内容如下:

 # /etc/services:
# $Id: services,v 1.42 // :: pknirsch Exp $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC , ``Assigned Numbers'' (October ). Not all ports
# are included, only the more common ones.
#
# The latest IANA port assignments can be gotten from
# http://www.iana.org/assignments/port-numbers
# The Well Known Ports are those from through .
# The Registered Ports are those from through
# The Dynamic and/or Private Ports are those from through
#
# Each line describes one service, and is of the form:
#
# service-name port/protocol [aliases ...] [# comment] tcpmux /tcp # TCP port service multiplexer
tcpmux /udp # TCP port service multiplexer
rje /tcp # Remote Job Entry
rje /udp # Remote Job Entry
echo /tcp
echo /udp
...(省略过多内容)
...(省略过多内容)
...(省略过多内容)
com-bardac-dw /tcp # com-bardac-dw
com-bardac-dw /udp # com-bardac-dw
iqobject /tcp # iqobject
iqobject /udp # iqobject
# Local services
vnc_001 /tcp (添加)
vnc_002 /tcp (添加)
vnc_003 /tcp (添加)
vnc_004 /tcp (添加)

(2)添加到service的作用说明

 ()作用:
/etc/services文件是记录网络服务名和它们对应使用的端口号及协议。
()格式:
文件中的每一行对应一种服务,它由4个字段组成,中间用TAB或空格分隔,分别表示“服务名称”、“使用端口”、“协议名称”以及“别名”。
服务名 "tab" 端口号/协议名 “tab” 别名 kermit /udp
l2tp /tcp l2f
l2tp /udp l2f
h323gatedisc /tcp
()应用:
很多的系统程序要使用这个文件。
如果每一个服务都能够严格遵循该机制,在此文件里标注自己所使用的端口信息,则主机上各服务间对端口的使用,将会非常清晰明了,易于管理;
在该文件中定义的服务名,可以作为配置文件中的参数使用。例如:在配置路由策略时,使用"www"代替"",即为调用了此文件中的条目“www ”;
且当有特殊情况,需要调整端口设置,只需要在/etc/services中修改www的定义,即可影响到服务。
例如:
在文件中增加条目“privPort ”,在某个私有服务中多个配置文件里广泛应用,进行配置。
当有特殊需要,要将这些端口配置改为66666,则只需修改/etc/services文件中对应行即可。
在应用程序中可以通过服务名和协议获取到对应的端口号,通过在该文件注册可以使应用程序不再关心端口号。
()端口分配:
Linux系统的端口号的范围为0–,不同范围有不同的意义。
不使用
-- 系统保留,只能由root用户使用
--- 由客户端程序自由分配
--- 由服务器端程序自由分配
()如何使应用程序不再关心服务所使用的端口号?
[]确定服务程序名称,协议,端口号
[]在/etc/services中配置[]中信息
[]应用程序可以不直接使用端口号,通过函数getservbyname("server","tcp")获取端口号。
[]如果服务想更改端口号只要更改/etc/services中的端口号就可以了,应用程序不需要做任何更改。
注:同时可以通过函数getservbyport(htons(),“tcp”)获取对应端口和规约上的服务名。
使用这两个系统函数需要包含头文件:#include <netdb.h>

步骤四:

(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管理默认的配置文件)

    内容如下:

 # For full reference documentation see the gnome help browser under
# GNOME|System category. You can also find the docs in HTML form on
# http://www.gnome.org/projects/gdm/
#
# NOTE: Lines that begin with "#" are considered comments.
#
# Have fun! [daemon]
# RemoteGreeter=/usr/libexec/gdmlogin (添加)(此远程登录界面为传统界面)
RemoteGreeter=/usr/libexec/gdmgreeter (添加)(此远程登录界面为正常界面) [security]
AllowRemoteRoot=true (添加) [xdmcp]
Enable=true (添加)
Port= (添加,可去) [gui] [greeter] [chooser] [debug] # Note that to disable servers defined in the defaults.conf file (such as
# =Standard, you must put a line in this file that says =inactive, as
# described in the Configuration section of the GDM documentation.
#
[servers] # Also note, that if you redefine a [server-foo] section, then GDM will
# use the definition in this file, not the defaults.conf file. It is
# currently not possible to disable a [server-foo] section defined
# in the defaults.conf file.
#

    说明: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运行)

  内容如下:

 #
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
# # Default runlevel. The runlevels used by RHS are:
# - halt (Do NOT set initdefault to this)
# - Single user mode
# - Multiuser, without NFS (The same as , if you do not have networking)
# - Full multiuser mode
# - unused
# - X11
# - reboot (Do NOT set initdefault to this)
#
id::initdefault: # System initialization.
si::sysinit:/etc/rc.d/rc.sysinit l0::wait:/etc/rc.d/rc
l1::wait:/etc/rc.d/rc
l2::wait:/etc/rc.d/rc
l3::wait:/etc/rc.d/rc
l4::wait:/etc/rc.d/rc
l5::wait:/etc/rc.d/rc
l6::wait:/etc/rc.d/rc # Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now # When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h + "Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it.
pr::powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" # Run gettys in standard runlevels
::respawn:/sbin/mingetty tty1
::respawn:/sbin/mingetty tty2
::respawn:/sbin/mingetty tty3
::respawn:/sbin/mingetty tty4
::respawn:/sbin/mingetty tty5
::respawn:/sbin/mingetty tty6 # Run xdm in runlevel
x::respawn:/etc/X11/prefdm -nodaemon

步骤五:

(1)配置防火墙

# vi /etc/sysconfig/iptables 

  内容如下:

 # Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
:RH-Firewall--INPUT - [:]
-A INPUT -j RH-Firewall--INPUT
-A FORWARD -j RH-Firewall--INPUT
-A RH-Firewall--INPUT -i lo -j ACCEPT
-A RH-Firewall--INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall--INPUT -p -j ACCEPT
-A RH-Firewall--INPUT -p -j ACCEPT
-A RH-Firewall--INPUT -p udp --dport -d 224.0.0.251 -j ACCEPT
-A RH-Firewall--INPUT -p udp -m udp --dport -j ACCEPT
-A RH-Firewall--INPUT -p tcp -m tcp --dport -j ACCEPT
-A RH-Firewall--INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall--INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A RH-Firewall--INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT (添加)
-A RH-Firewall--INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT (添加)
-A RH-Firewall--INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT (添加)
-A RH-Firewall--INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT (添加)
-A RH-Firewall--INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

(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/

Linux远程桌面(二)的更多相关文章

  1. window用Xmanager4.0的Xstart连接linux远程桌面

    安装包: xorg-x11-xauth xterm.x86_64 0:253-1.el6 Execute command path:/usr/bin/xterm Xstart连接Linux远程桌面有一 ...

  2. Linux远程桌面(三)

    上一篇中的vnc配置已经很方便了,这一篇介绍更为简单的xmanager的配置,xmanager画面好一丢丢. Xmanager服务器配置             Linux远程桌面(二):vnc之xi ...

  3. linux 远程桌面连接

    我们知道在windows下面我们可以用远程桌面连接来控制其它电脑, 但linux 远程桌面连接?不过在说怎样连接之前还是要先明确一个概念,为什么我标题没有用linux中的远程桌面连接呢, 这是因为Li ...

  4. CentOS 6.8 安装TigerVNC 实现 Linux 远程桌面并安装火狐浏览器

    CentOS 6.8 安装TigerVNC 实现 Linux 远程桌面并安装火狐浏览器 vnc客户端地址:https://files.cnblogs.com/files/MYSQLZOUQI/vnc- ...

  5. Xrdp - 通过Windows的RDP连接Linux远程桌面(Ubuntu/CentOS/Redhat 7)(转载)

            您多久访问一次Linux桌面? 您使用什么工具来访问远程桌面? Xrdp是一个开源工具,允许用户通过Windows RDP访问Linux远程桌面. 除了Windows RDP之外,xr ...

  6. Xrdp - 通过Windows的RDP连接Linux远程桌面(Ubuntu/CentOS/Redhat 7)

    Xrdp - 通过Windows的RDP连接Linux远程桌面(Ubuntu/CentOS/Redhat 7) 您多久访问一次Linux桌面? 您使用什么工具来访问远程桌面? Xrdp是一个开源工具, ...

  7. 阿里云服务器上开启linux远程桌面连接

    一.说明: 本文的目的是实现在windows机器上利用远程桌面连接来访问远程的linux桌面. 这里使用的是阿里云服务器,操作系统为Centos6.5. 二.基本步骤: 1.首先保证服务器已经安装完毕 ...

  8. Linux远程桌面工具 -- NoMachine

    玩Linux系统,会经常用到远程桌面软件. 我一直用的2个是Xmanager 和 VNC. 今天看到一个新软件: NoMachine. NoMachine NX 是一个快速的终端服务器和虚拟桌面软件, ...

  9. VNC Linux 远程桌面控制软件

    简介: VNC (Virtual Network Computer)是虚拟网络计算机的缩写. VNC 是一款优秀的远程控制工具软件,VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件 ...

随机推荐

  1. ZPL打印机命令解释

    个人备忘: 1.装驱动,装驱动要装对应的ZPL或者EPL版本,目前发现GK888T无需选择,直接装GK888T即可,其他机型未知. 2.标签设计,文本部分用SimSun-ExtB字体,变量内容部分用Z ...

  2. 转 Celery 使用

    http://www.mamicode.com/info-detail-1798782.html https://blog.csdn.net/lu1005287365/article/details/ ...

  3. 效率工具(fswatch,rsync)

    mac 安装 brew: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/in ...

  4. maya2015无法安装卸载激活失败

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  5. C# list.toArray list与数组的转换

    void Start () { List<int> list = new List<int>(); list.Add(); list.Add(); list.Add(); li ...

  6. Starting cloudera-scm-server: * Couldn't start cloudera-scm-server的解决办法(图文详解)

    bigdata@ubuntucmbigdata1:~$ sudo /etc/init.d/mysql start start: Job is already running: mysql bigdat ...

  7. 换晶振导致stm32串口数据飞码的解决办法(补充)

    今天(2014.4.21)把stm32f107的程序下载到stm32f103的板子上,发现串口收不到数据,突然想起晶振频率没有修改,#define HSE_VALUE    ((uint32_t)13 ...

  8. php防止重复提交问题总结

    用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. 1.使用客户端脚本 提 ...

  9. log4j.properties 日志分析

    # 多目的地.自定义样式#设置级别和多个目的地#level 是日志记录的优先级,分为 OFF.FATAL.ERROR.WARN.INFO.DEBUG.ALL或者您定义的级别.#Log4j建议只使用四个 ...

  10. HDU 4323——Magic Number——————【dp求编辑距离】2012——MUT——3

    Magic Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...