注意:由于openssh是開源軟件,各版間的配置方法和設(shè)置參數(shù)可能會不同,所以設(shè)置時要以最新版的手冊為準(zhǔn),不要硬套書本的設(shè)置。
第一章 SSH簡介
ssh(secure shell)是一種通用,功能強(qiáng)大的基于軟件的網(wǎng)絡(luò)安全解決方案,計(jì)算機(jī)每次向網(wǎng)絡(luò)發(fā)送數(shù)據(jù)時,SSH都會自動對其進(jìn)行加密。數(shù)據(jù)到達(dá)目的地時,SSH自動對加密數(shù)據(jù)進(jìn)行解密。整個過程都是透明的。它使用了現(xiàn)代的安全加密算法,足以勝任大型公司的任務(wù)繁重的應(yīng)用程序的要求。
SSH協(xié)議內(nèi)容涉及認(rèn)證AUTHENTICATION,加密ENCRYPTION,和網(wǎng)絡(luò)上傳輸數(shù)據(jù)的完整性INTEGRITY。
SSH特性概述
1、遠(yuǎn)程登錄
$ ssh -l root host.example.com
2、安全文件傳輸
$ scp myfile metoo@secondacount.com
3、安全執(zhí)行遠(yuǎn)程命令,能確保傳輸?shù)臄?shù)據(jù)安全。
4、密鑰和代理
基于密鑰的認(rèn)證方法不用記住多個帳號密碼。
5、訪問控制,能授權(quán)別人訪問自已帳號。
6、端口轉(zhuǎn)發(fā)
$ ssh -L 3002:localhost:119 xxx.xxx.com
相關(guān)安全技術(shù)
rsh命令族,rsh,rlogin and rcp。連接不加密,認(rèn)證模型十分脆弱。
PGP加密程序。它是基于文件的。
Kerberos認(rèn)證系統(tǒng),用于網(wǎng)絡(luò)可能被監(jiān)視,而且計(jì)算機(jī)不是中心控制的環(huán)境。基于麻省理工
學(xué)院的Athena項(xiàng)目。它SSH不是,SSH是輕量級的,容易部署。Kerberos使用前必須構(gòu)建
一些重要基礎(chǔ)。
IPSEC,Internet安全協(xié)議。
SRP,安全遠(yuǎn)程密碼協(xié)議,是Stanford大學(xué)開發(fā)的。是一種專用的認(rèn)證協(xié)議。
SSL,安全套接字。
stunnel,是一種SSL工具,它為UNIX環(huán)境現(xiàn)有的基于TCP的服務(wù)(POP,IMAP等)增加
SSL保護(hù),而不用修改服務(wù)器源程序。
第二章 SSH客戶端的基本用法
最常用功能,1、經(jīng)由安全連接登錄到遠(yuǎn)程計(jì)算機(jī)。2、通過安全連接在計(jì)算機(jī)間拷貝文件。
當(dāng)你第一次連接SSH服務(wù)器時,出現(xiàn)問答時要回答“yes”,把已知名主機(jī)的密鑰的公共部
分拷貝一份存在本地。之后你每次連接這臺服務(wù)器,就用這個公鑰來驗(yàn)證遠(yuǎn)程主機(jī)。最好是
能在首次連接前就能獲得這個公鑰,否則第一次連接服務(wù)器時你可能已受到中間人攻擊。
使用密鑰進(jìn)行認(rèn)證,SSH支持公鑰認(rèn)證,可以使用加密密鑰,密鑰比密碼更安全。
SSH證書使用一對密鑰,一個私鑰,一個公鑰,私鑰只保存你獨(dú)有的一些秘密信息。SSH
用其向服務(wù)器證明自已的身份。公鑰是公開的,可以隨便將其放入SSH服務(wù)器上自已的帳
號中,在認(rèn)證時,進(jìn)行私鑰和公鑰協(xié)商,如果匹配,那么身份就得以證明,認(rèn)證就成功。
在使用公鑰認(rèn)證以前,首先要進(jìn)行一些設(shè)置:
1、需要一對密鑰,還需要使用一個口令來保護(hù)自已的私鑰。
使用ssh-keygen程序生成一對密鑰。如果不存在SSH目錄,程序?yàn)樽詣觿?chuàng)建本地SSH目錄
~/.ssh,并將所生成的密鑰分成兩個文件存儲,公有部份identity.pub,私有部分identity,或
id_dsa_1024_a,id_dsa_1024_a.pub(ssh2)。
2、需要在SSH服務(wù)器上安裝自已的公鑰。
通過配置SSH目錄中的一個文件實(shí)現(xiàn),對于SSH1 AND OPENSSH來說該文件是
~/.ssh/authorized_keys。對SSH2來說是~/.ssh2/authorization。OPENSSH中的SSH-2連接自
3.0版本起也一同使用authorized_keys文件。3.0版本前的使用authorized_keys2。把用戶本
地機(jī)器生成identity.pub文件內(nèi)容加入其中。對SSH2來說,用戶需編輯兩個文件,一個客
戶端一個在服務(wù)器端,
在客戶端,要創(chuàng)建或編輯文件~/.ssh2/identification并在其中插入一行,說明自已的私鑰文件
名: IdKey id_dsa_1024_a.
在服務(wù)器端,要創(chuàng)建或編輯文件~/.ssh2/authorization,該文件包含有公鑰信息,每行一個,
但和SSH1的authorized_keys文件不同(authorized_keys中包含有公鑰的拷貝),authorization
中只給出公鑰文件名:Key id_dsa_1024_a.pub。最后,把這個文件從本地機(jī)器上拷貝到服務(wù)
器~/.ssh2中。為安全起見,要確保ssh目錄的安全,只有所有者才有權(quán)寫入。如果遠(yuǎn)程用戶
的SSH配置文件的權(quán)限設(shè)置不當(dāng),服務(wù)器可能會拒絕進(jìn)行認(rèn)證。
公鑰認(rèn)證比密碼認(rèn)證更安全,因?yàn)椋?br>1、 公鑰認(rèn)證需要兩個加密部份(磁盤上的identify文件和用戶頭腦中的口令),入侵都必須
2、 具備兩種條件才行。密碼認(rèn)證只需要一個部份,那就是密碼,它可能更容易被竊取。
3、 在公鑰認(rèn)證中,口令和密鑰都不用發(fā)給遠(yuǎn)程主機(jī),只要把前面討論的認(rèn)證者發(fā)給遠(yuǎn)程主
4、 機(jī)就可以了,因此,并沒有秘密信息傳出客戶端。
3、機(jī)器生成的密鑰是不可能猜測出來的,而人生成的密碼容易受到字典攻擊。
通過禁用密碼認(rèn)證并只允許使用密鑰認(rèn)證能極大提高主機(jī)的安全性。
如果要修改密鑰
如果已經(jīng)生成一個密鑰對,并把公鑰拷貝到多個SSH服務(wù)器上了,用戶有一天決定修改自
已的身份,因?yàn)樵龠\(yùn)行ssh-keygen。這樣,就會覆蓋identify and identify.pub文件,用戶之
前的公鑰就沒用了,必須把新公鑰再次拷貝到各個服務(wù)器上。這是很頭疼的,所以建議:
1、 不能局限于僅僅使用一個密鑰對,可隨意生一此密鑰對,將其保存在不同的文件中,并
2、 將其用作不同的用途。
3、 如果只是想修改口令,就不必重新生成一個密鑰對,ssh-keygen有一個命令行選項(xiàng)可以
4、 替換現(xiàn)有的密鑰口令。ssh1 and openssh是-p,對于ssh2是-e。這樣,因?yàn)樗借€沒變,所以
5、 公鑰依然不效,中需使用新口令對私鑰進(jìn)行解密就可以了。
ssh代理
它可以把私鑰保存在內(nèi)存中,為認(rèn)證提供服務(wù),不用重復(fù)輸入密碼。直到用戶退出為止。代
理程序是ssh-agent。可手工運(yùn)行也可編輯~/.login 或~/.xsession來自動運(yùn)行。
$ ssh-agent $SHELL 其中SHELL是用戶登錄shell的環(huán)境變量。運(yùn)行該命令后,打開另外
一個shell,在這個shell中可以訪問代理。
接著用ssh-add命令裝入私鑰。這樣,使用ssh and scp命令就不用再提醒輸入口令了。口令
裝入內(nèi)存中。如果用戶正運(yùn)行x window系統(tǒng),并設(shè)置了DISPLAY環(huán)境變量,而標(biāo)準(zhǔn)輸入
不是終端,那么ssh-add就使用一個圖形化X程序ssh-askpass來讀取口令。要強(qiáng)制ssh-add
使用X來讀取口令,請?jiān)诿钚兄休斎雜sh-add < /dev/null。
-l 參數(shù)顯示內(nèi)存中的密鑰
-d 參數(shù)從代理中刪除密鑰 $ ssh-add -d ~/.ssh/id_xxx.pub
-D 是刪除所有密鑰
-t 對加載的密鑰設(shè)置超時時間,超時代理將自動卸載密鑰。
-L -U 對代理進(jìn)行加鎖和解鎖,當(dāng)你離開計(jì)算機(jī)而不想退出登錄時有用。
代理轉(zhuǎn)發(fā)
可能通過代理轉(zhuǎn)發(fā)功能,可以用SCP把文件從遠(yuǎn)程SSH服務(wù)器上拷貝到第三方SSH主機(jī)上。
條件是你在第三方SSH主機(jī)上必須有一個帳號。具體操作是這樣的:
1、 在本地主機(jī)上運(yùn)行命令:# scp pat@shell.isp.com:print-me
2、 psmith@other.host.net:other-print-me
2、這個scp進(jìn)程與本地代理進(jìn)行聯(lián)系,并讓用戶和shell.isp.com進(jìn)行認(rèn)證。
3、自動在shell.isp.com上執(zhí)行第二個scp,用來把文件拷貝到other.host.net主機(jī)上。
3、 由于啟用了代理轉(zhuǎn)發(fā)(SSH1 AND SSH2默認(rèn)是打開的,openssh默認(rèn)是關(guān)閉的),因此
4、 shell.isp.com上的SSH服務(wù)器就充當(dāng)一個代理。
5、第二個scp進(jìn)程通過聯(lián)系shell.isp.com上的代理試圖讓用戶和other.host.net進(jìn)行認(rèn)證。
5、 shell.isp.net上ssh服務(wù)器秘密與用戶的本地代理進(jìn)行通信,從而構(gòu)建出一個認(rèn)證者來提
6、 供用戶的證書并將其傳回服務(wù)器。
7、服務(wù)器為第二個scp進(jìn)程驗(yàn)證用戶的身份,other.host.net上的認(rèn)證獲得成功。
8、開始拷貝文件。
由于代理轉(zhuǎn)發(fā)不會把私鑰發(fā)送到遠(yuǎn)程主機(jī)上,而是把認(rèn)證返回第一臺機(jī)進(jìn)行處理,因此密鑰
是安全的。
不用密碼或口令進(jìn)行連接方式
1、使用代理的公鑰認(rèn)證。
2、可信主機(jī)認(rèn)證。
3、Kerberos認(rèn)證。
在后文中將會討論這些方式的優(yōu)缺點(diǎn)。
sftp
它是在SSH上的一個獨(dú)立文件傳輸工具,操作與ftp類似,可以在一個會話中調(diào)用多個命令
進(jìn)行文件拷貝和處理,而scp每次調(diào)用時都要打開一個會話。sftp不區(qū)分ascii and binary傳
輸模式,只使用二進(jìn)制模式,因此,如果使用它在windows and unix之間拷貝ascii文件,
那么就不能正確轉(zhuǎn)換行結(jié)束符。
第三章 SSH內(nèi)幕
SSH協(xié)議的主要特性和優(yōu)點(diǎn):
1、 使用強(qiáng)加密技術(shù)來保證數(shù)據(jù)的私密性。端到端通信用隨機(jī)密鑰進(jìn)行加密,隨機(jī)密鑰為會
話進(jìn)行安全協(xié)商,會話結(jié)束后被丟棄。支持的算法有ARCFOUR,Blowfish,DES,IDEA,3DES等。
2、通信完整性,確保通信不會被修改。SSH-2基于MD5 AND SHA-1的加密hash算法。
3、認(rèn)證,即發(fā)送者和接收者的身份證明。客戶機(jī)和服務(wù)器雙向認(rèn)證。
4、授權(quán),即對賬號進(jìn)行訪問控制。
5、使用轉(zhuǎn)發(fā)或隧道技術(shù)對其它基于tcp/ip的會話進(jìn)行加密。支持三種轉(zhuǎn)發(fā),tcp端口轉(zhuǎn)發(fā),
X轉(zhuǎn)發(fā),代理轉(zhuǎn)發(fā)。
SSH可以防止的攻擊
1、網(wǎng)絡(luò)竊聽,SSH通信是加密的,即使截獲會話內(nèi)容,也不能將其解密。
2、名字服務(wù)和IP偽裝,SSH通過加密驗(yàn)證服務(wù)器主機(jī)身份可避免這類風(fēng)險(xiǎn)。
3、連接劫持,SSH的完整性檢測負(fù)責(zé)確定會話在傳輸過程是否被修改,如果被修改過,就
關(guān)閉連接。
4、 中間人攻擊,SSH利用兩種方法防止這種攻擊,第一種是服務(wù)器主機(jī)認(rèn)證。除非攻擊者
已經(jīng)成功攻擊了服務(wù)器主機(jī),獲得服務(wù)器的私有主機(jī)密鑰。第二種是限制使用容易受到
這種攻擊的認(rèn)證方法,密碼認(rèn)證容易受到中間人攻擊,而公鑰和基于主機(jī)的/RhostsRSA
則對中間人攻擊可以免疫。
5、插入攻擊,這種攻擊可以客戶和服務(wù)器之間發(fā)送的正文數(shù)據(jù)流之間插入任意數(shù)據(jù)。ssh1
1.2.25后和openssh的所有版本都專門進(jìn)行了設(shè)計(jì),來檢測并防止這種攻擊。這種檢測程序
增大了插入攻擊的難度,但是并不能完全防止。ssh2使用強(qiáng)加密完整性檢測手段來防止這個
問題。可以用3DES算法來防止這種攻擊。
SSH不能防止的攻擊
1、 密碼崩潰,密碼認(rèn)證是一種脆弱的認(rèn)證形式,盡量使用公鑰認(rèn)證方式。如果必須要密碼
認(rèn)證,可考慮使用S/Key之類的一次性密碼機(jī)制。
2、 IP AND TCP攻擊,由于SSH是在TCP之上進(jìn)行操作的,因此容易受到針對TCP和IP
缺陷而發(fā)起的攻擊。SYN flood,TCP不同步和TCP劫持等。只能通過更低層的防護(hù)措施
來保護(hù)。
3、流量分析。
4、隱秘通道。
5、粗心大意。安全是一個過程,而不是一個產(chǎn)品,不要認(rèn)為裝上SSH就安全了。
第四章 SSH的安裝和編譯時配置
第五章 服務(wù)器范圍的配置
sshd可以在三個層次上進(jìn)行配置,第一層次是上面的安裝和編譯時配置;第二層次是本章的
服務(wù)器范圍配置;第三層次是每賬號配置(第八章),前者是服務(wù)器編譯時就指定了包含哪
些特定功能,不包含哪些功能,后者則是由終端用戶來修改自已賬號所使用的服務(wù)器的行為。
以普通用戶身份運(yùn)行SSH服務(wù)器
1、得到管理員許可。
2、生成一個主機(jī)密鑰。
$ ssh-keygen -N '' -b 1024 -f ~/myserver/hostkey 生成hostkey and hostkey.pub兩個文件
3、選擇端口號。 要選擇大于或等1024的端口,因?yàn)橹挥谐売脩舨庞袡?quán)使用小于
1024的端口 。
4、創(chuàng)建服務(wù)器配置文件(可選) 可創(chuàng)建自已的配置文件,否則,服務(wù)就使用內(nèi)建的特性或使
用服務(wù)器范圍的配置文件。
啟動服務(wù)器方式:$ sshd -h ~/myserver/hostkey -p 2345 -f ~/myserver/config
由普通用戶運(yùn)行的服務(wù)器有一些缺點(diǎn):
1、由于不是由root的uid下運(yùn)行,因此只能連接到用戶自已的賬號上。
2、它需手工調(diào)用,不能自啟動。
3、 日志用戶沒權(quán)看到,因?yàn)榉?wù)器把它寫到syslog日志系統(tǒng)中,但可用調(diào)試模式運(yùn)行服務(wù)
4、 器,這樣信息就顯示在終端機(jī)上。
服務(wù)器配置文件
SSH1 AND OPENSSH的配置文件通常是/etc/sshd_config,而SSH2的配置文件通常是
/etc/ssh2/sshd2_config。
以非缺省的配置文件來調(diào)用sshd,可以使用命令 -f 選項(xiàng)。$ sshd -f /usr/local/ssh/my_config。
以*號作為標(biāo)號的語名都會被sshd忽略。
修改完配置后,修改不會馬上影響到服務(wù)器,可重啟服務(wù)器或發(fā)送SIGHUP信號。$ kill -HUP
`cat /etc/sshd.pid`
如果在命令行改動了配置,用SIGHUP信號重啟服務(wù)器不能覆蓋命令行的配置,它的優(yōu)先
級高。
主機(jī)密鑰,sshd主機(jī)密鑰向SSH客戶端唯一地標(biāo)識SSH服務(wù)器。主機(jī)密鑰保存在一對文件
中,一個文件包含私鑰,一個文件包含公鑰。對于SSH1 AND OPENSSH,它是
/etc/ssh_host_key。文件位置可用HostKey關(guān)鍵字修改 HostKey /usr/local/ssh/key。服務(wù)器的
公鑰保存在.pub文件中。
OPENSSH服務(wù)器有一個SSH-2的主機(jī)密鑰,缺省是在/etc/ssh_host_dsa_key。其位置可用
HostDsaKey /usr/local/openssh/key2修改。
對于SSH2,如果服務(wù)器是由超級用戶運(yùn)行,缺省私鑰文件是/etc/ssh2/hostkey。如果是其它
用戶運(yùn)行,則在~/.ssh2/hostkey。可用HostKeyFile /etc/local/ssh/key修改。公鑰是hostkey.pub
文件,可用publicHostKeyFile關(guān)鍵字修改。
可以用命令行選項(xiàng)指定私鑰文件:$ sshd -h /usr/local/ssh/key。
隨機(jī)數(shù)種子文件
如果用戶的系統(tǒng)中有一個隨機(jī)位源,如/dev/urandom,那么OPENSSH就不能創(chuàng)建隨機(jī)數(shù)種
子文件。
服務(wù)器配置文件
通常是/etc/sshd_config /etc/ssh2/ssh2_config,可以用-f 選項(xiàng)重新指定其配置文件。可用于一
臺機(jī)器運(yùn)行多個sshd的情況。
每賬號認(rèn)證文件。~/.ssh/authorized_keys 。
文件權(quán)限
由于配置文件的權(quán)限設(shè)置錯誤,會降低系統(tǒng)的安全性,所以可以設(shè)置StrictModes YES/NO
關(guān)鍵字,對sshd的重要文件和目錄的權(quán)限進(jìn)行檢查,如果檢查失敗,服務(wù)器就拒絕對該用
戶的SSH連接。
在多宿主主機(jī)上,使用ListenAddress xxx.xxx.xxx.xxx來限制SSH只監(jiān)聽一個網(wǎng)絡(luò)接口。
空閑連接時間,IdleTimeout xx 如果是0代表什么都不做,保持連接。否則,超時就斷開連
接,可以用s,m,h,d,w表示。
KeepAlive YES/NO 可以斷開失效的連接,比如客戶端崩潰。
失敗的登錄
LogingGraceTime 60 限定用戶必須在60秒內(nèi)成功進(jìn)行認(rèn)證。 0值表禁用。命令行選項(xiàng)用
-g
PasswordGuesses 5 如果連接請求使用密碼認(rèn)證,那么sshd2就只允許客戶端嘗試五次。
(SSH2)
限制并發(fā)連接
MaxConnections 32 最大32個連接(SSH2)
逆向IP映射
SSH2服務(wù)器可以根據(jù)客戶端地址進(jìn)行逆向DNS查詢,以確保客戶端的地址就是這個地址。
如果檢查失敗,連接拒絕。
RequireReverseMapping yes (ssh2)
轉(zhuǎn)發(fā)
AllowTcp-Forwarding yes
X11Forwarding yes
服務(wù)器密鑰生成
該密鑰用來對客戶端/服務(wù)器之間的通信進(jìn)行保護(hù)。是臨時的,永遠(yuǎn)不會保存在磁盤上。服
務(wù)器在啟動時生成這個密鑰。并以固定的周期重新生成。缺省長度是768位,最小為512,
可以ServerKeyBits 2048 指定長度。用KeyRegenerationInterval 1200指定周期。 命令行選
項(xiàng):-k
加密算法
Ciphers any 允許所有支持算法。其它算法包括
3des-cbc,blowfish-cbc,twofish-cbc,arcfour,none
mac算法
MAC關(guān)鍵字可以讓用戶選擇sshd2進(jìn)行完整性檢測所使用的算法,稱為消息認(rèn)證代碼。用
于sshd2的有hmac-sha1,hmac-md5,hmac-md5-96。
在OPENSSH中,用戶可以用Protocol關(guān)鍵字選擇支持SSH-1 AND SSH-2,1 代表SSH-1,2 代
表SSH-2, 1,2 代表都支持。
允許用戶登錄:認(rèn)證和訪問控制
1、認(rèn)證負(fù)責(zé)對發(fā)起連接請求的用戶的身份進(jìn)行驗(yàn)證。
密碼認(rèn)證
PasswordAuthentication yes AllowedAuthentications password (ssh2)
公鑰認(rèn)證
RSAAuthentication yes (ssh1,openssh/1)
AllowedAuthentications publickey (ssh2)
DEAAuthentication yes (openssh/2)
Rhosts認(rèn)證,可信主機(jī)認(rèn)證通過檢查遠(yuǎn)程主機(jī)名和相關(guān)用戶名來實(shí)現(xiàn)對客戶端的身份認(rèn)證。
RhostsAuthentication yes (ssh1,openssh)
IgnoreRhosts yes (ssh1,ssh2,openssh)不使用系統(tǒng)的hosts.equiv and ~/.rhosts,使用SSH專用
的/etc/shosts.equiv and ~/.shosts
強(qiáng)可信主機(jī)認(rèn)證。
RhostsRSAAuthentication yes ssh1,openssh
AllowedAuthentications hostbased ssh2
提取已知名主機(jī)的公鑰
UserKnownHosts no ssh2
IgnoreUserKnownHosts yes openssh
PGP認(rèn)證
Kerberos認(rèn)證
S/key認(rèn)證
SecurID認(rèn)證
PAM認(rèn)證
2、訪問控制負(fù)責(zé)允許或禁止來自特定用戶、機(jī)器在或INTERNET域的SSH連接到服務(wù)器
上。
通常,只要設(shè)置正確,任何賬號都可以接收SSH連接,這種訪問權(quán)限可以使用服務(wù)器關(guān)鍵
字AllowUsers and DenyUsers覆蓋。
AllowUsers smith
如果配置文件中單獨(dú)出現(xiàn)一個AllowUsers,后面沒有任何內(nèi)容,就表示禁止所有沒提到的用
戶連接,如果沒有AllowUsers這個關(guān)鍵字,則所有用戶都可連接。DenyUsers表示禁止連接。
可用通配符,
可以用組訪問控制AllowGroups DenyGroups
主機(jī)名訪問控制
AllowHosts hostname
DenyHosts hostname
超級用戶的訪問控制
sshd對超級用戶專門使用一種特殊的訪問機(jī)制,PermiRootLogin來允許或禁止使用SSH來
訪問root賬號。
顯示用戶的歡迎信息
PrintMotd yes/no default is yes
顯示郵件信息
CheckMail yes/no default is yes
空密碼
PermitEmptyPasswords yes/no 如果使用密碼認(rèn)證,并且有個賬號沒有設(shè)定密碼,那么服務(wù)
器就可以拒絕訪問這個賬號
如果系統(tǒng)中存在/etc/nologin,那么sshd就只允許root用戶登錄,其它都不能登錄。因此,touch
/etc/nologin是把訪問權(quán)只授給系統(tǒng)管理員的一種快速方法。這樣并不需要重新配置ssh。也
不需要重啟ssh。
子系統(tǒng)
定義和調(diào)用遠(yuǎn)程命令的一個抽象層,用戶可以通過在客戶端命令行中給出命令來調(diào)用遠(yuǎn)程命
令,如:ssh server.examply.com /bin/tar c /home 這個命令調(diào)用tar,遠(yuǎn)程把/home拷貝到磁帶上。
子系統(tǒng)是服務(wù)器機(jī)器上預(yù)定義的一組遠(yuǎn)程命令,這樣就可以方便地執(zhí)行。在服務(wù)器配置文檔
中定義:subsystem backups /bin/tar c /home,要在服務(wù)器上運(yùn)行該命令,可以使用 -s 選項(xiàng)。
ssh -s backups server.example.com。缺省情況下,sshd_config中定義了一個子系統(tǒng),subsystem
sftp 。不要刪除這個子系統(tǒng),這是scp2和sftp必須的。
日志
Fascisl Logging mode 把調(diào)試信息打印到系統(tǒng)日志文件中,可以使用FascistLogging關(guān)鍵字
啟用。
調(diào)試模式 可以使用-d命令選項(xiàng)啟用
安靜模式 只能輸出嚴(yán)重錯誤,而不能輸出 普通日志,可以使用QuietMode關(guān)鍵字或-q
命令行啟用。
openssh中的日志配置關(guān)鍵字是SyslogFacility and LogLevel。SyslogFacility設(shè)置syslog的
facility(KERN,DAEMON,USER,AUTH,MAIL等),LogLevel記錄日志提供的詳細(xì)程度,該
值從低到高順序是:QUIET,FATAL,ERROR,INFO,VERBOSE,DEBUG,使用DEBUG會侵犯用
戶的隱私權(quán),這個級別只能用于診斷,而不能用于普通操作。
第六章 密鑰管理與代理
一個身份標(biāo)識由兩部份組成,分別稱為私鑰(Private Key)和公鑰(Public Key),合稱一個
密鑰對。
SSH1,SSH2 AND OPENSSH身份標(biāo)識文件的格式各不相同。
SSH1缺省設(shè)置中,私鑰存儲在文件identity中,公鑰存儲在文件identity.pub中。這個密鑰
對存放在~/.ssh目錄下,在使用前,把公鑰拷貝到服務(wù)器上的一個認(rèn)證文件里,如SSH1 AND
OPENSSH中的~/.ssh/authorized_keys,此后,當(dāng)客戶請求連接到你的服務(wù)器上的帳號時,就
會用一個私鑰作為證明身份的標(biāo)識,服務(wù)器則在authorized_keys文件中尋找與之匹配的公
鑰。
SSH2密鑰對文件的命名通常是根據(jù)該密鑰使用的加密算法的性質(zhì)來起的,例如一個用DSA
加密的1024位密鑰生成時其缺省文件名是id_dsa_1024_a and id_dsa_1024_a.pub。用戶必須
把私鑰放在identification文件中,缺省是~/.ssh2/目錄,一個私鑰在這個文件中占一行,在公
鑰認(rèn)證中,每一行的開頭都有一個關(guān)鍵字IdKey,后跟一個私鑰文件名。如:
IdKey id_dsa_1024_a
IdKey my-other-ssh2-key
在服務(wù)器端的認(rèn)證文件~/.ssh2/authorization中,SSH2不包含公鑰的實(shí)際拷貝,只是把公鑰
文件列出來,前面用關(guān)鍵字kEY標(biāo)識。如:
Key id_dsa_1024_a.pub
Key something-else.pub
這樣維護(hù)起來更容易,更方便。
OPENSSH對SSH-1連接使用的標(biāo)識和授權(quán)文件與SSH1完全相同,對于SSH-2連接,缺省
的密鑰則存儲在~/.ssh/id_dsa(private key)和~/.ssh/id_dsa.pub(public key)中,服務(wù)器上的授權(quán)
文件是~/.ssh/authorized_keys。
創(chuàng)建身份標(biāo)識用ssh-keygen命令。
OPENSSH的ssh-keygen可以支持SSH1中相應(yīng)程序的所有功能和選項(xiàng),它還新增了為SSH-2
連接生成DSA密鑰的能力。
$ ssh-keygen -t dsa -b 1024
-e -x 選項(xiàng)可把OPENSSH格式的密鑰存儲格式轉(zhuǎn)換成SSH2格式 (直接回車,按提示輸入轉(zhuǎn)
換文件名)
-i -X 選項(xiàng)把SSH2格式的密鑰轉(zhuǎn)換成OPENSSH格式。這樣可用SSH2客戶端連接
OPENSSH服務(wù)器。(直接回車,按提示輸入轉(zhuǎn)換文件名)
-y 如果不小心刪掉了OPENSSH的公鑰,可用-y恢復(fù)。
-l 可計(jì)算出公鑰的指紋,指紋是鑒別位置不同的兩個密鑰是否相同的常用的一種密碼學(xué)技
術(shù)。這項(xiàng)技術(shù)用于不可能逐位對比兩個密鑰的情況。OPENSSH AND SSH2都能計(jì)算指紋。
它是根據(jù)密鑰計(jì)算出來一個長度較短的值,它是原理與校驗(yàn)和類似,用于驗(yàn)證一串信息(在
我們的例子中是密鑰)的不可替換性。
啟動代理
1、單shell方式,使用當(dāng)前登錄的shell. $ eval `ssh-agent`
2、子shell方式,派生出一個子shell,并繼承父shell的某些環(huán)境變量。 $ ssh-agent $SHELL
不要想當(dāng)然運(yùn)行 $ ssh-agent,這樣客戶端是無法有代理聯(lián)系的。刪除代理用kill命令就可以
了。
SSH-1 與 SSH-2代理的兼容性
SSH-1的代理不能處理SSH-2的代理,SSH-2的代理卻可以處理SSH-1的代理請求。
第七章 客戶端的高級用法
$ ssh -a -p 220 -c blowfish -l sally -i myself server.example.com 可通過配置文件簡化命令
輸入
Host myserver
ForwardAgent no
Port 220
Cipher blowfish
User sally
IdentifyFile myself
HostName server.example.com
配置了該文件后,就可以在客戶端簡單地輸入
$ ssh myserver
全局文件和本地文件
全局文件通常是由管理員創(chuàng)建的,用來維護(hù)整臺計(jì)算機(jī)上的客戶行為。該文件通常位于
/etc/ssh_config or /etc/ssh2/ssh2_config。每個客戶也可以在自已賬號中創(chuàng)建本地客戶配置文
件,通常是~/.ssh/config or ~/.ssh2/ssh2_config。本地配置文件優(yōu)先級高于全局配置文件。命
令行選項(xiàng)的優(yōu)先級又高于本地配置文件。
scp有關(guān)命令參數(shù)
-r 遞歸拷貝目錄
-p 保持文件權(quán)限和時間戳
-u 拷貝完成后刪除源文件
-d 防止覆蓋文件
-n 描述操作
-q 不顯示統(tǒng)計(jì)信息
第八章 每賬號服務(wù)器配置
這種配置可以讓SSH服務(wù)器區(qū)分每個服務(wù)器上的各個用戶。利用服務(wù)器目標(biāo)賬號的認(rèn)證文
件(authorized_keys)配置。局限有兩點(diǎn),它不能覆蓋編譯時配置和服務(wù)器范圍配置所采用
的安全措施,第二,如果使用公鑰認(rèn)證,每賬號配置是十分靈活的,如果采用可信主機(jī)和密
碼認(rèn)證,提供的選擇范圍就很小。
基于公鑰的配置
1、認(rèn)證文件的完全格式 依次包含三項(xiàng)內(nèi)容,一些選項(xiàng),公鑰和注釋。多個選項(xiàng)用逗號分
開。
2、用于限制客戶端可以在服務(wù)器上調(diào)用的程序的強(qiáng)制命令。如客戶端請求執(zhí)行/bin/ls命令,
而服務(wù)器端強(qiáng)制命令卻運(yùn)行/bin/who命令,它十分有用,可用于加強(qiáng)安全性,了為授權(quán)提供
方便。如要讓你的助手每次連接上來都運(yùn)行email命令程序pine,則可以這樣:
command= "/usr/local/bin/pine" ...key...。最多可給每個密鑰關(guān)聯(lián)一個強(qiáng)制命令,要關(guān)聯(lián)多個命
令可把這些命令放入遠(yuǎn)程主機(jī)的一個腳本中,并將該腳本作為強(qiáng)制命令運(yùn)行。如果強(qiáng)制命令
有shell出口,那會存在安全問題,等于沒有強(qiáng)制,客戶可以運(yùn)行任何程序。以下規(guī)則可以
用來判斷一個程序是否適合用作強(qiáng)制命令。
a、 避免使用具有shell出口的程序(如:文件編輯器vi,Emacs; 分頁程序 more,less;調(diào)用分
b、 頁的man,新聞閱讀程序rn,郵件閱讀程序pine以及調(diào)試程序adb,非交互的程序find,xargs
c、 等)。
b、避免使用編譯器,解釋器或其它可以讓用戶生成并運(yùn)行任意執(zhí)行代碼的程序。
c、可創(chuàng)建或刪除文件的程序,如cp,mv,rm,scp,ftp等。
d、避免使用setuid or setgid的程序,特別是setuid 是root的程序。
d、 如果使用腳本作為強(qiáng)制命令,就要遵循編寫安全腳本的傳統(tǒng)規(guī)則,在一個腳本之內(nèi),要
限制使用相對路徑作為搜索路徑,應(yīng)該使用絕對路徑來調(diào)用所有的程序;不要盲目地把
用戶提供的字符串作為命令來執(zhí)行;不要讓腳本執(zhí)行任何setuid的工作。不要調(diào)用具有
shell出口的程序。
e、考慮使用受限shell。
f. 為一個單獨(dú)的、專用的SSH密鑰(不要用你登錄的那個密鑰)關(guān)聯(lián)一個強(qiáng)制命令。這樣
不會影響你的登錄能力就可以方便地禁用該密鑰。
g、禁用不必要的SSH特性。如no-port-forwarding,no-agent-forwarding,no-pty(禁用tty分配)。
幾個常用的強(qiáng)制命令介紹:
使用定制消息拒絕連接:command="/bin/echo Sorry,buddy,but you've terminated!" ...key... 千萬
不要用more and less之類的分頁程序
顯示命令菜單:利用腳本
檢查客戶端的原始程序:command="/bin/echo you tried to invoke
$SSH_ORIGINAL_COMMAND" ...key... $SSH_ORIGINAL_COMMAND環(huán)境變量保存著
客戶連接時運(yùn)行的原始命令。
限制客戶端的原始命令,創(chuàng)建一個腳本,該腳本根據(jù)$SSH_ORIGINAL_COMMAND內(nèi)容選
擇不同的操作。
把客戶端的原始命令記錄在日志中:也是根據(jù)$SSH_ORIGINAL_COMMAND變量來做的一
個腳本。腳本內(nèi)容如一:
#!/bin/sh
if [ -n "$SSH_ORIGINAL_COMMAND" ]
then
echo "`/bin/date`: $SSH_ORIGINAL_COMMAND" >> $HOME/ssh-command-log
exec $SSH_ORIGINAL_COMMAND
fi
3、限制來自特定主機(jī)的連接。由from選項(xiàng)完成。from="client.example.com" ...key...。強(qiáng)制
連接必須來自client.example.com。否則斷開。from="!client.example.com" ...key...表示拒絕該
地址的連接。支持通配符。SSH2不支持該功能。但可以通過$SSH2_CLIENT變量提取客戶
ip,編寫強(qiáng)制命令腳本達(dá)到同樣效果。
4、為遠(yuǎn)程程序設(shè)置環(huán)境變量。environment="EDITOR=emacs" ...key...,為每個連接修改默認(rèn)的
環(huán)境變量。
5、設(shè)置空閑超時時間,這樣如果客戶端用戶不再發(fā)送數(shù)據(jù)就強(qiáng)制將其斷開。idle-timeout=5m,
該選項(xiàng)會覆蓋服務(wù)器范圍配置。
6、對到達(dá)的SSH連接禁用某些特性,例如端口轉(zhuǎn)發(fā)和tty分配。禁用tty分配會使客戶端沒
有交互會話的能力。$SSH_TTY變量可顯示tty情況。
用戶的rc文件
ssh服務(wù)器會在每個連接到達(dá)時調(diào)用shell腳本/etc/sshrc,用戶可把一些登錄后想運(yùn)行的腳本
寫到這個文件中。用戶可以在自已的目錄下定義類似的腳本,如果有自定義的~/.ssh/rc則
/etc/sshrc則不會執(zhí)行。
共2頁: 1 [2] 下一頁 | ||
|