• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            elva

            ssh配置權威指南

            第一章 SSH簡介
            ssh(secure shell)是一種通用,功能強大的基于軟件的網絡安全解決方案,計算機每次向網絡
            發送數據時,SSH都會自動對其進行加密。數據到達目的地時,SSH自動對加密數據進行
            解密。整個過程都是透明的。它使用了現代的安全加密算法,足以勝任大型公司的任務繁重
            的應用程序的要求。

            SSH協議內容涉及認證AUTHENTICATION,加密ENCRYPTION,和網絡上傳輸數據的完整
            性INTEGRITY。

            SSH特性概述
            1、遠程登錄
            $ ssh -l root host.example.com
            2、安全文件傳輸
            $ scp myfile metoo@secondacount.com
            3、安全執行遠程命令,能確保傳輸的數據安全。
            4、密鑰和代理
            基于密鑰的認證方法不用記住多個帳號密碼。
            5、訪問控制,能授權別人訪問自已帳號。
            6、端口轉發
            $ ssh -L 3002:localhost:119 xxx.xxx.com

            相關安全技術
            rsh命令族,rsh,rlogin and rcp。連接不加密,認證模型十分脆弱。
            PGP加密程序。它是基于文件的。
            Kerberos認證系統,用于網絡可能被監視,而且計算機不是中心控制的環境。基于麻省理工
            學院的Athena項目。它SSH不是,SSH是輕量級的,容易部署。Kerberos使用前必須構建
            一些重要基礎。
            IPSEC,Internet安全協議。
            SRP,安全遠程密碼協議,是Stanford大學開發的。是一種專用的認證協議。
            SSL,安全套接字。
            stunnel,是一種SSL工具,它為UNIX環境現有的基于TCP的服務(POP,IMAP等)增加
            SSL保護,而不用修改服務器源程序。

            第二章 SSH客戶端的基本用法
            最常用功能,1、經由安全連接登錄到遠程計算機。2、通過安全連接在計算機間拷貝文件。

            當你第一次連接SSH服務器時,出現問答時要回答“yes”,把已知名主機的密鑰的公共部
            分拷貝一份存在本地。之后你每次連接這臺服務器,就用這個公鑰來驗證遠程主機。最好是
            能在首次連接前就能獲得這個公鑰,否則第一次連接服務器時你可能已受到中間人攻擊。

            使用密鑰進行認證,SSH支持公鑰認證,可以使用加密密鑰,密鑰比密碼更安全。
            SSH證書使用一對密鑰,一個私鑰,一個公鑰,私鑰只保存你獨有的一些秘密信息。SSH
            用其向服務器證明自已的身份。公鑰是公開的,可以隨便將其放入SSH服務器上自已的帳
            號中,在認證時,進行私鑰和公鑰協商,如果匹配,那么身份就得以證明,認證就成功。

            在使用公鑰認證以前,首先要進行一些設置:
            1、需要一對密鑰,還需要使用一個口令來保護自已的私鑰。
            使用ssh-keygen程序生成一對密鑰。如果不存在SSH目錄,程序為自動創建本地SSH目錄
            ~/.ssh,并將所生成的密鑰分成兩個文件存儲,公有部份identity.pub,私有部分identity,或
            id_dsa_1024_a,id_dsa_1024_a.pub(ssh2)。
            2、需要在SSH服務器上安裝自已的公鑰。
            通過配置SSH目錄中的一個文件實現,對于SSH1 AND OPENSSH來說該文件是
            ~/.ssh/authorized_keys。對SSH2來說是~/.ssh2/authorization。OPENSSH中的SSH-2連接自
            3.0版本起也一同使用authorized_keys文件。3.0版本前的使用authorized_keys2。把用戶本
            地機器生成identity.pub文件內容加入其中。對SSH2來說,用戶需編輯兩個文件,一個客
            戶端一個在服務器端,
            在客戶端,要創建或編輯文件~/.ssh2/identification并在其中插入一行,說明自已的私鑰文件
            名: IdKey id_dsa_1024_a.
            在服務器端,要創建或編輯文件~/.ssh2/authorization,該文件包含有公鑰信息,每行一個,
            但和SSH1的authorized_keys文件不同(authorized_keys中包含有公鑰的拷貝),authorization
            中只給出公鑰文件名:Key id_dsa_1024_a.pub。最后,把這個文件從本地機器上拷貝到服務
            器~/.ssh2中。為安全起見,要確保ssh目錄的安全,只有所有者才有權寫入。如果遠程用戶
            的SSH配置文件的權限設置不當,服務器可能會拒絕進行認證。

            公鑰認證比密碼認證更安全,因為:
            1、 公鑰認證需要兩個加密部份(磁盤上的identify文件和用戶頭腦中的口令),入侵都必須
            2、 具備兩種條件才行。密碼認證只需要一個部份,那就是密碼,它可能更容易被竊取。
            3、 在公鑰認證中,口令和密鑰都不用發給遠程主機,只要把前面討論的認證者發給遠程主
            4、 機就可以了,因此,并沒有秘密信息傳出客戶端。
            3、機器生成的密鑰是不可能猜測出來的,而人生成的密碼容易受到字典攻擊。
            通過禁用密碼認證并只允許使用密鑰認證能極大提高主機的安全性。

            如果要修改密鑰
            如果已經生成一個密鑰對,并把公鑰拷貝到多個SSH服務器上了,用戶有一天決定修改自
            已的身份,因為再運行ssh-keygen。這樣,就會覆蓋identify and identify.pub文件,用戶之
            前的公鑰就沒用了,必須把新公鑰再次拷貝到各個服務器上。這是很頭疼的,所以建議:
            1、 不能局限于僅僅使用一個密鑰對,可隨意生一此密鑰對,將其保存在不同的文件中,并
            2、 將其用作不同的用途。
            3、 如果只是想修改口令,就不必重新生成一個密鑰對,ssh-keygen有一個命令行選項可以
            4、 替換現有的密鑰口令。ssh1 and openssh是-p,對于ssh2是-e。這樣,因為私鑰沒變,所以
            5、 公鑰依然不效,中需使用新口令對私鑰進行解密就可以了。

            ssh代理
            它可以把私鑰保存在內存中,為認證提供服務,不用重復輸入密碼。直到用戶退出為止。代
            理程序是ssh-agent。可手工運行也可編輯~/.login 或~/.xsession來自動運行。
            $ ssh-agent $SHELL 其中SHELL是用戶登錄shell的環境變量。運行該命令后,打開另外
            一個shell,在這個shell中可以訪問代理。
            接著用ssh-add命令裝入私鑰。這樣,使用ssh and scp命令就不用再提醒輸入口令了。口令
            裝入內存中。如果用戶正運行x window系統,并設置了DISPLAY環境變量,而標準輸入
            不是終端,那么ssh-add就使用一個圖形化X程序ssh-askpass來讀取口令。要強制ssh-add
            使用X來讀取口令,請在命令行中輸入ssh-add < /dev/null。
            -l 參數顯示內存中的密鑰
            -d 參數從代理中刪除密鑰 $ ssh-add -d ~/.ssh/id_xxx.pub
            -D 是刪除所有密鑰
            -t 對加載的密鑰設置超時時間,超時代理將自動卸載密鑰。
            -L -U 對代理進行加鎖和解鎖,當你離開計算機而不想退出登錄時有用。


            代理轉發
            可能通過代理轉發功能,可以用SCP把文件從遠程SSH服務器上拷貝到第三方SSH主機上。
            條件是你在第三方SSH主機上必須有一個帳號。具體操作是這樣的:
            1、 在本地主機上運行命令:# scp pat@shell.isp.com:print-me
            2、 psmith@other.host.net:other-print-me
            2、這個scp進程與本地代理進行聯系,并讓用戶和shell.isp.com進行認證。
            3、自動在shell.isp.com上執行第二個scp,用來把文件拷貝到other.host.net主機上。
            3、 由于啟用了代理轉發(SSH1 AND SSH2默認是打開的,openssh默認是關閉的),因此
            4、 shell.isp.com上的SSH服務器就充當一個代理。
            5、第二個scp進程通過聯系shell.isp.com上的代理試圖讓用戶和other.host.net進行認證。
            5、 shell.isp.net上ssh服務器秘密與用戶的本地代理進行通信,從而構建出一個認證者來提
            6、 供用戶的證書并將其傳回服務器。
            7、服務器為第二個scp進程驗證用戶的身份,other.host.net上的認證獲得成功。
            8、開始拷貝文件。
            由于代理轉發不會把私鑰發送到遠程主機上,而是把認證返回第一臺機進行處理,因此密鑰
            是安全的。

            不用密碼或口令進行連接方式
            1、使用代理的公鑰認證。
            2、可信主機認證。
            3、Kerberos認證。
            在后文中將會討論這些方式的優缺點。

            sftp
            它是在SSH上的一個獨立文件傳輸工具,操作與ftp類似,可以在一個會話中調用多個命令
            進行文件拷貝和處理,而scp每次調用時都要打開一個會話。sftp不區分ascii and binary傳
            輸模式,只使用二進制模式,因此,如果使用它在windows and unix之間拷貝ascii文件,
            那么就不能正確轉換行結束符。

            第三章 SSH內幕
            SSH協議的主要特性和優點:
            1、 使用強加密技術來保證數據的私密性。端到端通信用隨機密鑰進行加密,隨機密鑰為會
            話進行安全協商,會話結束后被丟棄。支持的算法有ARCFOUR,Blowfish,DES,IDEA,3DES等。
            2、通信完整性,確保通信不會被修改。SSH-2基于MD5 AND SHA-1的加密hash算法。
            3、認證,即發送者和接收者的身份證明。客戶機和服務器雙向認證。
            4、授權,即對賬號進行訪問控制。
            5、使用轉發或隧道技術對其它基于tcp/ip的會話進行加密。支持三種轉發,tcp端口轉發,
            X轉發,代理轉發。

            SSH可以防止的攻擊
            1、網絡竊聽,SSH通信是加密的,即使截獲會話內容,也不能將其解密。
            2、名字服務和IP偽裝,SSH通過加密驗證服務器主機身份可避免這類風險。
            3、連接劫持,SSH的完整性檢測負責確定會話在傳輸過程是否被修改,如果被修改過,就
            關閉連接。
            4、 中間人攻擊,SSH利用兩種方法防止這種攻擊,第一種是服務器主機認證。除非攻擊者
            已經成功攻擊了服務器主機,獲得服務器的私有主機密鑰。第二種是限制使用容易受到
            這種攻擊的認證方法,密碼認證容易受到中間人攻擊,而公鑰和基于主機的/RhostsRSA
            則對中間人攻擊可以免疫。
            5、插入攻擊,這種攻擊可以客戶和服務器之間發送的正文數據流之間插入任意數據。ssh1
            1.2.25后和openssh的所有版本都專門進行了設計,來檢測并防止這種攻擊。這種檢測程序
            增大了插入攻擊的難度,但是并不能完全防止。ssh2使用強加密完整性檢測手段來防止這個
            問題。可以用3DES算法來防止這種攻擊。

            SSH不能防止的攻擊
            1、 密碼崩潰,密碼認證是一種脆弱的認證形式,盡量使用公鑰認證方式。如果必須要密碼
            認證,可考慮使用S/Key之類的一次性密碼機制。
            2、 IP AND TCP攻擊,由于SSH是在TCP之上進行操作的,因此容易受到針對TCP和IP
            缺陷而發起的攻擊。SYN flood,TCP不同步和TCP劫持等。只能通過更低層的防護措施
            來保護。
            3、流量分析。
            4、隱秘通道。
            5、粗心大意。安全是一個過程,而不是一個產品,不要認為裝上SSH就安全了。

            第四章 SSH的安裝和編譯時配置

            第五章 服務器范圍的配置
            sshd可以在三個層次上進行配置,第一層次是上面的安裝和編譯時配置;第二層次是本章的
            服務器范圍配置;第三層次是每賬號配置(第八章),前者是服務器編譯時就指定了包含哪
            些特定功能,不包含哪些功能,后者則是由終端用戶來修改自已賬號所使用的服務器的行為。

            以普通用戶身份運行SSH服務器
            1、得到管理員許可。
            2、生成一個主機密鑰。
            $ ssh-keygen -N '' -b 1024 -f ~/myserver/hostkey 生成hostkey and hostkey.pub兩個文件
            3、選擇端口號。 要選擇大于或等1024的端口,因為只有超級用戶才有權使用小于
            1024的端口 。
            4、創建服務器配置文件(可選) 可創建自已的配置文件,否則,服務就使用內建的特性或使
            用服務器范圍的配置文件。
            啟動服務器方式:$ sshd -h ~/myserver/hostkey -p 2345 -f ~/myserver/config
            由普通用戶運行的服務器有一些缺點:
            1、由于不是由root的uid下運行,因此只能連接到用戶自已的賬號上。
            2、它需手工調用,不能自啟動。
            3、 日志用戶沒權看到,因為服務器把它寫到syslog日志系統中,但可用調試模式運行服務
            4、 器,這樣信息就顯示在終端機上。

            服務器配置文件
            SSH1 AND OPENSSH的配置文件通常是/etc/sshd_config,而SSH2的配置文件通常是
            /etc/ssh2/sshd2_config。

            以非缺省的配置文件來調用sshd,可以使用命令 -f 選項。$ sshd -f /usr/local/ssh/my_config。

            以*號作為標號的語名都會被sshd忽略。

            修改完配置后,修改不會馬上影響到服務器,可重啟服務器或發送SIGHUP信號。$ kill -HUP
            `cat /etc/sshd.pid`

            如果在命令行改動了配置,用SIGHUP信號重啟服務器不能覆蓋命令行的配置,它的優先
            級高。

            主機密鑰,sshd主機密鑰向SSH客戶端唯一地標識SSH服務器。主機密鑰保存在一對文件
            中,一個文件包含私鑰,一個文件包含公鑰。對于SSH1 AND OPENSSH,它是
            /etc/ssh_host_key。文件位置可用HostKey關鍵字修改 HostKey /usr/local/ssh/key。服務器的
            公鑰保存在.pub文件中。
            OPENSSH服務器有一個SSH-2的主機密鑰,缺省是在/etc/ssh_host_dsa_key。其位置可用
            HostDsaKey /usr/local/openssh/key2修改。

            對于SSH2,如果服務器是由超級用戶運行,缺省私鑰文件是/etc/ssh2/hostkey。如果是其它
            用戶運行,則在~/.ssh2/hostkey。可用HostKeyFile /etc/local/ssh/key修改。公鑰是hostkey.pub
            文件,可用publicHostKeyFile關鍵字修改。

            可以用命令行選項指定私鑰文件:$ sshd -h /usr/local/ssh/key。

            隨機數種子文件
            如果用戶的系統中有一個隨機位源,如/dev/urandom,那么OPENSSH就不能創建隨機數種
            子文件。

            服務器配置文件
            通常是/etc/sshd_config /etc/ssh2/ssh2_config,可以用-f 選項重新指定其配置文件。可用于一
            臺機器運行多個sshd的情況。

            每賬號認證文件。~/.ssh/authorized_keys 。


            文件權限
            由于配置文件的權限設置錯誤,會降低系統的安全性,所以可以設置StrictModes YES/NO
            關鍵字,對sshd的重要文件和目錄的權限進行檢查,如果檢查失敗,服務器就拒絕對該用
            戶的SSH連接。

            在多宿主主機上,使用ListenAddress xxx.xxx.xxx.xxx來限制SSH只監聽一個網絡接口。

            空閑連接時間,IdleTimeout xx 如果是0代表什么都不做,保持連接。否則,超時就斷開連
            接,可以用s,m,h,d,w表示。

            KeepAlive YES/NO 可以斷開失效的連接,比如客戶端崩潰。

            失敗的登錄
            LogingGraceTime 60 限定用戶必須在60秒內成功進行認證。 0值表禁用。命令行選項用
            -g

            PasswordGuesses 5 如果連接請求使用密碼認證,那么sshd2就只允許客戶端嘗試五次。
            (SSH2)

            限制并發連接
            MaxConnections 32 最大32個連接(SSH2)

            逆向IP映射
            SSH2服務器可以根據客戶端地址進行逆向DNS查詢,以確保客戶端的地址就是這個地址。
            如果檢查失敗,連接拒絕。
            RequireReverseMapping yes (ssh2)

            轉發
            AllowTcp-Forwarding yes
            X11Forwarding yes

            服務器密鑰生成
            該密鑰用來對客戶端/服務器之間的通信進行保護。是臨時的,永遠不會保存在磁盤上。服
            務器在啟動時生成這個密鑰。并以固定的周期重新生成。缺省長度是768位,最小為512,
            可以ServerKeyBits 2048 指定長度。用KeyRegenerationInterval 1200指定周期。 命令行選
            項:-k

            加密算法
            Ciphers any 允許所有支持算法。其它算法包括
            3des-cbc,blowfish-cbc,twofish-cbc,arcfour,none

            mac算法
            MAC關鍵字可以讓用戶選擇sshd2進行完整性檢測所使用的算法,稱為消息認證代碼。用
            于sshd2的有hmac-sha1,hmac-md5,hmac-md5-96。

            在OPENSSH中,用戶可以用Protocol關鍵字選擇支持SSH-1 AND SSH-2,1 代表SSH-1,2 代
            表SSH-2, 1,2 代表都支持。

            允許用戶登錄:認證和訪問控制
            1、認證負責對發起連接請求的用戶的身份進行驗證。
            密碼認證
            PasswordAuthentication yes AllowedAuthentications password (ssh2)
            公鑰認證
            RSAAuthentication yes (ssh1,openssh/1)
            AllowedAuthentications publickey (ssh2)
            DEAAuthentication yes (openssh/2)
            Rhosts認證,可信主機認證通過檢查遠程主機名和相關用戶名來實現對客戶端的身份認證。
            RhostsAuthentication yes (ssh1,openssh)
            IgnoreRhosts yes (ssh1,ssh2,openssh)不使用系統的hosts.equiv and ~/.rhosts,使用SSH專用
            的/etc/shosts.equiv and ~/.shosts
            強可信主機認證。
            RhostsRSAAuthentication yes ssh1,openssh
            AllowedAuthentications hostbased ssh2
            提取已知名主機的公鑰
            UserKnownHosts no ssh2
            IgnoreUserKnownHosts yes openssh
            PGP認證
            Kerberos認證
            S/key認證
            SecurID認證
            PAM認證

            2、訪問控制負責允許或禁止來自特定用戶、機器在或INTERNET域的SSH連接到服務器
            上。
            通常,只要設置正確,任何賬號都可以接收SSH連接,這種訪問權限可以使用服務器關鍵
            字AllowUsers and DenyUsers覆蓋。
            AllowUsers smith
            如果配置文件中單獨出現一個AllowUsers,后面沒有任何內容,就表示禁止所有沒提到的用
            戶連接,如果沒有AllowUsers這個關鍵字,則所有用戶都可連接。DenyUsers表示禁止連接。
            可用通配符,

            可以用組訪問控制AllowGroups DenyGroups

            主機名訪問控制
            AllowHosts hostname
            DenyHosts hostname

            超級用戶的訪問控制
            sshd對超級用戶專門使用一種特殊的訪問機制,PermiRootLogin來允許或禁止使用SSH來
            訪問root賬號。

            顯示用戶的歡迎信息
            PrintMotd yes/no default is yes

            顯示郵件信息
            CheckMail yes/no default is yes

            空密碼
            PermitEmptyPasswords yes/no 如果使用密碼認證,并且有個賬號沒有設定密碼,那么服務
            器就可以拒絕訪問這個賬號

            如果系統中存在/etc/nologin,那么sshd就只允許root用戶登錄,其它都不能登錄。因此,touch
            /etc/nologin是把訪問權只授給系統管理員的一種快速方法。這樣并不需要重新配置ssh。也
            不需要重啟ssh。

            子系統
            定義和調用遠程命令的一個抽象層,用戶可以通過在客戶端命令行中給出命令來調用遠程命
            令,如:ssh server.examply.com /bin/tar c /home 這個命令調用tar,遠程把/home拷貝到磁帶上。
            子系統是服務器機器上預定義的一組遠程命令,這樣就可以方便地執行。在服務器配置文檔
            中定義:subsystem backups /bin/tar c /home,要在服務器上運行該命令,可以使用 -s 選項。
            ssh -s backups server.example.com。缺省情況下,sshd_config中定義了一個子系統,subsystem
            sftp 。不要刪除這個子系統,這是scp2和sftp必須的。

            日志
            Fascisl Logging mode 把調試信息打印到系統日志文件中,可以使用FascistLogging關鍵字
            啟用。
            調試模式 可以使用-d命令選項啟用
            安靜模式 只能輸出嚴重錯誤,而不能輸出 普通日志,可以使用QuietMode關鍵字或-q
            命令行啟用。
            openssh中的日志配置關鍵字是SyslogFacility and LogLevel。SyslogFacility設置syslog的
            facility(KERN,DAEMON,USER,AUTH,MAIL等),LogLevel記錄日志提供的詳細程度,該
            值從低到高順序是:QUIET,FATAL,ERROR,INFO,VERBOSE,DEBUG,使用DEBUG會侵犯用
            戶的隱私權,這個級別只能用于診斷,而不能用于普通操作。


            第六章 密鑰管理與代理
            一個身份標識由兩部份組成,分別稱為私鑰(Private Key)和公鑰(Public Key),合稱一個
            密鑰對。

            SSH1,SSH2 AND OPENSSH身份標識文件的格式各不相同。
            SSH1缺省設置中,私鑰存儲在文件identity中,公鑰存儲在文件identity.pub中。這個密鑰
            對存放在~/.ssh目錄下,在使用前,把公鑰拷貝到服務器上的一個認證文件里,如SSH1 AND
            OPENSSH中的~/.ssh/authorized_keys,此后,當客戶請求連接到你的服務器上的帳號時,就
            會用一個私鑰作為證明身份的標識,服務器則在authorized_keys文件中尋找與之匹配的公
            鑰。

            SSH2密鑰對文件的命名通常是根據該密鑰使用的加密算法的性質來起的,例如一個用DSA
            加密的1024位密鑰生成時其缺省文件名是id_dsa_1024_a and id_dsa_1024_a.pub。用戶必須
            把私鑰放在identification文件中,缺省是~/.ssh2/目錄,一個私鑰在這個文件中占一行,在公
            鑰認證中,每一行的開頭都有一個關鍵字IdKey,后跟一個私鑰文件名。如:
            IdKey id_dsa_1024_a
            IdKey my-other-ssh2-key
            在服務器端的認證文件~/.ssh2/authorization中,SSH2不包含公鑰的實際拷貝,只是把公鑰
            文件列出來,前面用關鍵字kEY標識。如:
            Key id_dsa_1024_a.pub
            Key something-else.pub
            這樣維護起來更容易,更方便。

            OPENSSH對SSH-1連接使用的標識和授權文件與SSH1完全相同,對于SSH-2連接,缺省
            的密鑰則存儲在~/.ssh/id_dsa(private key)和~/.ssh/id_dsa.pub(public key)中,服務器上的授權
            文件是~/.ssh/authorized_keys。

            創建身份標識用ssh-keygen命令。

            OPENSSH的ssh-keygen可以支持SSH1中相應程序的所有功能和選項,它還新增了為SSH-2
            連接生成DSA密鑰的能力。
            $ ssh-keygen -t dsa -b 1024
            -e -x 選項可把OPENSSH格式的密鑰存儲格式轉換成SSH2格式 (直接回車,按提示輸入轉
            換文件名)
            -i -X 選項把SSH2格式的密鑰轉換成OPENSSH格式。這樣可用SSH2客戶端連接
            OPENSSH服務器。(直接回車,按提示輸入轉換文件名)
            -y 如果不小心刪掉了OPENSSH的公鑰,可用-y恢復。
            -l 可計算出公鑰的指紋,指紋是鑒別位置不同的兩個密鑰是否相同的常用的一種密碼學技
            術。這項技術用于不可能逐位對比兩個密鑰的情況。OPENSSH AND SSH2都能計算指紋。
            它是根據密鑰計算出來一個長度較短的值,它是原理與校驗和類似,用于驗證一串信息(在
            我們的例子中是密鑰)的不可替換性。

            啟動代理
            1、單shell方式,使用當前登錄的shell. $ eval `ssh-agent`
            2、子shell方式,派生出一個子shell,并繼承父shell的某些環境變量。 $ ssh-agent $SHELL
            不要想當然運行 $ ssh-agent,這樣客戶端是無法有代理聯系的。刪除代理用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

            全局文件和本地文件
            全局文件通常是由管理員創建的,用來維護整臺計算機上的客戶行為。該文件通常位于
            /etc/ssh_config or /etc/ssh2/ssh2_config。每個客戶也可以在自已賬號中創建本地客戶配置文
            件,通常是~/.ssh/config or ~/.ssh2/ssh2_config。本地配置文件優先級高于全局配置文件。命
            令行選項的優先級又高于本地配置文件。

            scp有關命令參數
            -r 遞歸拷貝目錄
            -p 保持文件權限和時間戳
            -u 拷貝完成后刪除源文件
            -d 防止覆蓋文件
            -n 描述操作
            -q 不顯示統計信息


            第八章 每賬號服務器配置
            這種配置可以讓SSH服務器區分每個服務器上的各個用戶。利用服務器目標賬號的認證文
            件(authorized_keys)配置。局限有兩點,它不能覆蓋編譯時配置和服務器范圍配置所采用
            的安全措施,第二,如果使用公鑰認證,每賬號配置是十分靈活的,如果采用可信主機和密
            碼認證,提供的選擇范圍就很小。

            基于公鑰的配置
            1、認證文件的完全格式 依次包含三項內容,一些選項,公鑰和注釋。多個選項用逗號分
            開。
            2、用于限制客戶端可以在服務器上調用的程序的強制命令。如客戶端請求執行/bin/ls命令,
            而服務器端強制命令卻運行/bin/who命令,它十分有用,可用于加強安全性,了為授權提供
            方便。如要讓你的助手每次連接上來都運行email命令程序pine,則可以這樣:
            command= "/usr/local/bin/pine" ...key...。最多可給每個密鑰關聯一個強制命令,要關聯多個命
            令可把這些命令放入遠程主機的一個腳本中,并將該腳本作為強制命令運行。如果強制命令
            有shell出口,那會存在安全問題,等于沒有強制,客戶可以運行任何程序。以下規則可以
            用來判斷一個程序是否適合用作強制命令。
            a、 避免使用具有shell出口的程序(如:文件編輯器vi,Emacs; 分頁程序 more,less;調用分
            b、 頁的man,新聞閱讀程序rn,郵件閱讀程序pine以及調試程序adb,非交互的程序find,xargs
            c、 等)。
            b、避免使用編譯器,解釋器或其它可以讓用戶生成并運行任意執行代碼的程序。
            c、可創建或刪除文件的程序,如cp,mv,rm,scp,ftp等。
            d、避免使用setuid or setgid的程序,特別是setuid 是root的程序。
            d、 如果使用腳本作為強制命令,就要遵循編寫安全腳本的傳統規則,在一個腳本之內,要
            限制使用相對路徑作為搜索路徑,應該使用絕對路徑來調用所有的程序;不要盲目地把
            用戶提供的字符串作為命令來執行;不要讓腳本執行任何setuid的工作。不要調用具有
            shell出口的程序。
            e、考慮使用受限shell。
            f. 為一個單獨的、專用的SSH密鑰(不要用你登錄的那個密鑰)關聯一個強制命令。這樣
            不會影響你的登錄能力就可以方便地禁用該密鑰。
            g、禁用不必要的SSH特性。如no-port-forwarding,no-agent-forwarding,no-pty(禁用tty分配)。
            幾個常用的強制命令介紹:
            使用定制消息拒絕連接: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環境變量保存著
            客戶連接時運行的原始命令。
            限制客戶端的原始命令,創建一個腳本,該腳本根據$SSH_ORIGINAL_COMMAND內容選
            擇不同的操作。
            把客戶端的原始命令記錄在日志中:也是根據$SSH_ORIGINAL_COMMAND變量來做的一
            個腳本。腳本內容如一:
            #!/bin/sh
            if [ -n "$SSH_ORIGINAL_COMMAND" ]
            then
            echo "`/bin/date`: $SSH_ORIGINAL_COMMAND" >> $HOME/ssh-command-log
            exec $SSH_ORIGINAL_COMMAND
            fi

            3、限制來自特定主機的連接。由from選項完成。from="client.example.com" ...key...。強制
            連接必須來自client.example.com。否則斷開。from="!client.example.com" ...key...表示拒絕該
            地址的連接。支持通配符。SSH2不支持該功能。但可以通過$SSH2_CLIENT變量提取客戶
            ip,編寫強制命令腳本達到同樣效果。
            4、為遠程程序設置環境變量。environment="EDITOR=emacs" ...key...,為每個連接修改默認的
            環境變量。
            5、設置空閑超時時間,這樣如果客戶端用戶不再發送數據就強制將其斷開。idle-timeout=5m,
            該選項會覆蓋服務器范圍配置。
            6、對到達的SSH連接禁用某些特性,例如端口轉發和tty分配。禁用tty分配會使客戶端沒
            有交互會話的能力。$SSH_TTY變量可顯示tty情況。

            用戶的rc文件
            ssh服務器會在每個連接到達時調用shell腳本/etc/sshrc,用戶可把一些登錄后想運行的腳本
            寫到這個文件中。用戶可以在自已的目錄下定義類似的腳本,如果有自定義的~/.ssh/rc則
            /etc/sshrc則不會執行。

            第九章 端口轉發與X轉發
            使用SSH對其它應用程序在別的TCP端口上建立的TCP/IP傳輸進行加密和解密,這一過
            程稱為端口轉發,其絕大多數操作都是透明的,功能非常強大。TELNET,SMTP,NNTP,IMAP
            和一些基于TCP的不安全協議都可變得安全,只要將其連接通過SSH轉發即可。端口轉發
            有時又叫做隧道傳輸。
            例子:一個運行IMAP的服務器S,在家里的主機H上運行一個email程序,現在想用ssh
            保護IMAP連接。
            $ ssh -L2001:localhost:143 S
            -L 表明是本地轉發,,上面這命令可完成登錄到S的功能,現在的這個SSH會話同時將H
            的2001端口轉發到S的143端口,在退出會話之前一直有效。并告知email程序使用被轉
            發的端口,通常郵件程序連接服務器的143端口,即套接字 (S,143)。現在要令其連接
            本地主機H自已的2001端口,也就是套接字(localhost,2001)。創建本地轉發時可以不用-L
            選項,而在客戶端配置文件中用LocalForward關鍵字。
            LocalForward 2001 localhost:143 ssh1 openssh
            LocalForward "2001:localhost:143" ssh2

            -g 選項和GatewayPorts yes/no關鍵字可以配置除本地主機外的機器是否能使用本地的端口
            轉發功能。出于安全問題,該禁止這個功能。

            遠程轉發端口與本地轉發幾乎完全相同,只是方向相反。此時服務器在本地,轉發連接由遠
            程主機發起。假設你已登錄進服務器S。則
            $ ssh -R2001:localhost:143 H
            -R代表遠程轉發。命令執行后,一條從遠程主機H的2001端口到服務器S的143端口的安
            全隧道就建立起來了。H上的任何程序都可以通過連接(localhost,2001)來使用此安全隧道。
            而在客戶端配置文件中用RemoteForward關鍵字.
            RemoteForward 2001 S:143 ssh openssh
            RemoteForward "2001:S:143" ssh2

            $ ssh -o ClearAllForwardings=yes server.example.com 阻止第二條命令建立隧道

            本地轉發與遠程轉發
            在本地轉發中,應用程序客戶端與監聽端同SSH客戶端在一起,應用程序服務器與連接端
            同SSH服務器在一起。
            在遠程轉發中,應用程序客戶端與監聽端同SSH服務器在一起,應用程序服務器與連接端
            同SSH客戶端在一起。

            無遠程登錄的端口轉發,連接時帶-f參數。一次性轉發用-fo,ssh1與openssh不支持這個功
            能,但可用以下語句實現:
            $ ssh -f -L2001:localhost:143 server sleep 10

            終止
            如果一個SSH會話現在還在活動當中,終止會出錯。在SSH2中,如果退出有活動轉發連
            接的會話,該會話會依然打開,但會轉到后臺運行。直到轉發連接終止。ssh1 and openssh
            與此相反,如果要斷開還在活動的會話,會出現警告,仍然在前臺運行。

            TIME_WAIT問題。在某些情況下,TCP連接斷連時,其一端的套接字在很短一段時間內變
            得不可用,所以在斷連過程結束前不能把該端口用于TCP轉發。






            第十章 推薦配置
            服務器范圍配置
            1、禁用其它訪問方式。
            關掉r-命令,方法如下:刪除/etc/hosts.equiv文件,或改為只讀空文件。禁用rshd,rlogind and
            rexecd,通過修改inetd.conf文件。
            2、/etc/sshd_config配置
            HostKey /etc/ssh_host_key
            PidFile /etc/sshd.pid
            RandomSeed /etc/ssh_random_seed

            StrictModes yes 要求用戶保護其與SSH有關的文件及目錄
            Umask 0077 保證所有SSHD1創建是文件和目錄都只能由其所有者(SSHD 運行的
            UID)讀取

            port 22
            ListenAddress 0.0.0.0
            IdleTimeout 15m 15分鐘空閑超時
            KeepAlive yes 客戶機死機時連接將會終止,而不會長期掛起。

            LoginGraceTime 30 登錄時成功認證的時限為30秒。

            ServerKeyBits 768 服務器密鑰長度
            KeyRegenerationInterval 3600 服務器密鑰一小時重新生成一次

            PasswordAuthentication no 禁用密碼認證
            RhostsAuthentication no 禁用可信主機認證
            RhostsRSAAuthentication no 禁用增強可信主機認證
            RSAAuthentication yes 啟用公鑰認證

            IgnoreRhosts yes 完全禁止SSHD使用.rhosts文件
            IgnoreRootRhosts yes

            UseLogin no 禁用UseLogin,防止萬一使用了其它登錄程序

            AllowHosts xxx 根據需要設置
            SilentDeny yes 任何被DenyHosts拒絕的連接都不會向用戶返回消息,不必告訴攻擊
            者發生了什么,可以增加了排錯的難度。

            PermitRootLogin nopwd 允許超級用戶通過SSH連接,但不能用密碼認證

            FascistLogging no 禁用FascistLogging日志方式,因為它會在日志中記錄用戶特定信息,對
            攻擊者有用。
            QuietMode no 禁用QuietMode日志方式,使用日志更詳細,敏感度更低

            AllowTcpForwarding yes 允許tcp端口轉發和X轉發,保護其它的tcp連接
            X11Forwarding yes

            3、/etc/ssh2/sshd2_config配置
            HostKeyFile /etc/ssh2/hostkey
            PublicHostKeyFile /etc/ssh2/hostkey.pub
            RandmoSeedFile /etc/ssh2/random_seed

            UserConfigDirectory
            IdentityFile
            AuthorizstionFile

            StrictModes yes

            port 22
            listenAddress 0.0.0.0
            KeepAlive yes
            RequireReverseMapping no

            LoginGraceTime 30

            由于sshd2沒有設置服務器密鑰的位數的關鍵字,用戶得在啟動時使用 -b 選項 $ sshd2 -b
            1024 ....

            AllowedAuthentications publickey
            RequiredAuthentications publickey

            IgnoreRhosts yes
            UserKnownHosts no 禁用該項可防止用戶給未知主機提供信任權限。

            PermitRootLogin nopwd


            Ciphers any 不能選none


            QuietMode no
            VerboseMode yes

            Ssh1Compatibility no 禁用SSH-1兼容模式
            #Ssh1Path /usr/local/ssh1/sshd1 出于實用原因,也可以啟用此模式,之前要指明ssh1服
            務器可執行文件位置

            4、每賬號配置
            對于SSH1 AND OPENSSH,~/.ssh/authorized_keys中的每一個密鑰都必須用適當的選項進
            行限制,from選項限制只能從特定的主機訪問特定的密鑰。例如,假設文件中包含你家那
            臺pc(myhome.isp.net)的公鑰,而其它機器根本不可能用那個密鑰來認證,我們就可以明確
            限定這一關系:from = "myhome.isp.net" ...key...。還要對適當的密鑰設置空閑超時時間:from
            = "myhome.isp.net" ,idle-timeout=5m ...key...。
            最后,考慮每一個密鑰是否需要對到達的連接使用端口轉發,代理轉發以及分配tty等,如
            果不需要,就可以分別用no-port-forwarding,no-agent-forwarding and no-pty禁用這些特性。

            5、密鑰管理
            至少創建1024位長的用戶密鑰,并用好的口令對密鑰進行保護。

            6、客戶端配置
            離開正在運行的ssh客戶端時,一定要用密碼保護。
            在客戶端配置文件中啟用某些安全功能,并將其設置為最強
            Host *
            FallBackToRsh no 禁止使用不安全的r-命令(ssh2)沒有這個問題。
            UseRsh no
            GatewayPorts no 禁止遠程客戶端連接本地的轉發端口
            StrictHostKeyChecking ask 在主機密鑰發生變化時提醒你。請求你的處理意見。
            配置“/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 * 
            選項“Host”只對能夠匹配后面字串的計算機有效。“*”表示所有的計算機。 

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

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

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

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

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

            PasswordAuthentication yes 
            “PasswordAuthentication”設置是否使用口令驗證。 

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

            UseRsh no 
            “UseRsh”設置是否在這臺計算機上使用“rlogin/rsh”。 

            BatchMode no 
            “BatchMode”如果設為“yes”,passphrase/password(交互式輸入口令)的提示將被禁止。
            當不能交互式輸入口令的時候,這個選項對腳本文件和批處理任務十分有用。 

            CheckHostIP yes 

            “CheckHostIP”設置ssh是否查看連接到服務器的主機的IP地址以防止DNS欺騙。建議設
            置為“yes”。 

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

            IdentityFile ~/.ssh/identity 
            “IdentityFile”設置從哪個文件讀取用戶的RSA安全驗證標識。 

            Port 22 
            “Port”設置連接到遠程主機的端口。 

            Cipher blowfish 
            “Cipher”設置加密用的密碼。 

            EscapeChar ~ 
            “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. 
            Port 22 
            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 
            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”設置如果用戶不能成功登錄,在切斷連接之前服務器需要等待的時間(以
            秒為單位)。 

            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地址。

            posted on 2007-09-06 10:48 葉子 閱讀(1572) 評論(0)  編輯 收藏 引用 所屬分類: 系統管理

            久久久久亚洲AV无码永不| 久久久久亚洲爆乳少妇无| 精品人妻伦九区久久AAA片69| 国产99久久久国产精品小说| 国产精品久久新婚兰兰| 亚洲AV无码久久| 国产亚州精品女人久久久久久 | 久久精品国产亚洲7777| 亚洲国产成人久久综合一区77 | 久久精品国产一区二区三区日韩| 久久综合九色综合久99| 久久天天躁狠狠躁夜夜躁2014| 国产午夜精品理论片久久影视| 武侠古典久久婷婷狼人伊人| 91精品国产综合久久久久久| 久久本道久久综合伊人| 久久久无码精品亚洲日韩按摩| 韩国三级中文字幕hd久久精品 | 办公室久久精品| 久久久久久久亚洲Av无码| 久久亚洲天堂| 久久久久久狠狠丁香| 亚洲乱码中文字幕久久孕妇黑人| 国产亚洲美女精品久久久 | 国产亚洲色婷婷久久99精品91 | 久久国产色AV免费看| 三级韩国一区久久二区综合| 亚洲嫩草影院久久精品| 久久天天躁狠狠躁夜夜躁2O2O| 2020久久精品亚洲热综合一本| 久久精品无码av| 国产视频久久| 欧美一区二区精品久久| 69SEX久久精品国产麻豆| 99久久精品国产免看国产一区| 区久久AAA片69亚洲| 久久久久久久久波多野高潮| 偷窥少妇久久久久久久久| 一本色道久久88综合日韩精品| 一本久久综合亚洲鲁鲁五月天| 伊色综合久久之综合久久|