不知道您有没有发现,最近的 Linux 套件中,都将 telnet 的功能自『预设启动』的条件,改为需要由使用者开启的状态?也就是说, Red Hat 在 7.x 版本以后,如果您需要 telnet 的服务,那么你就必须要自行启动他,因为他已经被排除在『预设启动』的服务项目之外了!为什么呢?
这是由于 telnet 本身在传送资料或者是在进行任何工作的时候,都是以『明码』的状态来传送指令,这样一来,当有心人士以 listen 的功能监听你的资料封包时,那么你所传送的资料将会被撷取而遭到窃取了!所以,基本上,那是非常不安全的一种传输资料方式!因此,在最近所释出的 Linux 版本中,例如 Red Hat 7.x 版本,他们的 telnet 服务就已经不再是『预设启动』的功能了!
那如果我们要从远端连线到主机的话,应该怎么办?既然使用 telnet 这种明码的方式行不通的话,那么我们要使用何种方式呢?呵呵,现在有更好的方式来提供喔!那就是使用 openssh 这个套件啦!这个 SSH 的服务,最重要的是可以使用『非明码』的方式来传送你所键入的资料封包,也就是说,你的资料在网路上,即使被监听而遭窃取了,由于 SSH 是一种加密过后的封包,故而即使被窃取了,该资料要经过解密也不是三天两头的事情,所以呢,就可以比较安全的工作啦!此外, SSH 同时也提供配合 PAM 的安全模组,与 TCP Wrappers 的封包限制(也就是 /etc/hosts.allow 与 /etc/hosts.deny 的机制),因此呢,安全性也就比较高一些啰!此外,最便利的一点是,你可以使用 root 的身份经由 ssh 登入你的主机喔!
好了!底下我们就来说一说,要如何将你的 telnet 改成以 ssh 来连接呢?由于 Red Hat 7.x 以后,预设的 ssh 是『开启』的状态,所以你几乎不需要任何设定就可以使用 ssh 啰,那如果是 Red Hat 6.x 以前的系统呢?那也很简单的,你只要安装底下两个套件(假如您安装 Red Hat 6.x 是以完全安装为主)就可以啰!
主机系统的 SSH 建置:
· Red Hat 7.x 系统:
由于 Red Hat 7.x 系统本身就已经开启了 sshd 了,所以你可以直接以 ssh 来连上你的主机啰!不过,如果没有正常开启 SSH 的话,那样要如何启动呢?也是很简单的,你可以这样:
1. 以 『/usr/sbin/setup』程式进入 setup 的话面中;
2. 选择 『System Services』这个项目;
3. 然后向下移动到『 [*] sshd 』,将 [*] 勾选(按下空白键即可);
4. 然后以 tab 按键移动到『 OK 』按下 enter;
这样就设定完开机启动了!然后以底下的方式来启动 ssh 服务:
/etc/rc.d/init.d/sshd start
来启动 sshd 这个服务,要知道有没有正常的启动 ssh 呢?呵呵,只要输入底下的指令:
netstat -a | more
如果一切正常的话,你将会看到类似底下的这一行:
tcp 0 0 *:ssh *:* LISTEN
那就表示 ssh 已经成功的启动了!不过,如果万一你的 Linux 系统并没有安装 ssh 这个服务呢?呵呵!那就安装他吧!其实,ssh 这支服务的主要程式称为 openSSH 啰!然后,如果您想要重先安装 openssh 来提供 ssh 的服务,那么 Red Hat 的网站上随时更新的 Errata 您就不能不去看看!你可以按底下的连结上去 Red Hat 下载属于您系统的最新的 openssh 这个套件!
小红帽的 Errata 网页
然后按下您的 Red Hat 版本,进入后,去寻找 openssh 字眼的套件,那个就是啦!然后按下连结之后,直接找到属于您的系统版本,例如我都是直接捉 i386 的 RPM 档案,然后回来以 root 身份执行:
rpm -ivh openssh*
如果您只是要升级 openssh 的话,那就使用:
rpm -Uvh openssh*
更有甚者,直接以 up2date 来升级,(不过会比较慢一些喔!)
up2date -i openssh
升级成功之后,就可以直接的以上面的方式来启动 ssh 这个服务了!
VBird 的经验在上一次更新 openSSH 套件的时候,那是因为网路上发表了旧的 openssh 可能有些安全方面的问题,所以 VBird 就去更新了,但是没想到更新完成之后 SSH 竟然不会动!当真是吓了一大跳!后来,找了一些档案之后,才发现,原来预设的 PAM 模组的属性搞错了!你可以到 /etc/pam.d 这个目录下去看一下,会发现 sshd 的属性竟然是 600,与其他的档案属性都不同,后来执行了:chmod 644 sshd就 OK 啰!如果你也更新之后发现有这个问题,可以参考看看啰!
· Red Hat 6.x 以前版本的 Linux 启动 ssh 服务:
好了,那么要如何的在 Red Hat 6.x 以前的版本上执行 ssh 这个服务呢?其实也是很简单的,如前所说的, ssh 其实是 openssh 套件的一种,而 openssh 有使用到 openssl 这个资料保密的套件,(其实还有其他的套件需要安装,不过,由于我这里预设条件是您已经用『完整安装』来安装您的 Linux 系统,所以其他的套件应该都已经安装完整了才对!) VBird 不是很建议使用 RPM 来安装 openssh ,因为在 Red Hat 6.x 以前的版本上面安装 openssh 的 RPM 实在是太麻烦了!所以,我们就使用 tarball 的方式来安装吧!
下载 openssl 与 openssh:
到哪里下载呢?直接到他们的网站上去看看相关的讯息吧!到目前为止(2002/01/18),openssh 最新版本为 3.0.2 (2001/12/3 释出),而 openssl 最新则是 0.9.6c (2001/12/21) 这个版本:
openSSH 网站
openSSL 网站
或者您也可以在这里下载 OpenSSH 与 OpenSSL 这两个档案。
安装:
由于 openssh 会使用到 openssl 的资料,所以当然需要先安装 openssl 之后,在安装 openssh 啰:
[root @tsai root]# cd /usr/local/src [root @tsai src]# tar -zxvf /root/openssh-3.0.2p1.tar.gz [root @tsai src]# tar -zxvf /root/openssl-0.9.6c.tar.gz [root @tsai src]# cd openssl-0.9.6c [root @tsai openssl-0.9.6c]# ./config --prefix=./usr/local/openssl 将资料安装在 /usr/local/openssl 这个目录,这样安装的好处是, 往后在移除该套件较为容易!直接移除该目录就好了! ...... [root @tsai openssl-0.9.6c]# make 开始编译啰! [root @tsai openssl-0.9.6c]# make test 测试一下是否正常,应该不会有问题才是! [root @tsai openssl-0.9.6c]# make install 安装到 /usr/local/openssl 中啰!安装好 openssl 之后,他的函式库 马上就自动启动了!然后开始安装 openssh 吧! [root @tsai openssl-0.9.6c]# cd ../openssh-3.0.2p1 [root @tsai openssh-3.0.2p1]# ./configure --prefix=/usr/local/openssh --with-pam --with-tcp-wrappers 注意喔!上面是同一行喔! --with-pam 在加入 PAM 模组的安全防护, 而 --with-tcp-wrappers 则是加入 TCP Wrappers 的安全防护啰! ...... [root @tsai openssh-3.0.2p1]# cd contrib/redhat [root @tsai redhat]# cp sshd.pam /etc/pam.d/sshd 这个步骤在将 PAM 这个安全模组拷贝到 PAM 的预设路径去, 也就是 /etc/pam.d 这个目录啦!另外,特别注意, sshd 这个档案的属性必须为 644 ,而所有人是 root 才行, 否则 ssh 不会动!! [root @tsai redhat]# cd ../.. [root @tsai openssh-3.0.2p1]# make <==编译 [root @tsai openssh-3.0.2p1]# make install
上面这样就安装完毕啦!
启动:
再来就是需要启动 SSH 这个套件了,你应该可以到 /usr/local/openssh 去,进入 /usr/local/openssh/sbin 去执行 sshd 这个档案,也就是:
/usr/local/openssh/sbin/sshd
就完成启动的程序啰!如果不相信的话,那就执行 netstat -a | more 看看有没有 ssh 这个服务吧!
既然启动了 ssh 那么 telnet 自然就不需要继续存在啰!没错,因为 ssh 可以完全取代 telnet 的功能的!所以呢,请:
vi /etc/inetd.conf
找到底下这一行:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
在前面加上一个注解符号『#』就可以啦!然后退出之后,执行:
/etc/rc.d/init.d/inet restart
重新启动 inet 这个服务,然后以 netstat -a | more 看一下,嘿嘿嘿嘿! telnet 的服务就不见了!那我们就可以使用 ssh 来取代啰!
用户端的 SSH 连线软体
Linux sysem:
好了,现在我们知道主机可以使用 ssh 来进行连线的服务,但是怎样在用户端( Client )执行连线的软体呢?哈哈!很简单,如果你是以 Linux 系统来连线的话,那么你应该可以在 /usr/bin 里面找到一个 ssh 的软体,(如果是使用 tarball 的话,那么 ssh 就会在 /usr/local/openssh/bin 里面啰!)你可以这样来执行连线程式:
ssh -l username host.name.domain
假设我要以 vbird 这个帐号登入一个名为 testing.adsldns.org 的主机,那么就以: ssh -l vbird testing.adsldns.org 来执行登入连线的程序!然后如果是第一次登入的话,你会发现到有一个讯息,告诉你要不要接受一个认证码,直接选择 yes 就可以连线啰!使用 ssh 最大的另一个好处,root 也可以登入喔!
Windows system:
那万一你是使用 Windows 为 Client 呢?那也没问题,你可以到 PuTTy 的网站上下载 putty 这支程式:
http://www.chiark.greenend.org.uk/~sgtatham/putty/
或者是在 这里 下载。这支程式完全不需要安装,直接以滑鼠双击他,就会自动的执行了!
安全性的设定
好了!虽然 openssh 是比较安全没错,但是并不是一定安全的!所以,你仍然可以设定一些简单的安全防护来防止一些问题的发生!其实,说穿了,就是将一些你不想要让他登入的 IP 挡掉他就是了,然后只开放一些可以登入的 IP 就是了!
防火墙:
由于 ssh 这个服务是开启在 port 22 ,所以你可以使用 ipchains 或 iptables 来开放一些你允许的 IP 以 port 22 进入!
TCP Wrappers:
如果不会设定 ipchains 或 iptables ,那也没关系!刚刚我们在安装的时候不是有选择 --with-tcp-wrappers 吗?呵呵,这个时候就派的上用场了!你可以到 /etc/hosts.allow 去设定你允许的 IP 连线到你的主机里面,例如你允许 192.168.1.1-192.168.1.255 连线到你的主机,那么你可以:
sshd : 192.168.1.0/24: Allow
而将其他的 IP 都挡掉在 /etc/hosts.deny 当中:
sshd : ALL : Deny
如此一来则 ssh 只会开放给 192.168.1.1-255 之间的电脑啰!以后要再开放的话,那就再将其他的 IP 加到 /etc/hosts.allow 当中去就好啰!