天天看點

ssh_config詳解

配置“/etc/ssh/ssh_config”檔案

“/etc/ssh/ssh_config” 檔案是OpenSSH系統範圍的配置檔案,允許你通過設定不同的選項來改變用戶端程式的運作方式。這個檔案的每一行包含“關鍵詞-值”的比對,其中“關鍵詞”是忽略大小寫的。下面列出來的是最重要的關鍵詞,用man指令檢視幫助頁(ssh (1))可以得到詳細的清單。

編輯“ssh_config”檔案(vi /etc/ssh/ssh_config),添加或改變下面的參數:

# Site-wide defaults for various options

Host *

ForwardAgent no

ForwardX11 no

RhostsAuthentication no

RhostsRSAAuthentication no

RSAAuthentication yes

PasswordAuthentication yes

FallBackToRsh no

UseRsh no

BatchMode no

CheckHostIP yes

StrictHostKeyChecking no

IdentityFile ~/.ssh/identity

Port 22

Cipher blowfish

EscapeChar ~

下面逐行說明上面的選項設定:

選項“Host”隻對能夠比對後面字串的計算機有效。“*”表示所有的計算機。

“ForwardAgent”設定連接配接是否經過驗證代理(如果存在)轉發給遠端計算機。

“ForwardX11”設定X11連接配接是否被自動重定向到安全的通道和顯示集(DISPLAY set)。

“RhostsAuthentication”設定是否使用基于rhosts的安全驗證。

“RhostsRSAAuthentication”設定是否使用用RSA算法的基于rhosts的安全驗證。

“RSAAuthentication”設定是否使用RSA算法進行安全驗證。

“PasswordAuthentication”設定是否使用密碼驗證。

“FallBackToRsh”設定如果用ssh連接配接出現錯誤是否自動使用rsh。

“UseRsh”設定是否在這台計算機上使用“rlogin/rsh”。

“BatchMode”如果設為“yes”,passphrase/password(互動式輸入密碼)的提示将被禁止。當不能互動式輸入密碼的時候,這個選項對腳本檔案和批處理任務十分有用。

“CheckHostIP”設定ssh是否檢視連接配接到伺服器的主機的IP位址以防止DNS欺騙。建議設定為“yes”。

“StrictHostKeyChecking”如果設定成“yes”,ssh就不會自動把計算機的密匙加入“$HOME/.ssh/known_hosts”檔案,并且一旦計算機的密匙發生了變化,就拒絕連接配接。

“IdentityFile”設定從哪個檔案讀取使用者的RSA安全驗證辨別。

“Port”設定連接配接到遠端主機的端口。

“Cipher”設定加密用的密碼。

“EscapeChar”設定escape字元。

配置“/etc/ssh/sshd_config”檔案

“/etc/ssh/sshd_config”是OpenSSH的配置檔案,允許設定選項改變這個daemon的運作。這個檔案的每一行包含“關鍵詞-值”的比對,其中“關鍵詞”是忽略大小寫的。下面列出來的是最重要的關鍵詞,用man指令檢視幫助頁(sshd (8))可以得到詳細的清單。

編輯“sshd_config”檔案(vi /etc/ssh/sshd_config),加入或改變下面的參數:

# This is ssh server systemwide configuration file.

ListenAddress 192.168.1.1

HostKey /etc/ssh/ssh_host_key

ServerKeyBits 1024

LoginGraceTime 600

KeyRegenerationInterval 3600

PermitRootLogin no

IgnoreRhosts yes

IgnoreUserKnownHosts yes

StrictModes yes

X11Forwarding no

PrintMotd yes

SyslogFacility AUTH

LogLevel INFO

PermitEmptyPasswords no

AllowUsers admin

“Port”設定sshd監聽的端口号。

“ListenAddress”設定sshd伺服器綁定的IP位址。

“HostKey”設定包含計算機私人密匙的檔案。

“ServerKeyBits”定義伺服器密匙的位數。

“LoginGraceTime”設定如果使用者不能成功登入,在切斷連接配接之前伺服器需要等待的時間(以秒為機關)。

“KeyRegenerationInterval”設定在多少秒之後自動重新生成伺服器的密匙(如果使用密匙)。重新生成密匙是為了防止用盜用的密匙解密被截獲的資訊。

“PermitRootLogin”設定root能不能用ssh登入。這個選項一定不要設成“yes”。

“IgnoreRhosts”設定驗證的時候是否使用“rhosts”和“shosts”檔案。

“IgnoreUserKnownHosts”設定ssh daemon是否在進行RhostsRSAAuthentication安全驗證的時候忽略使用者的“$HOME/.ssh/known_hosts”

“StrictModes”設定ssh在接收登入請求之前是否檢查使用者家目錄和rhosts檔案的權限和所有權。這通常是必要的,因為新手經常會把自己的目錄和檔案設成任何人都有寫權限。

“X11Forwarding”設定是否允許X11轉發。

“PrintMotd”設定sshd是否在使用者登入的時候顯示“/etc/motd”中的資訊。

“SyslogFacility”設定在記錄來自sshd的消息的時候,是否給出“facility code”。

“LogLevel”設定記錄sshd日志消息的層次。INFO是一個好的選擇。檢視sshd的man幫助頁,已擷取更多的資訊。

“RhostsAuthentication”設定隻用rhosts或“/etc/hosts.equiv”進行安全驗證是否已經足夠了。

“RhostsRSA”設定是否允許用rhosts或“/etc/hosts.equiv”加上RSA進行安全驗證。

“RSAAuthentication”設定是否允許隻有RSA安全驗證。

“PasswordAuthentication”設定是否允許密碼驗證。

“PermitEmptyPasswords”設定是否允許用密碼為空的帳号登入。

“AllowUsers”的後面可以跟着任意的數量的使用者名的比對串(patterns)或user@host這樣的比對串,這些字元串用空格隔開。主機名可以是DNS名或IP位址。

使用SFTP代替FTP傳輸檔案

FTP(檔案傳輸協定)是一種使用非常廣泛的在網絡中傳輸檔案的方式,但是,它也同樣存在被網絡竊聽的危險,因為它也是以明文傳送使用者認證資訊。其實在SSH軟體包中,已經包含了一個叫作SFTP(Secure FTP)的安全檔案傳輸子系統,SFTP本身沒有單獨的守護程序,它必須使用sshd守護程序(端口号預設是22)來完成相應的連接配接操作,是以從某種意義上來說,SFTP并不像一個伺服器程式,而更像是一個用戶端程式。SFTP同樣是使用加密傳輸認證資訊和傳輸的資料,是以,使用SFTP是非常安全的。但是,由于這種傳輸方式使用了加密/解密技術,是以傳輸效率比普通的FTP要低得多,如果您對網絡安全性要求更高時,可以使用SFTP代替FTP。若要開啟 SFTP功能可以修改sshd2_config檔案的下列内容:

# subsystem-sftp sftp-server

去掉行首的“#”,然後重新啟動SSH伺服器,這樣在進行SSH連接配接時就可以同時使用SFTP傳輸檔案。

關于用戶端設定

以上是對伺服器的設定,其實在SSH伺服器中已經包含了一些用戶端工具(如SSH,SFTP工具)。但是,更多的用戶端使用者使用Windows系統,下面就對Windows上的用戶端系統設定加以說明。

首先從上文給出的網址下載下傳“SSHSecureShellClient-3.2.3.exe”檔案并安裝。安裝完成後,在桌面上會産成兩個快捷方式,一個是“SSH Secure Shell Client”,用于遠端管理,另一個是“SSH Secure File Transfer Client”,用于和伺服器進行檔案傳輸。在工具欄中點選“quick connnect”,輸入正确的主機名和使用者名,然後在彈出的對話框中輸入密碼完成登入,即可開始執行指令或者傳輸檔案。在使用SFTP時,預設隻能顯示使用者的宿主目錄的内容和非隐藏檔案。但是,有時候您可能還要檢視其它目錄或者隐藏檔案,這時隻需要在菜單“eidt->setting-> file transfer”的選項中選中“show root directory”和“show hidden file”兩個選項即可。

使普通使用者僅使用SFTP而沒有使用Shell的權限

預設情況下管理者給系統添加的賬号将同時具有SFTP和SSH的權限。讓普通使用者使用shell執行指令也是有很大的安全隐患的,如果能夠禁止使用者使用shell執行指令而僅使用SFTP傳輸檔案,就能消除這種安全隐患,完全實作FTP的功能,

正如上文所述,SFTP沒有單獨的守護程序,隻能借助于sshd守護程序,是以我們仍然需要使用SSH伺服器,要保證sshd守護程序處于運作狀态。具體實作方法如下:

首先,在編譯安裝時,編譯中一定要有“--enable-static” 選項。安裝成功後,在安裝目錄下的bin目錄中執行下面的指令:

[root@localhost bin]# ls -l ssh-dummy-shell* sftp-server2*

将看到下列輸出内容:

-rwxr-xr-x 1 root root 1350417 Apr 28 16:30 sftp-server2

-rwxr-xr-x 1 root root 3566890 Apr 28 16:30 sftp-server2.static

-rwxr-xr-x 1 root root 72388 Apr 28 16:30 ssh-dummy-shell

-rwxr-xr-x 1 root root 1813412 Apr 28 16:30 ssh-dummy-shell.static

其中帶“static”字尾名,且比較大的兩個檔案就是加上“--enable-static”選項後生成的,後面我們将用到這裡兩個檔案。

下面以添加普通賬号test為例講述具體操作步驟。

1.在“/home”目錄(或者将要存放普通使用者宿主目錄的目錄)下建立“bin”子目錄,并将兩個static檔案複制到此目錄下(複制後改名去掉static字尾),執行如下指令:

[root@localhost bin]# cd /usr/local/ssh3.2/bin

[root@localhost bin]#cp ssh-dummy-shell.static /home/bin/ssh-dummy-shell

[root@localhost bin]# cp sftp-server2.static /home/bin/sftp-server

[root@localhost bin]#chown -R root.root /home/bin

[root@localhost bin]#chmod -R 755 /home/bin

2.添加一個組,使以後所有禁止使用shell的使用者都屬于這個組,這樣便于管理更多的使用者:

[root@localhost bin]#groupadd template

3.在添加系統賬号時使用如下指令:

[root@localhost root]#useradd -s /bin/ssh-dummy-shell -g template test

[root@localhost root]#passwd test

[root@localhost root]#mkdir /home/test/bin

[root@localhost root]#cd /home/test/bin

[root@localhost bin]#ln /home/bin/ssh-dummy-shell ssh-dummy-shell

[root@localhost bin]#ln /home/bin/sftp-server sftp-server

[root@localhost bin]#chown -R root.root /home/test/bin

[root@localhost bin]#chmod -R 755 /home/test/bin

3.使用者添加成功後,還需要修改/etc/ssh2/sshd2_config檔案,将下列内容:

#ChRootGroups sftp,guest

改為:

ChRootGroups sftp,guest,template

修改上面這行内容,主要是為了禁止普通使用者檢視系統的其它目錄,把其權限限制在自己的主目錄下。重新啟動SSH伺服器程式,在用戶端使用SSH Secure File Transfer Client登入,即使選擇顯示根目錄,普通使用者也看不到其它的任何目錄,而是把自己的主目錄當作根目錄。注意,這裡使用的是按使用者所屬組限制,這樣可以使包含在template組内的所有使用者都可以實作此功能。若您隻要限制個别使用者的話,可以修改下面的内容:

#ChRootUsers anonymous,ftp,guest

事實證明SSH是一種非常好的網絡安全解決方案,但是,目前仍有很多管理者使用Telnet或FTP這種非常不安全的工具,希望盡快轉移到SSH上來,以減少網絡安全隐患。

繼續閱讀