远程联机服务器SSH / XDMCP / VNC / RDP
利用SSH,telnet,VNC等方式取得的文字或图形shell能够进行很多系统管理的任务,与单纯的FTP能进行的工作当然不同
远程服务联机进入主机之后,能够进行的工作太多了,因此服务器的远程联机程序通常仅针对少部分系统维护者开发而已,除非必要,否则Server类型的主机还真的不建议开放
联机的服务
工作站类型服务器,只针对内网,不提供因特网服务的主机,不过必须要给使用者登录的权限,此时你就要针对内部,或者是特定的某些来源开放他们使用你的工作站
目前远程联机服务器主要有文字接口和图形接口两种:
文字接口明码:telnet,rsh等为主,目前很少用,明码指的是在网络上传输的数据封包,其内部为数据的原始格式,也就是说telnet登录远程主机,一定要输密码,你的账号和密码
是使用原本的数据格式传输,所以如果被类似tcpdump之类的监听软件截取的话,你的账号就有可能被窃取了
文字接口密码:ssh为主,目前大多在网络上的数据封包都是加密的技术,等到传输的封包加密后再传输到网络上,以增加数据在Internet上面传送的安全性,
图形接口:Xdmcp,VNC,RDP等较为常见,图形接口传输的数据量相当的大,所以速度与安全性都有待考虑,因此,我们仅建议你将图形接口的远程登录服务器开放在
内部网域(LAN)。
接着将介绍ssh的应用,包括rsync藉由ssh通道来进行异地备份的任务等等,至于图形接口则会介绍Xdmcp,VNC,RDP,因为很多工作需要显示他们在工作站实作后的图形呈现
特别注意:SSH协议在预设的状态下,本身就提供两个服务器功能
一个是类似telnet的远程联机使用shell的服务器,俗称SSH,另一个就是FTP服务的sftp-server,提供更安全的FTP服务
联机加密技术:简单的说就是将人们看的懂的原始电子数据,经过一些运算,让这些数据变成没有意义的乱码,然后再将他在网络上面传输,而当用户想要查阅这个数据时,再
透过解密运算,将这些乱码推算出原始的电子数据,由于这个数据已经被重新处理过,所以,即使数据在因特网上被cracker监听而窃取,他们也不容易推算出原始资料内容
目前常用的网络封包加密技术是藉由所谓的【非对称密钥系统】来处理的,通过两把不一样的公钥与私钥来进行加密与解密的过程,由于这两把钥匙是提供加解密的功能,所以
在同一个方向的联机中,这两把钥匙当然是需要成对的,功能如下:
公钥:提供给远程主机进行数据加密的行为,大家都能取得你的公钥来将数据加密的意思。
私钥:远程主机使用你的公钥加密的数据,在本地能够使用私钥来进行解密,私钥是不能够外流的,只能保护在自己的主机上。
由于每部主机都应该有自己的公钥与私钥,私钥是不可外流的,网络是双向的,所以每个人都要有对方的公钥才对,通过ssh,客户端和服务器端的联机有以下的操作步骤:
首先取得服务器端的公钥,然后将自己的公钥发送给服务器,最终在客户机上的密钥是【服务器端的公钥加上客户端我自己的私钥】来组成的
目前在 SSH 使用上,主要是利用 RSA/DSA/Diffie-Hellman 等机制来加解密的,目前 SSH 的协议版本有两种,分别是 version 1 与 version 2,由于V2加上了联机检测的机制,
因此请尽量使用V2版本即可,无论何版本,都需要公钥与私钥加密系统的,公钥与私钥如何产生如下:
1.服务器在第一次启动ssh服务时,会主动找/etc/ssh/ssh_host* 的档案,刚刚装机完成后,没有该档案,因此sshd会主动去计算出公钥档案与私钥档案
2.客户端主动联机要求,客户端想要联机到ssh服务器,需要使用适当的客户端程序来联机,包括ssh,pietty等客户端程序或工具
3.服务器收到请求,主动发送公钥给客户端(此时是明码传送,反正公钥本来就是给大家用的)
4.客户端记录或比对服务器的公钥数据及随时计算自己的公私钥,若客户端第一次联机,就会将公钥数据记录到客户端的用户家目录内的~/.ssh/known_hosts,
,若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否存在差异,若接收此公钥数据,则开始计算客户端自己的公私钥数据
5.回传客户端的公钥数据给服务器,此时服务器具有服务器的私钥与客户端的公钥,而客户端具有服务器的公钥与客户端自己的私钥,你会看到,此次联机的服务器
与客户端的密钥系统(公钥与私钥)并不一样,所以称之为非对称式的密码系统
6,开始双线加解密,(1)服务器到客户端,服务器传送数据,拿用户的公钥加密后送出,客户端接收后,用自己的私钥解密,(2) 客户端到服务器,客户端到服务器:客户端
传送数据时,拿服务器的公钥加密送出后,服务器接收好后,用服务器的私钥解密
由于本次客户端的密钥是随机运算产生本次联机当中的,所以这次联机与下次联机的密钥可能会不一样的,此外客户端的用户家目录下的~/.ssh/known_hosts 会记录曾经联机过
的主机的 public key,用以确认我们是连接上正确的那部服务器
如何产生新的服务器端的 ssh 公钥与服务器自己使用的成对私钥?
服务器提供的公钥与自己的私钥都放置于 /etc/ssh/ssh_host*,因此先删除密钥档rm /etc/ssh/ssh_host*,再重新启动服务会看到新建的公私钥文件了, date; ll /etc/ssh/ssh_host*
启动SSH服务
在Linux的系统中,默认已经含有SSH的所有需要的软件,包含了可以产生密码等协议的OpenSSL软件与OpenSSH软件,所以启动SSH只要直接执行/etc/init.d/sshd restart就可
以了,不用去设定,这个启动的方式是指直接启动就是以SSH daemon,简称为sshd来启动的。需要注意的是,SSH不但提供了shell给我们使用,亦即是ssh protocol的主要目
的,同时亦提供了一个较为安全的FTP server,亦即是ssh-ftp server给我们当成是FTP来使用,所以这个sshd可以同时提供shell与ftp,同时都是架构在port 22上面的,接着将介
绍client端如何链接上server端的,同时,如何以FTP的服务来连接上server并且使用FTP的功能
ssh [-f] [-o 参数项目] [-p 非正规埠口] [账号@]IP [指令] 选项与参数:
-f : 需要配合后面的 [指令] , 不登入远程主机直接发送一个指令过去而已;
-o 参数项目:主要的参数项目有: connectTimeout=秒数:联机等待的秒数,较少等待的时间, StrictHostKeyChecking=[yes|no|ask]: 预设是ask,若要让public key主动加入
known_hosts,则可以设定为no即可
-p :如果你的sshd服务启动在非正规的端口(22),需要使用此项目;
【指令】:不登录远程主机,直接发送指令过去,但与 -f 意义不太相同
# 1. 直接联机登入到对方主机的方法 (以登入本机为例): ssh 10.0.0.4, 取消登录执行exit命令,由于ssh后面没有加上帐号,因此预设使用当前的帐号来登录远程服务器
一般使用 ssh 登入远程主机,都会填写『 ssh 账号@主机 IP 』的格式, 一般情况下还是使用类似email的方式来登录远程主机比较好
可以从输出信息中看到RSA的那行后面接的就是远程服务器的公钥指纹码,如果确定没有问题,就要输入yes来将指纹码写入服务器公钥记录文件
(~/.ssh/known_hosts), 以方便未来比对该服务器的正确性之用,注意要写yes,单纯输入Y或y是不会被接受的,由于该主机的公钥已经被记录,因此未来重复
使用ssh 登录此主机时,就不会出现这个指纹码提示了,ssh [email protected] 不会出现提示你要增加主机公钥的讯息了
# 3. 登入对方主机执行过指令后立刻离开的方式: ssh [email protected] find / &> ~/find1.log 此时就会执行命令了页面卡住,但是执行的指令尚未跑完,因此你会在等待当中
那如何指定系统自己跑?
# 4. 与上题相同,但是让对方主机自己跑该指令,你立刻回到近端主机继续工作: ssh -f [email protected] find / &> ~/find1.log
此时你会立刻注销127.0.0.1 ,但find指令会自己在远程服务器跑
第4个范例很有用,例如想要让远程主机进行关机的指令,如果不加上-f 的参数,会等待对方关机后自动将你踢出联机,加上-f就很重要
因为你会指定远程主机自己跑关机,而不需要空空等待,例如:ssh -f root@some_IP shutdown -h now 之类的指令
# 5. 删除掉 known_hosts 后,重新使用 root 联机到本机,且自动加上公钥记录
rm ~/.ssh/known_hosts
ssh -o StrictHostKeyChecking=no root@localhos 加上 -o StrictHostKeyChecking=no以后,就不会询问你yes或no了,直接写入~/.ssh/known_hosts 当中了
此设置对于写脚本来说,相当有用。
服务器公钥记录文件: ~/.ssh/known_hosts 当登录服务器时,本机会主动的用接受到的服务器的public key去比对~/.ssh/known_hosts 有无相关的公钥:
若接收的公钥尚未记录,则询问用户是否记录。 (范例中回答 yes的那个步骤) 则写入 ~/.ssh/known_hosts 且继续登入的后续工作,(回答 no) 则不写入该档案,并且离开登入工作
若接收到的公钥已有记录,则比对记录是否相同,若相同则继续登入动作; 若不相同, 则出现警告信息, 且离开登入的动作。这是客户端的自我保护功能, 避免服务器是被别人伪装的
还有就是你的服务器重新安装了,那么服务器的公钥肯定经常不同,那样的话也会出现公钥不同而无法继续登入的情况
例如:仿真伺服器重新安装后,假设服务器使用相同的 IP ,造成相同 IP 的服务器公钥不同,产生的问题与解决之道为何?
利用前一小节讲过的方式,删除原有的系统公钥,重新启动 ssh 让你的公钥更新: rm /etc/ssh/ssh_host* /etc/init.d/sshd restart, 接着重新进行联机
ssh root@localhost 就告诉你可能有问题了
Offending key in /root/.ssh/known_hosts:1 <==冒号后面接的数字就是有问题数据行号,表示此文件中的第一行的公钥与这次接受到的结果不同,很可能被攻击了,那怎么办?
可以使用vim到/root/.ssh/known_hosts , 并将第 1 行(冒号 : 后面接的数字就是了) 删除,之后再重新ssh登录,那么系统就会重新询问你要不要加上公钥了
模拟 FTP 的文件传输方式: sftp,ssh是登入远程服务器进行工作的,那如果想要从远程服务器下载或上传档案呢?那就要使用sftp或scp了,这两个指令是使用ssh的通过port 22
只是模拟成FTP与复制的动作而已,sftp指令用法与ssh相似,只是ssh是用在登入而sftp在上传/下载文件而已,执行sftp student@localhost
student@localhost's password: <== 接者会提示你请输入密码
sftp> exit <== 这里就是在等待你输入 ftp 相关指令的地方了! 进入到ftp之后,那就跟在一般FTP模式下的操作方法没有两样了,
sftp这个接口下的使用指令:
针对远方服务器主机 (Server) 之行为,切换目录 cd 列出文件 ls dir 建立删除目录rmdir 显示目前所在目录pwd 更改目录群组或拥有者chgrp chown chmod .......
针对本机 (Client) 之行为(都加上 l, L 的小写 ) lcd PATH lls lmkdir lpwd......
针对资料上传/下载的行为
(1) 将档案由本机上传到远程主机 put[本机目录或档案] [远程]
put [本机目录或档案] 如果是这种格式,则档案会放置到目前远程主机的目录下
(2) 将档案由远程主机下载回来 get [远程主机目录或档案] [本机]
get [远程主机目录或档案] 则档案会放置在目前本机所在的目录当中!可以使用通配符例如:get *.rpm
sftp在linux底下,如果不考虑图形接口,那么他已经可以取代FTP了,因为所有的功能都已经涵盖了,可以直接关掉FTP的服务了
如果你还是不喜欢使用文字接口进行FTP的传输,可以透过图形接口来连接到sftp-server了,利用Filezilla来进行联机,如此一来,与服务器之间的文件传输就方便多了
档案异地直接复制: scp 当使用sftp是因为不知道服务器上面有什么档名的档案存在,如果已经知道服务器上的档案档名了,那么简单的文件传输可以透过scp这个指令了
scp [-pr] [-l 速率] file [账号@]主机:目录名 <==上传
scp [-pr] [-l 速率] [账号@]主机:file 目录名 <==下载
选项与参数:
-p :保留原本档案的权限数据;
-r :复制来源为目录时,可以复制整个目录 (含子目录)
-l :可以限制传输的速度,单位为 Kbits/s ,例如 [-l 800] 代表传输速限100Kbytes/s
# 1. 将本机的 /etc/hosts* 全部复制到 127.0.0.1 上面的 student 家目录内 scp /etc/hosts* [email protected]:~
# 2. 将 127.0.0.1 这部远程主机的 /etc/bashrc 复制到本机的 /tmp 底下 scp [email protected]:/etc/bashrc /tmp
上面上传或下载的重点就是那个冒号,连接在冒号后面的就是远程主机的档案,因此,如果冒号在前,代表的就是从远程主机下载下来,如果冒号在后,则代表本机数据上传啦
复制目录的话,那么可以加上-r 的选项
# 3. 限制传输的速度, 先使用 dd 来建立一个大档案: dd if=/dev/zero of=/root/dd_10mb_file bs=1M count=10
建立妥当之后,由于是上传数据,观察-l的选项中,那个速率用的是bit,转成容量的bytes需要乘上8倍,因此指令如下:scp -l 800 /root/dd_10mb_file [email protected]:/tmp
ssh 客户端联机程序 - Windows 用户,与linux不同,预设的Windows并没有ssh的客户端程序,因此所有的程序都得要下载其他的第三方软件才行
常见的软件主要有pietty,psftp及filezilla
直接联机的 pietty
putty 官方网站: http://www.chiark.greenend.org.uk/~sgtatham/putty/
pietty 官方网站:http://www.csie.ntu.edu.tw/~piaip/pietty/
putty官网上有很多软件可以使用的,包括putty/pscp/psftp 等等,分别对应了ssh/scp/sftp 这三个指令,由于pietty除了完整的兼容于putty之外
还提供了选单与较为完整的文字编码.当双击执行软件时,请在使用界面上选择【选单列】,让之后的操作可以通过选单来随时调整类似字体,字型,字符编码等等
的重要环境参数,尤其是字符编码的问题,当出现编码问题的时候,需要牢记下面的三个跟语系编码有关的数据要相同才行
1 文本文件本身在存档时所挑选的语系;
2 Linux 程序 (如 bash 软件) 本身所使用的语系 (可用 LANG 变量调整);
3 pietty 所使用的语系。
Linux本身的编码可以透过LANG这个变量来调整,而pietty的中文编码则是在选单列当中的【选项】中的【字符编码】来处理的
而如果想要处理更为细部的设定时,可以选择【项目】中的【详细设定】,例如包含【键盘右侧的数字键想要生效】,滚动条记忆行数,数据太多时会用得到
还可以选择使用哪一个版本的SSH算法登入,预设是version2来登入的,可以修改. 这些修改内容的设定值都记录在Windows的登录文件当中
你可以在Windows的系统当中,在『开始』-->『执行』后,出现的框框内输入『regedit』,请在左边的画面当中选择 HKEY_CURRENT_USER --> Software --> SimonTatham
--> PuTTY --> Sessions 就可以看到你的设定值
使用 sftp-server 的功能: psftp,这一支程序的重点则在使用sftp-server,使用的方式可以直接点选 psftp 这个档案 ,让他直接启动,
这个时候可以填入你要连接上去的主机名
psftp> open 192.168.100.254
图形化接口的 sftp 客户端软件: Filezilla是图形接口的一个FTP客户端软件,使用上方便,详细的安装与使用流程请参考vsftpd的说明
sshd 服务器细部设定,sshd服务器的设定都放在/etc/ssh/sshd_config里面,在预设的档案内,只要是预设有出现且被批注的设定值(设定值前面加 #),即为『默认值!』
你可以依据它来修改:
vim /etc/ssh/.sshd_config
# Port 22, SSH预设使用22这个port,也可以使用多个port,即重复使用port这个设定项目,例如想要开放sshd在22与443,则多加一行内容为:Port 443,重新启动sshd就好
不过不建议修改port number
Protocol 2 选择的SSH的协议版本,可以是1也可以是2 ,预设为2 ,如果想要支持旧版 V1 ,就得要使用『 Protocol 2,1 』才行
# ListenAddress 0.0.0.0,监听的主机适配器,例如,你有两个IP 192.168.1.100 及 192.168.100.254,假设你只想要让192.168.1.100 可以监听 sshd
那就这样写: 『 ListenAddress 192.168.1.100 』默认值是监听所有接口的 SSH 要求
# PidFile /var/run/sshd.pid 可以放置sshd这个PID的档案!此设置为默认值
# LoginGraceTime 2m 当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中,在多久时间内没有成功连上 SSH server 就强迫断线,无单位则默认时间为妙
# Compression delayed 指定何时开始使用压缩数据模式进行传输,有 yes, no 与登入后才将数据压缩 (delayed)
# 2. 说明主机的 Private Key 放置的档案,预设使用下面的档案即可!
# HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私钥
# HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥
# HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥
# 3. 关于登录文件的讯息数据放置与 daemon 的名称! SyslogFacility AUTHPRIV # 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录在,
预设是以 AUTH 来设定的,即是 /var/log/secure 里面
# LogLevel INFO 登录记录的等级
4. 安全设定项目!极重要!PermitRootLogin yes(是否允许root登入,预设是允许的,但是建议设定成no)
# StrictModes yes 是否让 sshd 去检查用户家目录或相关档案的权限数据,这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
# PubkeyAuthentication yes # 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# AuthorizedKeysFile .ssh/authorized_keys 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
PasswordAuthentication yes # 密码验证当然是需要的!所以这里写 yes 啰!
# PermitEmptyPasswords no 若上面那一项如果设定为 yes 的话,这一项就最好设定为 no,这个项目在是否允许以空的密码登入!当然不许
4.2 认证部分
# RhostsAuthentication no 本机系统不使用 .rhosts,因为仅使用 .rhosts太不安全了,所以这里一定要设定为 no
IgnoreRhosts yes # 是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是!
# RhostsRSAAuthentication no # 这个选项是专门给 version 1 用的,使用 rhosts 档案在 /etc/hosts.equiv # 配合 RSA 演算方式来进行认证!不要使用啊!
# HostbasedAuthentication no 这个项目与上面的项目类似,不过是给 version 2 使用的
# IgnoreUserKnownHosts no 是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录的主机内容,当然不要忽略,所以这里就是 no
# ChallengeResponseAuthentication no # 允许任何的密码认证!所以,任何 login.conf 规定的认证方式,均可适用,但目前我们比较喜欢使用 PAM 模块帮忙管理认证,因此这
个选项可以设定为 no
UsePAM yes 利用 PAM 管理使用者认证有很多好处,可以记录与管理, 所以这里我们建议你使用 UsePAM 且 ChallengeResponseAuthentication 设定为 no
# 4.3 与 Kerberos 有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定
# KerberosAuthentication no
# KerberosOrLocalPasswd yes
# KerberosTicketCleanup yes
# KerberosTgtPassing no
# 4.4 底下是有关在 X-Window 底下使用的相关设定!
X11Forwarding yes # X11DisplayOffset 10 # X11UseLocalhost yes 比较重要的是 X11Forwarding 项目,他可以让窗口的数据透过 ssh 信道来传送
4.5 登入后的项目
# PrintMotd yes 登入后是否显示出一些信息呢?例如上次登入的时间、地点等等,预设是 yes,亦即是打印出 /etc/motd 这个档案的内容。如果为了安全,可以考虑改为 no
# PrintLastLog yes 显示上次登入的信息!可以啊!预设也是 yes
# TCPKeepAlive yes # 当达成联机后,服务器会一直传送 TCP 封包给客户端藉以判断对方式否一直存在联机。# 不过,如果联机时中间的路由器暂时停止服务几秒钟,也会让
联机中断喔!# 在这个情况下,任何一端死掉后,SSH可以立刻知道!而不会有僵尸程序的发生! # 但如果你的网络或路由器常常不稳定,那么可以设定为 no 的啦
UsePrivilegeSeparation yes 是否权限较低的程序来提供用户操作。我们知道 sshd 启动在 port 22 因此启动的程序是属于 root 的身份。那么当 student 登入后,这个设定值
# 会让 sshd 产生一个属于 sutdent 的 sshd 程序来使用,对系统较安全
MaxStartups 10 同时允许几个尚未登入的联机画面?当我们连上 SSH ,但是尚未输入密码时,这个时候就是我们所谓的联机画面啦!在这个联机画面中,为了保护主机
所以需要设定最大值,预设最多十个联机画面,而已经建立联机的不计算在这十个当中
# 4.6 关于用户抵挡的设定项目:
DenyUsers * # 设定受抵挡的使用者名称,如果是全部的使用者,那就是全部挡吧! # 若是部分使用者,可以将该账号填入!例如下列! DenyUsers test DenyGroups test
与 DenyUsers 相同!仅抵挡几个群组而已!
# 5. 关于 SFTP 服务与其他的设定项目!
Subsystem sftp /usr/lib/ssh/sftp-server
# UseDNS yes # 一般来说,为了要判断客户端来源是正常合法的,因此会使用 DNS 去反查客户端的主机名,不过如果是在内网互连,这项目设定为 no 会让联机达成速度较快
基本上CentOS预设的sshd服务已经算是挺安全的了,不过有两点不够,(1)将 root 的登入权限取消;(2)将 ssh 版本设定为 2,其他的设定通常不建议进行随便修改啦
如果你修改了上面的/etc/ssh/sshd_config档案的话,那么必须重新启动一次sshd这个daemon才行,亦即/etc/init.d/sshd restart
制作不用密码可立即登录的ssh用户
当scp的命令放置于crontab服务中,让我们的系统透过scp直接在背景底下自行定期的进行网络复制与备份,预设是不允许此操作的,因为scp执行时需要输入密码才行
但crontab没有终端接口输入密码,所以该程序会一直卡住而无法再crontab内执行成功,此时我们可以通过密钥认证系统来处理的,我们可以将Client产生的key给他拷贝到
Server当中,所以以后client登陆Server时,由于两者在SSH要联机的讯号传递中,就已经比对过key了,因此可以立即进入数据传输接口中,而不需要再输入密码,实际步骤:
1.客户端建立两把钥匙,私钥比较重要,这两把钥匙当然得在发起联机的客户端建制才对,利用的指令为ssh-keygen这个命令
2.客户端放置好私钥档案,将private key放在client上面的家目录,亦即$HOME/.ssh/,并且注意权限
3.蒋公钥放置服务器端的正确目录与文件名去,最后,将那把public key放在任何一个你想要用来登入的服务器端的某user的家目录内之.ssh/里面的,认证档案即可完成了
例如:Server 部分为 www.centos.vbird 这部 192.168.100.254 的主机,欲使用的账号为 dmtsai ;
Client 部分为 clientlinux.centos.vbird 这部 192.168.100.10 的 vbirdtsai 这个账号,该账号要用来登入 192.168.100.254 这部主机的 dmtsai 账号。
建立方法,在 clientlinux.centos.vbird 这部主机上面以 vbirdtsai 的身份来建立两把钥匙即可,不过,我们有多种密码算法,如果不指定特殊的算法,则默认以RSA算法来处理
ssh-keygen [-t rsa|dsa] <==可选 rsa 或 dsa
ssh-keygen <==用预设的方法建立密钥
Created directory '/home/vbirdtsai/.ssh'. <==此目录若不存在则会主动建立
我的身份是vbirdtsai,所以当我执行ssh-keygen时,才会在我的家目录底下的.ssh/这个目录里面产生所需要的两把key,分别是私钥 (id_rsa) 与公钥 (id_rsa.pub)
/.ssh/这个目录必须要是700的权限才行,另外一个要特别注意的就是那个id_rsa 的档案权限,必须要是600,且属于vbirdtsai自己才行,否则在未来密钥比对的过程中
可能会判定为危险而无法成功的以公私钥成对档案的机制来达成联机的,其实,建立私钥后预设的权限与文件名放置位置都是正确的,你只要检查过没问题即可
接着将公钥档案数据上传到服务器上,因为我们要登入 www.centos.vbird 是以 dmtsai 的身份,因此我们就要将上个步骤建立的公钥(id_rsa.pub) 上传到服务器上的 dmtsai 用
户才行,最简单的方法就是使用scp啦 scp ~/.ssh/id_rsa.pub [email protected]:~ 上传到dmtsai的家目录底下即可
将公钥放置服务器端的正确目录与文件名:在sshd_config文件里面谈到AuthorizedKeysFile这个设定值,该设定值就是在指定公钥数据应该要放置的文件名啊,所以,我们
必须要到服务器端的dmtsai这个用户身份下,将刚刚上传的id_rsa.pub数据附加到authorized_keys 这个档案内才行
# 1. 建立 ~/.ssh 档案,注意权限需要为 700 由于可能是新建的用户,因此这个目录不存在。不存在才作底下建立目录的行为
mkdir .ssh; chmod 700 .ssh 规则设定中,务必是700且属于使用者本人的账号与群组才行 , 将公钥档案内的数据使用cat转存到authorized_keys 内
cat id_rsa.pub >> .ssh/authorized_keys
chmod 644 .ssh/authorized_keys 这个档案的权限设定中,就得要是644才可以,这样就搞定密钥系统了,以后你从clientlinux.centos.vbird 的 vbirdtsai 登入到
www.centos.vbird 的 dmtsai 用户时,就不需要任何的密码了,
例题:,请在 clientlinux 的 vbirdtsai 身份中,将系统的 /etc/hosts* 档案复制给 www.centos.vbird 的 dmtsai 用户的家目录。
scp /etc/hosts* [email protected]:~, 此时原本会出现的那个密码提示数据不会出现了
ssh [email protected] "ls -l" 登陆上去确实有复制到对方去了,有显示出正确的远程数据了,这样一来,使用ssh相关的客户端指令可以不需要密码的手续了
无论如何,在建立密码系统的步骤中你要记得的是:Client必须制作出public & private 这两把keys,且private要放到~/ .ssh/ 内;
Server必须要有public key ,且放置到用户家目录下的~/.ssh/authorized_keys,同时目录的权限 (.ssh/) 必须是 700 而档案权限则必须为 644,同时档案的拥有者与群组都
必须与该账号吻合才行 ,未来,当你还想要登入其他的主机时,只要将你的public key(就是 id_rsa.pub 这个档案)给他拷贝到其他主机上面去,并且新增到某账号的
~/.ssh/authorized_keys 这个档案中,这样就成功了
简易安全设定:其实ssh并不是怎么安全的,sshd之所谓的【安全】其实指的是【sshd 的数据是加密过的,所以他的数据在 Internet 上面传递时是比较安全的。至于 sshd 这
个服务本身就不是那样安全了】,所以非必要,不要将sshd对Internet开放可登入的权限,尽量局限在几个小范围内的IP或主机名即可
关于sshd安全的设定方面,可以由地下三个方面来进行:
1. 服务器软件本身的设定强化:/etc/ssh/sshd_config 默认的设定其实已经很完备了,可以修正一些小问题,禁止root登入,禁止某个群组的用户登入,禁止某个用户登入
例如:系统里面有sshnot1, sshnot2, sshnot3 加入 nossh 群组,同时系统还有 testssh, student 等账号
for user in sshnot1 sshnot2 sshnot3 testssh student;
do
id $user | cut -d ' ' -f1-3 ;
done
修改 sshd_config 并且重新启动 sshd
PermitRootLogin no <==约在第 39 行,请拿掉批注且修改成这样 DenyGroups nossh <==底下这两行可以加在档案的最后面 DenyUsers testssh /etc/init.d/sshd restart
测试与观察相关的账号登入情况吧! ssh root@localhost <==并请输入正确的密码 tail /var/log/secure你会看到错误信息,而不是密码输入错误而已
ssh sshnot1@localhost <==并请输入正确的密码 tail /var/log/secure 提示 a group is listed in DenyGroups
ssh testssh@localhost <==并请输入正确的密码 tail /var/log/secure 提示 because listed in DenyUsers
不同的登入账号会产生不一样的登入档结果,因此,你老是无法顺利使用ssh登陆某一部主机时,记得到服务器上去检查看看登陆档,说不定就能让你解决问题了
2. TCP wrapper 的使用:/etc/hosts.allow, /etc/hosts.deny
举例来说,你的 sshd 只想让本机以及区网内的主机来源能够登入的话,那就这样作:
vim /etc/hosts.allow
sshd: 127.0.0.1 192.168.1.0/255.255.255.0 192.168.100.0/255.255.255.0
vim /etc/hosts.deny
sshd : ALL
3. iptables 的使用: iptables.rule, iptables.allow 使用iptables时 参考防火墙和NAT服务器内的实际脚本程序,应该在iptables.rule内将port 22的放行功能取消,然后再到
iptables.allow里面新增这行:vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $EXTIF -s 192.168.100.0/24 -p tcp --dport 22 -j ACCEPT
/usr/local/virus/iptables/iptables.rule 最好不要开放SSH的登入权限给所有Internet上面的主机,这很重要,因为如果对方可以ssh进入你的主机,那么就太危险了
最原始图形接口: Xdmcp 服务的启用:如果你的Linux主机主要是用来作为图形处理时,而且同时有多人需要用到这个功能,那么一部Linux是否一次仅能提供一个人处理
那个软件呢?那不一定,因为Linux有相当优秀的X Window System,接着来谈一个图形接口的远程联机服务器
X Window 的 Server/Client 架构与各组件:Linux使用的图形接口即X-window System,且是能够跨平台的,目前Linux上面图形接口软件几乎都是使用这个X的架构来处理
X Window System 在运作的过程中,又因控制的数据不同而分为 X Server 与 X Client 两种程序,虽然说是 X Server/Client , 但是他的作用却与网络主机的server/client架构
有很大的区别:
X Server: 这组程序主要负责的是屏幕画面的绘制与显示,接收X client的数据,将这些数据绘制成画面呈现在屏幕上,此外,我们移动鼠标,点击数据,有键盘输入数据等等
也会透过X server来传达到X client端,而由X client来加以运算出应绘制的数据;
X Client: 这组程序主要负责的是数据的运算。X client在接收到X server传来的数据后(例如移动鼠标、点击 icon 等动作),会经由本身的运算而得到鼠标应该要如何移动
点击的结果要出现什么样的数据,键盘输入的结果应该要如何呈现等等,然后将这些结果告知X server,让他自行去绘制到屏幕上
由于每一支 X client 都是独立存在的程序,因此在图形显示时会出现迭图的问题,每个X client都不承认对方的存在,自己顾自己的在操作,因此,就有了一组特殊的X client
在进行管理所有的其他X client程序,这个总管就是window Manager
Window Manager (WM):是一组控制所有 X client 的管理程序,并且同时提供任务栏,背景桌面,虚拟桌面,窗口大小,窗口移动与重迭显示等任务
Window manager 主要由一些大型的计划案所开发而来,常见的有 GNOME, KDE, XFCE 等
既然 X Window System 是 Linux 上面的一组程序,那么它如何启动的呢?早期的用户在登入系统后,必须要自己先启动 X server 程序,然后再启动个别的 Window manager
若有其他需求,再启动其他额外的X client就是了,所以为了简化启动个人图形接口的步骤,后来还有所谓的Display Manager(DM)这东东
Display Manager (DM):提供使用者登入的画面以让用户可以藉由图形接口登入。使用者登陆时,可透过display manager的功能去呼叫其他的window manager,让用户
在图形接口的登入过程变得更简单,由于DM也是一个等待输入账号密码的图形数据,因此DM会主动去唤醒一个X Server,然后在上头加载等待输入的画面就是了
在目前的Linux中,通常启动图形接口让用户登入的方式中,都是先执行Display Manager程序,该程序会主动加载一个X Server程序,然后再提供一个等待输入账号密码
的接口程序,之后再根据用户的选择去启动所需要的Window Manager程序,最后就由用户直接操作WM来玩图形接口了
例如:预设init 5的情况下,那么最终启动图形接口的是那一只程序
分析 /etc/init/* 当中的档案,会发现有个档案的内容是这样:
cat /etc/init/prefdm.conf
start on stopped rc RUNLEVEL=5
stop on starting rc RUNLEVEL=[!5]
console output
respawn
respawn limit 10 120
exec /etc/X11/prefdm -nodaemon 可以分析/etc/X11/prefdm 的内容,能够发现其实该行启动的就是一个X display manager程序了
登入 init 5 的 CentOS 6.x 之前,先到 tty1 去查阅一下 X server 是由哪一支程序所唤醒的?
我们可以透过 pstree 来观察程序间的相关性,同时注意,预设的CentOs的X server程序名称为Xorg
pstree -p,由输出数据可以看出,gdm-binary 可以唤醒 Xorg,同理我们也会知道提供认证的图形画面应该是由gdm-session 所提供的
X Window System 用在网络上的方式: XDMCP
当 X server, X client 都在同一部主机上面的时候,你可以很轻松的启动一个完整的 X Window System。但是如果想要透过这个机制在网络上面启动X,此时你得先在客户端
启动一个X server 将图形接口绘图所需要的硬件装置配置好,并且启动一个X server 常见的接口端口(通常是 port 6000),然后再由服务器端的X client取得绘制数据,再将
数据绘制成图,这个机制中,你可以在任何一部启动X server登入服务器,而且不管你的操作系统是啥,如此一来,你就可以取得服务器所提供的图形接口环境啦
如果使用最笨的方法在客户端自己启动X server,然后再告诉服务器将X client程序一个一个的加载回来,那就太累人了,我们之前不是提到过可以使用display manager来
管理使用者的登入与启动X吗,那服务器能不能提供一个类似的服务,那我们直接透过服务器的display manager就能够提供我们登入的认证与加载自己选择的window
manager的话,那样就很棒了,那就是透过Xdmcp (X display manager control protocol)
Xdmcp 启动后会在服务器的 udp 177 开始监听,然后当客户端的 X server 联机到服务器的 port 177 之后,我们的 Xdmcp 就会在客户端的 X server 放上用户输入账密的图形接
口程序啰!那你就能透过这个 Xdmcp 去加载服务器所提供的类似 Window Manager 的相关 X client,那你就能够取得图形接口的远程联机服务器
设定 gdm 的 XDMCP 服务
既然是所谓的 Xdmcp 协议,那么意味着与 X display manager 有关,Xdmcp 协议是由 DM 程序所提供的, 我们的 CentOS 预设的 DM 为 GNOME 这个计划所提供的 gdm
因此,你想要启动 Xdmcp 服务,那就得要针对 gdm 这个程序来设定啰,这个 gdm 的设定数据都放置在 /etc/gdm/ 目录下,而我们所要修改的配置文件其实仅是一个
/etc/gdm/custom.conf 档案而已
因为之前配置的是basic server,所以很多图形接口软件并没有被安装起来,在实作Xdmcp之前,先安装图形接口才行!使用 yum groupinstall 来安装
# 先检查看看与 X 相关的软件群组有哪些?
yum grouplist
Desktop, Desktop Platform, X Window System这三个算是比较重要的项目了,得要安装起来,gdm是在Desktop中
yum groupinstall "Desktop" "Desktop Platform" "X Window System" 安装完毕后,现在才能开始搞定 custom.conf
vim /etc/gdm/custom.conf
[security] <==在与资安方面有关的信息,大多指登录相关事宜
AllowRemoteRoot=yes <==xdmcp 预设不许 root 登入,得用这个项目才能以 root 登入
DisallowTCP=false <==这个项目在允许客户端使用 TCP 的方式联机到 xdmcp
[xdmcp] <==就是这个小节的重点之一
Enable=true <==启动 xdmcp 的最重要项目
# 上述特殊字体的部份就是你得要自己新增的内容
init 5 切换到X图形画面,如果确定要使用gdm , runlevel得调整到5才好,果真如此的话,就要调整/etc/inittab的值了
执行netstat -tunlp从结果中看到 port 6000 是由 DisallowTCP=false 项目启动的,port 177 才是我们要的
上述的动作是在5下面启动图形接口的,如果你是在runlevel 3底下并且不希望变更为runlevel 5,此时就要这样启动xdmcp啦:
vim /etc/rc.d/rc.local增加 /usr/sbin/gdm
如果是 runlevel 5 ,因为在 /etc/inittab 就已经有自动启动 gdm 了,但如果你是在 runlevel 3 的话,因为这样 gdm 就不会被系统的启动流程启动,
那你只好自己在 /etc/rc.d/rc.local 里面指定启动他啰!接下来,你得要开放客户端对你的 port 177 联机才行! 请自行修改你的防火墙规则,开放 udp port 177 吧
那你这样作就好了:
vim /usr/local/virus/iptables/iptables.rule
iptables -A INPUT -p UDP -i $EXTIF --dport 177 --sport 1024:65534 -s 192.168.100.0/24 -j ACCEPT #xdmcp 注意喔!特点是使用 UDP 埠口以及加入来源端 IP 网域的管
/usr/local/virus/iptables/iptables.rule
iptables-save | grep 177
-A INPUT -s 192.168.100.0/24 -i eth0 -p udp -m udp --sport 1024:65534 --dport 177 -j ACCEPT
# 确实有开放 port 177 ,而且是 udp 的埠口喔!要注意这两个项目
用户系统为 Linux 的登入方式
由于Linux本身的窗口就是由X server提供来的,因此使用Linux登入远程的图形服务器是很简单的,但是因为启动X的方式不同而已,数种启动方式,两个常见的启动方式:
在不同的 X 环境下启动联机: 直接用 X
如果你的客户端已经在 runlevel 5 了,因此其实你已经有一个 X 窗口的环境,这个环境的显示终端机就称为『 :0 』。
在 CentOS 6.x 的环境中,如果原本就是 runlevel 5 的环境,那么这个图形接口的 :0 是在 tty1 终端机啦
如果是由 runlevel 3 启动图形接口,那就是在 tty7,由于已经有一个 X 了,因此你必须要在另外的终端机启动另一个 X 才行!那个新的 X 就称为 :1 接口,其实通常就在 tty7 或
tty8 啦!但因为 X server 要接受 X client 必须要有授权才行,所以你得先在窗口接口开放接受来自服务器的 X client 数据
虽然你在客户端是以主动的方式连接到服务器的 udp port 177,但是服务器的 X client 却会主动的连接到你客户端的 X server,因此,你必须要开放来自服务器端主动对你的
TCP port 6001 (因为是 :1 接口) 的防火墙联机才行喔,那就来实做看看
# 1. 放行 X client 传来的资料:在 X Window 的画面当中启用 shell 输入:
xhost + 192.168.100.254
192.168.100.254 being added to access control list # 注意!你是客户端!且假设我刚刚那部 Linux 主机的 IP 为 192.168.100.254
# 2. 开始放行防火墙,因为我们启动 port 6001 ,所以你在客户端这样作:
vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -s 192.168.100.0/24 -p tcp --dport 6001 -j ACCEPT
/usr/local/virus/iptables/iptables.rule
iptables-save
-A INPUT -s 192.168.100.0/24 -p tcp -m tcp --dport 6001 -j ACCEPT # 要能看到上面这一行才行
# 3. 在文字接口 (例如 tty1) 下输入如下的指令:
[root@clientlinux ~]# X -query 192.168.100.254 :1# 进入 X Window 啰!
在上图中输入正确的账号与密码之后,你在 tty8 (:1) 就会有个窗口接口啰!那你如果想要回到本机的窗口接口, 就回到 tty7 (:0) 即可切换成功!(在 runlevel 5 时,:0 在 tty1 ,
而 :1 在 tty7 喔!) 那想要关闭 tty8 该如何是好?你不能够在 tty8 注销啦,因为注销后,系统会重新开一个等待登入的画面,你还是没办法关闭,你得要回到刚刚启动X的tty1
然后按下[ctrl]-c 中断联机即
在同一个 X 底下启动另一个 X: 使用 Xnest
如果常常在 tty7, tty8 切换来去的话,偶而会忘记到底在哪个界面了,尤其是当你的桌面都一模一样时, 那就更难判断了。有没有办法直接在 tty7 启动另一个窗口来加载远程
服务器的图形接口呢?可以的,那就透过 Xnest 吧,这指令需要在 X 的环境下使用喔
Xnest -query 主机名 -geometry 分辨率 :1
选项与参数: -query :后面接 xdmcp 服务器的主机名或 IP 啰
-geometry :后面接画面的分辨率,例如 1024x768 或 800x600 等之类的分辨率
如果一切顺利的话,那你就会在 tty7 的本机 X 环境下看到如下的画面 (底下的画面是已经登入的情况!) 要关闭这个 X 就简单多了!直接按下关闭,或者是中断那个 Xnest 的程
序即可
用户系统为Windows的登入方式:Xming: 由于 Windows 本身并没有提供预设的 X server ,因此我们得要自行安装 X server 在 Windows 上面才行
目前常见的 X server 有底下这几个:X-Win32 , Exceed , Xming 其中 X-Win32 与 Exceed 都属于商业软件,而 Xming 则属于轻量级的自由软件,
Xming 作为范例来介绍的
安装:你可以使用预设的方法,一直下一步的安装下去,就能够顺利的安装好 Xming 这套 X server 的软件啰
启动:请在『开始』-->『程序集』-->『Xming』-->『XLaunch』开启设定联机到 xdmcp 的方式,底下我们会使用区网内的广播 (broadcast) 来找到 xdmcp 服务器的方式
启动 XLaunch 记得上面的图示要选择 One window 或 Fullscreen 或 One window without titlebar 才能够使用 XDMCP 喔,选择完毕后按『下一步』
上述的图示当中共有三种传递 X client 的方法,在这个小节当中我们要连到 xdmcp ,所以你得要选择第三个喔
这里当然就是连接到你想要连上去的 xdmcp 服务器啰,将他的 IP 填上去,给它按下『完成』之后,你就能够开始在 Windows 底下连上图形接口的 Linux Server
重点在 Server 与 Client 的防火墙上,XDMCP无论是Server还是Client的设定上面都很简单,有时会发现明明做完了,但是就是没有办法连上Xdmcp服务器,最容易
发生错误的其实就是防火墙,虽然我们的客户端启动X server 后,会主动联机到服务器的Xdmcp(port 177),但是,接下来却是服务器主动联机到我们客户端的X server
(可能是 port 6000~6010)。因此,如果你只是设定了服务器的防火墙而已,那么很可能出现问题的应该就是客户端的防火墙忘记打开提供服务器主动联机的规则
华丽的图形接口: VNC 服务器 ,之前使用xdmcp可能会启动多个不同的端口,导致防火墙设定比较困难,而VNC就比较简单了,
预设的 VNC 服务器:使用 twm window manager:VNC server会在服务器端启动一个监听用户要求的端口,一般端口号码是在5901 ~ 5910 之间,当客户端启动X server
联机到5901之后,VNC server再将一堆预先设定好的X client透过这个联机传递到客户端上,最终能够在客户端显示服务器的图形端口了。
预设的VNC server都是提供给【单一】一个客户端来联机的,因此当使用VNC时,再联机到服务器去启动VNC server即可,所以,一般来说VNC server都是手动启动的
然后使用完毕后,再将VNC server关闭即可,
vncserver [:号码] [-geometry 分辨率] [options]
vncserver [-kill :号码]
选项与参数:号码:就是VNC server开在那个端口,如果是:1代表VNC 5901端口
-geometry :就是分辨率,例如 1024x768 或 800x600 之类的
options :其他 X 相关的选项,例如 -query localhost 之类的
-kill :将已经启动的 VNC 埠口删除!依据身份控制喔。
yum install tigervnc-server 这个是必须要的服务器软件,注意软件的名称 将 VNC server 启动在 5903 埠口 vncserver :3
Password: <==输入 VNC 的联机密码,这是建立 VNC 时所需要的
Verify: <==再输入一次相同的密码
netstat -tulnp | grep X 可以看到已经启动了端口了,1. 密码至少需要六个字符,2.依据使用 vncserver 的身份,将刚刚建立的密码放置于该账号家目录下,例如身份是root
因此密码文件会放在/root/.vnc/passwd这个档案中,但是若该档案已经存在,则不会出现建立密码的画面 3.当客户端联机成功后,服务器将会传送/root/.vnc/startx内的
Xclient给客户端,使用vncpasswd修改VNC密码,vncpasswd
最后就是开发5903这个端口的联机防火墙规则,因为预计可能会开放11个VNC的端口,所以干脆一口气开放11个端口
vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -s 192.168.100.0/24 -p tcp --dport 5900:5910 -j ACCEPT
/usr/local/virus/iptables/iptables.rule
iptables-save
-A INPUT -s 192.168.100.0/24 -i eth0 -p tcp -m tcp --dport 5900:5910 -j ACCEPT # 要看得到这行才 OK
VNC 的客户端联机软件:与xdmcp很类似,VNC客户端在Linux系统上面有默认的软件,但是在windows上面必须要有额外的软件,Linux客户端程序:vncviewer
用在 Linux 客户端的 VNC 程序,那就是 vncviewer,只是,这个软件默认没有安装,yum install tigervnc,接着开始在客户端的图形接口执行vncviewer 192.168.10.254:3
这个指令一定要在图形接口上面执行才行,输入刚刚的root的VNC联机密码,VNC联机密码不同于root的密码,由于启动VNC的身份是root,因此才使用root的VNC联机
所以很多时刻,我们建议用一般身份来启动VNC server的,与以前的 VNC server 较大的差异,在 CentOS 6.x 当中,tigervnc-server 这套软件会主动的依据服务器端的图形接
口登入方式给予正确的图形显示接口,而不是以前那样给一个丑丑的 twm 而已,这样我们就可以减少修改一些有的没有的配置文件,接者使用window联机到服务器5903端口
Windows 客户端程序: realvnc
http://www.realvnc.com/download.html下载VNC的客户端软件,直接执行 vnc-viewer 软件,在弹出框中输入IP和port的数据,由于 VNC server 需要的仅是联机的 VNC 密码
而已,因此上图中的 Username 可以不用填,老实说,这个程序它也不会让你填,最后点击OK
VNC 搭配本机的 Xdmcp 画面
使用VNC来搭配xdmcp的输出时,那就直接在服务器通过底下的指令来处理,注意,必须要已经启动了xdmcp了,而且底下使用student的身份来启动这个VNC吧
# 1. 要确定 xdmcp 已经启动了才可以:netstat -tlunp | grep 177
# 2. 切换成 student,并且启动 VNC server 在 :5==> su - student vncserver :5 -query localhost 输入密码
# 3. 取消 xstartup 的启动内容 vim /home/student/.vnc/xstartup 将这个档案的内容,全部都加上#号批注掉
# 4. 重新启动 vncserver 执行vncserver -kill :5 vncserver :5 -query localhost
接下来请使用 root 的身份加入 5905 的端口口防火墙规则,然后自行使用Linux的vncview或windows的RealVNC来联机,你就会看到画面了
这只VNC的联机程序是student身份,但是我们却可以通过xdmcp的登入功能来登入root身份,因为在服务器上面的Xvnc程序时student拥有,这样比较好
开机就启动 VNC server 的方法,你不要将 vncserver 的指令写入在 /etc/rc.d/rc.local 中,否则可能会产生localhost无法登入的问题,可以通过修改配置文件,使用student
的身份启动VNC server,而启动的方式为使用xdmcp登入画面,启动的端口在5901,可以这样写
vim /etc/sysconfig/vncservers
VNCSERVERS="1:student"
VNCSERVERARGS[1]="-query localhost"
上述两行的 1 指的就是那个埠口 5901 喔!
/etc/init.d/vncserver restart
chkconfig vncserver on 这样每次开机就搞定你的 VNC server,而且无需登入执行指令
同步的 VNC :可以透过图示同步教学
我的VNC服务器的server / client端画面并不是同步的,这是因为Linux本身提供多个VNC server,他们是各自独立的,所以当然就不会与tty7的画面同步了,但是你如果想要
与Linux的tty同步的话,可以利用VNC释出的给X server使用的模块来加以设定即可,这样的好处就是可以让两个图形接口在server/client 都是一样的,详细的做法如下:
参考的链接 http://phorum.study-area.org/viewtopic.php?t=25713
在 CentOS 6.x 当中并没有 xorg.conf 这个配置文件,所以,如果你要使用这些数据的话, 恐怕得要自行使用 X -configure 去建置xorg.conf 后,再挪到 /etc/X11/ 去,然后
才改的到设定!
yum install tigervnc-server-module
vim /etc/X11/xorg.conf # 假设你的 vnc 密码档案放置在 /home/student/.vnc/passwd 里头, # 这个时候就得要将密码文件内容写到 Screen 这个 section 当中了
init 3 ; init 5 netstat -tlunp | grep X 注意看喔!这几个 port 启动的 PID 都一样喔!所以会启动一个 port 5900
之后你可以使用『 vncviewer 192.168.100.254 』来联机即可,不需要加上 :0 之类的埠口,接着可以发现画面是同步的了,
只不过这个动作还是只允许一条 VNC 联机,不能让所有客户端都连到 port 5900
仿真的远程桌面系统: XRDP 服务器
使用上面的图形接口的联机服务器都有一个问题,除了联机机制的不同之外,上头的 Xdmcp 与 VNC 原则上,资料都没有加密,适合局域网内运作,你如果真的想要透过
加密的方式运作VNC,那么可能得需要透过下一小节的介绍才能够有好的处理结果,我们知道Windows的远程桌面其实是具有联机加密功能的,所以,在Linux上面装一个
RDP server,那就是RDP服务器
Linux本身并没有提供XRDP的服务器,可以自行下载和编译 http://download.fedora.redhat.com/pub/epel/
可以使用yum配置他,就可以使用yum安装了 vim /etc/yum.repos.d/fedora_epel.repo
name=CentOS-$releasever - Epel
baseurl=http://download.fedora.redhat.com/pub/epel/6/x86_64/
gpgcheck=0
enabled=1
yum clean all
yum install xrdp 安装好后就可以开始设定了,不需要改配置文件,立刻启动它,并且设定开机后启动,未来只要用远程联机到这部主机,系统就会启动5910~5920 以上的
VNC 埠口,然后你就能够透过 RDP 的协议取得 VNC 的画面,最后就能够登入系统
/etc/init.d/xrdp start chkconfig xrdp on netstat | grep xrdp远程桌面的端口是3389,但是xrdp会再连到本机的3350去唤醒一个VNC的联机,但是尚未联机之前
并不会启动任何的VNC端口
如果你是使用 Windows 系统,那么透过『开始』-->『程序集』-->『附属应用程序』-->『远程桌面联机』, 在出现的画面中输入这部 xrdp 服务器的 IP 之后,如果顺利连上就
会出现如下的画面:输入正确的账号密码,嘿嘿!搞定!画面就出现,如果想要进一步了解,请到/etc/xrdp/ 目录底下瞧瞧,,然后再透过 man 去看看相关的配置文件信息,就
能够理解设定值,不过你要注意的是,因为 xrdp 最终会自动启用 VNC,因此你还是必须要安装 tigervnc-server 才行!否则 xrdp 应该还是无法运作的!
SSH 服务器的进阶应用:事实上ssh真的好用,你甚至不需要启动甚么 xdmcp, vnc, xrdp 等等服务,使用 ssh 的加密通道就能够在客户端启动图形接口
此外,我们知道很多服务都是没有加密的,那么能不能将这些服务透过 ssh 通道来加密,
启动 ssh 在非正规埠口 (非 port 22) 因为sshd这个服务并不是很安全,所以很多ISP在入口处就已经将port 22关闭了,这是因为很多网站管理员并没有定期的进行软件 update
而且为了方便,又很决心的将port 22对全世界开放,由于很多 cracker 会使用扫描程序乱扫整个 Internet 的埠口漏洞,这个 port 22 就是一个很常被扫描的端口
为了杜绝这个问题,所以 ISP 先帮你把关,先将 port 22 关闭!这也是为了整个区网好
其实我们可以将ssh开放在非正规的端口,如此一来cracker不会扫描到该端口,而你的ISP又没有对该端口进行限制,那么就能够使用ssh,例如你将ssh开放在port 22
及,底下就以ssh开放在port 22及port 23试试看,请注意port 23不能够有已被使用过
vim /etc/ssh/sshd_config
Port 22
Port 23 <==注意喔!要有两个 Port 的设定才行!
/etc/init.d/sshd restart,但是这个版本却将SSH规范仅能启动于22而已,所以此时会出现一个 SELinux 的错误,没关系, 根据 setroubleshoot 的提示,我们必须要自行定义一
个 SELinux 的规则放行模块才行,整体流程是这样的:
# 1. 于 /var/log/audit/audit.log 找出与 ssh 有关的 AVC 信息,并转为本地模块
cat /var/log/audit/audit.log | grep AVC | grep ssh | audit2allow -m sshlocal > sshlocal.te <==扩展名要是 .te 才行
grep sshd_t /var/log/audit/audit.log | audit2allow -M sshlocal <==sshlocal 就是刚刚建立的 .te 檔名
semodule -i sshlocal.pp <==这个指令会编译出这个重要的 .pp 模块!
# 2. 将这个模块加载系统的 SELinux 管理当中! semodule -i sshlocal.pp
# 3. 再重新启动 sshd 并且观察埠口吧 etc/init.d/sshd restart netstat -tlunp | grep ssh 这样你就能够使用 port 22 或 port 23 联机到你的 sshd 服务了
非正规埠口的联机方式
由于预设的 ssh, scp, sftp 都是连接到 port 22 的,那么如何使用这些指令联机到 port 23 呢?
ssh -p 23 root@localhost
netstat -tnp | grep 23 # 因为网络是双向的,因此自己连自己 (localhost),就会抓到两只联机!这样你就能避过一些ISP后者cracker的扫描了,不要将端口开放在某些既知
的端口上,例如你开放在port 80的话,那你就没有办法启动正常的 WWW 服务啦
以 rsync 进行同步镜像备份
常用的备份指令,包括 tar, dd, cp 等等,当涉及网络时,就会用到rsync了,rsync是一个异地备援系统的备份指令,因为 rsync 可以达到类似『镜相 (mirror) 』的功能
rsync 最早是想要取代 rcp 这个指令的,因为 rsync 不但传输的速度快,而且他在传输时, 可以比对本地端与远程主机欲复制的档案内容,而仅复制两端有差异的档案而已
,所以传输的时间就相对的降低很多此外, rsync 的传输方式至少可以透过三种方式来运作:
在本机上直接运作,用法就与 cp 几乎一模一样,例如:rsync -av /etc /tmp (将 /etc/ 的数据备份到 /tmp/etc 内)
透过 rsh 或 ssh 的信道在 server / client 之间进行数据传输,例如:rsync -av -e ssh [email protected]:/etc /tmp (将 rsh.server 的 /etc 备份到本地主机的 /tmp 内
直接透过 rsync 提供的服务 (daemon) 来传输,此时 rsync 主机需要启动873 port:
1. 你必须要在 server 端启动 rsync , 看 /etc/xinetd.d/rsync 即可;
2. 你必须编辑 /etc/rsyncd.conf 配置文件;
3. 你必须设定好 client 端联机的密码数据;
4. 在 client 端可以利用:rsync -av user@hostname::/dir/path /local/path
这三种传输方式的差异在于有没有冒号 (:) 而已,本地不需要冒号,够过ssh或rsh时,就需要一个冒号,而透过rsync daemon 的话,就得要两个冒号 (::)
因为本地端处理很简单, 而我们的系统本来就有提供 ssh 的服务,所以,底下直接介绍利用 rsync 透过 ssh 来备份的动作
rsync [-avrlptgoD] [-e ssh] [user@host:/dir] [/local/path]
选项与参数:
-v :观察模式,可以列出更多的信息,包括镜像时的档案档名等;
-q :与 -v 相反,安静模式,略过正常信息,仅显示错误讯息;
-r :递归复制!可以针对『目录』来处理!很重要!
-u :仅更新 (update),若目标档案较新,则保留新档案不会覆盖;
-l :复制链接文件的属性,而非链接的目标源文件内容;
-p :复制时,连同属性 (permission) 也保存不变!
-g :保存源文件的拥有群组;
-o :保存源文件的拥有人;
-D :保存源文件的装置属性 (device)
-t :保存源文件的时间参数;
-I :忽略更新时间 (mtime) 的属性,档案比对上会比较快速;
-z :在数据传输时,加上压缩的参数!
-e :使用的信道协议,例如使用 ssh 通道,则 -e ssh
-a :相当于 -rlptgoD ,所以这个 -a 是最常用的参数了!
# 1. 将 /etc 的数据备份到 /tmp 底下: rsync -av /etc /tmp ll -d /tmp/etc /etc 第一次备份会花比较久的时间,第二次只会备份有差异的档案,因此传输的数据较少
# 2. 利用 student 的身份登入 clientlinux.centos.vbird 将家目录复制到本机 /tmp rsync -av -e ssh [email protected]:~ /tmp
接着输入对方主机的student密码 ll -d /tmp/student 这样就做好备份了 也可以使用script的方式来备份,因为rsync是透过ssh来传输资料的,所以可以针对student
这个家伙来设定免用密码登陆的机制,如此一来以后异地备份就能够自动的以crontab来进行备份了
# 1. 在 clientlinux.centos.vbird 将公钥档复制给 www.centos.vbird 的 root
scp ~/.ssh/id_rsa.pub
# 2. 在 www.centos.vbird 上面用 root 建置好 authorized_keys
ls -ld id_rsa.pub .ssh
cat id_rsa.pub >> ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys
# 3. 在 clientlinux.centos.vbird 上面撰写 script 并测试执行:
mkdir ~/bin ; vim ~/bin/backup_www.sh
#!/bin/bash localdir=/backups
remotedir="/etc /root /home"
remoteip="192.168.100.254"
[ -d ${localdir} ] || mkdir ${localdir}
for dir in ${remotedir}
do
rsync -av -e ssh root@${remoteip}:${dir} ${localdir}
done
chmod 755 ~/bin/backup_www.sh,最后执行~/bin/backup_www.sh
# 4. 建立 crontab 工作 crontab -e 0 2 * * * /home/vbirdtsai/bin/backup_www.sh
透过 ssh 通道加密原本无加密的服务,例如VNC ,ssh这个通道可以加密,而且,我们知道rsync默认已经可以透过ssh通道来进行加密以进行镜像传输,那么其他服务能不能
透过这个ssh进行数据加密来传送信息,可以的,例如VNC
假设服务器上面有启动了 VNC 服务在 port 5901,客户端则使用 vncviewer 要联机到服务器上的 port 5901 就是了。 那现在我们在客户端计算机上面启动一个 5911 的埠口,
然后再透过本地端的 ssh 联机到服务器的 sshd 去,而服务器的 sshd 再去连接服务器的 VNC port 5901
假设服务器端上面的VNC port 5901已经建立好,而客户端没有启动任何的VNC端口,可以通过ssh来进行加密,在客户端下执行
ssh -L 本地埠口:127.0.0.1:远程端口口 [-N] 远程主机
选项与参数:-N :仅启动联机通道,不登入远程 sshd 服务器
本地埠口:就是开启 127.0.0.1 上面一个监听的埠口
远程埠口:指定联机到后面远程主机的 sshd 后,sshd 该连到哪个埠口进行传输
# 1. 在客户端启动所需要的端口口进行的指令
ssh -L 5911:127.0.0.1:5901 -N 192.168.100.254 <==登入远程仅是开启一个监听埠口,所以停止不能动作
# 2. 在客户端在另一个终端机测试看看,这个动作不需要作,只是查阅而已
netstat -tnlp| grep ssh netstat -tnap| grep ssh
在客户端启动 5911 的埠口是 ssh 启动的,同一个 PID 也联机到远程
接下来你就可以在客户端 (192.168.100.10, clientlinux.centos.vbird) 使用『 vncviewer localhost:5911 』来联机, 但是该联机却会连到 www.centos.vbird
(192.168.100.254) 那部主机的 port 5901 喔
# 3. 在服务器端测试看看,这个动作不需要作,只是查阅而已
netstat -tnp | grep ssh
明显的看到 port 22 的程序同时联机到 port 5901 ,如何取消联机,先关闭VNC之后,然后再将clientlinux.centos.vbird 的第一个动作 (ssh -L ...) 按下 [ctrl]-c 就中断加密通道
以 ssh 信道配合 X server 传递图形接口
利用ssh将我所需要的服务器上面的图形接口给传过来,用一个 Windows 上面的 Xming X server 作范例好了
启动 Xming 程序,会取得一个 xterm 程序,该程序是 www.centos.vbird 的程序;开始在 xterm 上面执行 X 软件,就会在 Windows 桌面上面显示 , 启动 XLaunch
选择 Multiple windows 会比较漂亮
我们要启动一只程序,并且是开放在 ssh/putty 之类的软件帮忙进行 ssh 信道的,Xming 会主动的启动一个 putty 的程序帮你连进 sshd 服务器
所以这里得要帮忙设定好账号密码的相关信息。 假设你的 sshd 尚未取消 root 登入,因此这里使用 root 的权限
Windows 桌面出现的 X client 程序,上面这只程序就是 xterm 这个 X 的终端机程序,接着输入指令,该指令就会传送到Linux server,然后再将你要执行的图形数据透过
ssh信道传送到目前的Windows上面的Xming,你的 Linux 完全不用启动 VNC, X, xrdp 等服务!只要有sshd 就搞定了
basic server 安装方式并没有帮你安装 xterm,所以,你得要自己安装 xterm 才行,yum install xterm 就安装好,然后上面的动作再重来一次,就可以成功,而底下的图标里面
的相关软件, 也是需要你自己安装