配置「/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.
Port 22
ListenAddress 192.168.1.1
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600shell
ClientAliveInterval 300
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin安全
下面逐行說明上面的選項設置:
Port 22
「Port」設置sshd監聽的端口號。
ListenAddress 192.168.1.1
「ListenAddress」設置sshd服務器綁定的IP地址。
HostKey /etc/ssh/ssh_host_key
「HostKey」設置包含計算機私人密匙的文件。
ServerKeyBits 1024
「ServerKeyBits」定義服務器密匙的位數。
LoginGraceTime 600
「LoginGraceTime」設置若是用戶不能成功登陸,在切斷鏈接以前服務器須要等待的時間(以秒爲單位)。服務器
ClientAliveInterval 300(默認爲0)
這個參數的是意思是每5分鐘,服務器向客戶端發一個消息,用於保持鏈接
KeyRegenerationInterval 3600
「KeyRegenerationInterval」設置在多少秒以後自動從新生成服務器的密匙(若是使用密匙)。從新生成密匙是爲了防止用盜用的密匙解密被截獲的信息。
PermitRootLogin no
「PermitRootLogin」設置root能不能用ssh登陸。這個選項必定不要設成「yes」。
IgnoreRhosts yes
「IgnoreRhosts」設置驗證的時候是否使用「rhosts」和「shosts」文件。
IgnoreUserKnownHosts yes
「IgnoreUserKnownHosts」設置ssh daemon是否在進行RhostsRSAAuthentication安全驗證的時候忽略用戶的「$HOME/.ssh/known_hosts」
StrictModes yes
「StrictModes」設置ssh在接收登陸請求以前是否檢查用戶家目錄和rhosts文件的權限和全部權。這一般是必要的,由於新手常常會把本身的目錄和文件設成任何人都有寫權限。
X11Forwarding no
「X11Forwarding」設置是否容許X11轉發。
PrintMotd yes
「PrintMotd」設置sshd是否在用戶登陸的時候顯示「/etc/motd」中的信息。
SyslogFacility AUTH
「SyslogFacility」設置在記錄來自sshd的消息的時候,是否給出「facility code」。
LogLevel INFO
「LogLevel」設置記錄sshd日誌消息的層次。INFO是一個好的選擇。查看sshd的man幫助頁,已獲取更多的信息。
RhostsAuthentication no
「RhostsAuthentication」設置只用rhosts或「/etc/hosts.equiv」進行安全驗證是否已經足夠了。
RhostsRSAAuthentication no
「RhostsRSA」設置是否容許用rhosts或「/etc/hosts.equiv」加上RSA進行安全驗證。
RSAAuthentication yes
「RSAAuthentication」設置是否容許只有RSA安全驗證。
PasswordAuthentication yes
「PasswordAuthentication」設置是否容許口令驗證。
PermitEmptyPasswords no
「PermitEmptyPasswords」設置是否容許用口令爲空的賬號登陸。
AllowUsers admin
「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服務器中已經包含了一些客戶端工具(如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
4.用戶添加成功後,還須要修改/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上來,以減小網絡安全隱患。ide