不知道您有沒有發現,最近的 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 當中去就好啰!