在lfs上繼續安裝openssh

regonly1發表於2008-07-05

相關設定:
如何限制root帳號不能以ssh方式登入主機:
修改/etc/ssh/sshd_config檔案中的:PermitRootLogin no

安裝openssh
要求:
以下文章參考了《OpenSSH 安裝指南》
安裝openssh之前必須安裝openssl和zlib;
安裝sshd之前需要新建一個使用者sshd,它實際上是一種安全機制,稱為特權分離(privilege separation),
類似於chroot能夠提供的安全性。這個特性是預設開啟的,配置檔案中的 UsePrivilegeSeparation 指令可以開啟或關閉這個特性。
使用此特性的關鍵之處在於設定一個空目錄,並將此目錄的許可權設定為"000",宿主設定為"root"。然後還需要設定一個用於特權分
離的非特權使用者,比如sshd,並將此使用者的家目錄設定為這個空目錄。比如可以使用下面這樣的命令:

# mkdir -p /var/empty
# chown 0:0 /var/empty
# chmod 000 /var/empty
# groupadd sshd
# useradd -g sshd -c 'sshd privsep' -d /var/empty -s /bin/false sshd

然後在執行配置指令碼的時候,使用

--with-privsep-path=/var/empty
--with-privsep-user=sshd

來指定目錄和使用者。


以下文章參考了《OpenSSH學習筆記(安裝配置openssh-4.6p1)》
由於有些地方有差別,我這個系統是基於lfs的,本身就沒有安裝openssh,所以跳過了一些步驟。
另:netstat 檢查埠的地方,由於還沒有安裝netstat工具包,所以只好先用ps -fe|grep sshd檢查程式
是否啟動來實現。不過最終還是可以使用的。

1.1 下載相關軟體包

1.2 安裝openssl
 
#cd /usr/local/src
#tar zxvf openssl-0.9.8e.tar.gz
#cd openssl-0.9.8e
#./config shared zlib
#make 
#make test
#make install
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
 
1.3 配置庫檔案搜尋路徑
 
#echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
#ldconfig -v
 
1.4 檢視openssl的版本號,以驗正是否安裝正確
 
#openssl version -a
OpenSSL 0.9.8e 11 Apr 2007
built on: Sat Mar 24 21:24:41 CST 2007
platform. linux-elf
options:  bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(idx) 
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DSHA1_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM
OPENSSLDIR: "/usr/local/ssl"
 
二、下載安裝最新的openssh
 
2.1 下載相關軟體包至/usr/local/src目錄 
 

 
2.2 安裝
 
#cd /usr/local/src
#tar zxvf openssh-4.6p1.tar.gz
#cd openssh-4.6p1
#./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-ssl-dir=/usr/local/ssl --with-md5-passwords --mandir=/usr/share/man 
#make 
#make install 
 
2.3 檢視openssh版本號,驗正安裝結果
 
# ssh  -v
OpenSSH_4.6p1, OpenSSL 0.9.8e 11 Apr 2007
usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-i identity_file] [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-w local_tun[:remote_tun]] [user@]hostname [command]
 
三、啟動並驗正服務的開啟狀況
 
3.1 除錯啟動,如果以下顯示均正常,就可以正常啟動sshd了。 
#/usr/local/sbin/sshd -d
debug1: sshd version OpenSSH_4.6p1
debug1: private host key: #0 type 0 RSA1
debug1: read PEM private key done: type RSA
debug1: private host key: #1 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: private host key: #2 type 2 DSA
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-d'
socket: Address family not supported by protocol
debug1: Bind to port 22 on 0.0.0.0.
Server listening on 0.0.0.0 port 22.
Generating 768 bit RSA key.
RSA key generation complete.
 
3.2 啟動服務
 
#/usr/local/sbin/sshd

3.3 當前sshd服務是否啟動
#ps -fe|grep sshd

3.4 嘗試從本機透過ssh登入
 
# ssh
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 03:eb:80:fe:07:d9:9d:00:1c:15:37:93:d1:d3:8e:6d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
password: 
Last login: Wed Apr 11 11:29:04 2007 from localhost.localdomain
 
四、sshd程式及其相關引數詳細說明
 
sshd服務是OpenSSH的守護程式。此服務附帶的工具程式可以取代rlogin和rsh,在兩臺會話的主機間透過非安全的Internet建立起安全的加密連線。sshd監聽來自客戶端的連線請求,並在接收到請求時fork一個子程式;此子程式將負責處理金鑰交換、加密、認證、命令執行及資料傳輸等。可以使用命令列選項或者配置檔案來配置啟動sshd,但命令列中指定的選項將優先於配置檔案中的相同選項。
 
-4 強制sshd僅接收來自IPv4格式地址的請求;
 
-6 強制sshd僅接收來自IPv6格式地址的請求;
 
-b 指定ssh v1中伺服器金鑰的長度位數;
 
-D 此選項只是用來監視sshd的啟動狀態,在附加此選項時,sshd不會作為一個守護程式啟動;
 
-d 此選項將啟動除錯模式;sshd服務的啟動狀態會在前臺顯示,並把詳細的除錯資訊輸出至日誌檔案;此時, sshd不會fork新的子程式,因此僅僅能接受一個連線請求。此先項主要用來除錯sshd;
 
-e 輸出錯誤資訊到日誌檔案,不包括正常的除錯資訊;
 
-f 此選項後接指定的配置檔案;預設為/etc/ssh/sshd_config;
 
-g 此選項後跟一個時間期限,預設單位是秒,用來為客戶端認證期間提供一個可以等待的期限;如果客戶端在此指定期限內認證錯誤,sshd將斷開連線並退出;0表示無時間限制;
 
-h 此選項後跟一個主機金鑰檔案,用來指定一個sshd啟動時讀取的主機金鑰檔案;在以非root身份啟動sshd時必須指定此選項(因為預設的key檔案只有root具有讀許可權);ssh v1預設的key檔案為/etc/ssh/ssh_host_key,sshd v2預設的key檔案為/etc/ssh/ssh_host_rsa_key以
及/etc/ssh/ssh_host_dsa_key;可以為不同版本的協議及不同的金鑰演算法指定不同的key檔案;
 
-i 此選項用來指定透過inetd守護程式啟動sshd;sshd需要生成服務端金鑰才能接受客戶端的請求,這將需要大約10秒鐘的時間,如果每個請求都重新生成一次金鑰的話,客戶端將不得不等待較長的時間,因此,預設情況下是不使用inet方式啟動sshd的;如果使用較短長度的金鑰,此選項將是一個頗富彈性的選擇;
 
-k 此選項後跟一個時間期限,用來為ssh v1指定一個重新生成服務端key的時間間隔(預設為一個小時);如此頻繁的生成金鑰的目的在於不必儲存金鑰,因此,超過了一個小時後恢復通訊期間加密的資料幾乎是不可能的,哪怕機器被攻入亦或被佔據,這將在很大程度上提高了安全性;0表示不重新生成金鑰;
 
-o 用來為配置檔案指定一個新的可用選項;
 
-p 指定sshd服務監聽的埠(預設是22),可以同時指定多個埠;如果使用此選項,則會忽略配置檔案中指定的埠;
 
-q 安靜模式,此種情況下將不會產生任何系統日誌;正常情況下,服務啟動、認證以及每一次終端登入都會被記錄;
 
-t 測試模式,僅用來檢查配置檔案的正確性及金鑰是否健壯;此選項多用在配置檔案改動時;
 
六、sshd相關的檔案詳細說明
 
~/.hushlogin
    如果配置檔案中分別啟用了PrintLastLog和PrintMotd選項,則此檔案可以用來在螢幕顯示前一次的登入時間以及/etc/motd的內容。但不會顯示Banner選項指定的banner。
 
~/.rhosts
    此檔案主要用來實現主機間的認證。如果你的主機上有些使用者的主目錄位於NFS檔案系統上,則必需把這個檔案的許可權置為全域性可讀,因為sshd程式將以root的身份讀取此檔案。此外,此檔案屬主必須為相關使用者,且其他任何使用者均不能具有寫許可權。一般推薦的許可權為600。
 
~/.ssh/authorized_keys
    此檔案儲存的是使用者的公鑰,當其遠端登入時可以用此公鑰為其進行認證。公鑰資訊並非要求高度安全性的檔案,但仍推薦將其許可權置為700。如果此檔案、~/.ssh目錄或者此使用者的主目錄能被其他使用者讀取,則此檔案將可能被其他非授權使用者修改或置換。此種情況下,除非在主配置檔案中把StrictModes的值置為"no",否則sshd將不允許使用此檔案。
 
~/.ssh/environment
    如果此檔案存在,將會在使用者登入時讀入使用者的環境。它只能包含空行、以"#"開頭的註釋行以及形如“name=value”賦值行,推薦許可權為600。預設情況下此功能是禁止的,可以透過PermitUserEnviroment選項開啟。
 
~/.ssh/known_hosts
    使用者曾成功登入過的主機的host key都將存放於此檔案,但不包括系統間已經互相成功認證的主機host key,只能讓root和屬主具有讀寫許可權。
 
~/.ssh/rc
    此檔案用來在使用者的主目錄不能正常訪問前初始化使用者的登入環境,其許可權應該為600。
 
/etc/host.equiv
    用於主機間的認證,只能讓root使用者可寫。
 
/etc/nologin
    如果這個檔案存在,sshd將拒絕除root使用者外的任何其他使用者登入。在任何使用者在嘗試登入時,此檔案都將被顯示,但所有非root使用者將被拒絕。此檔案應該是全域性可讀的。
 
/etc/ssh/ssh_known_hosts
    存入系統級別的互相認證時已知主機的host key。這個檔案需要管理員手動配置,可以將已知主機的公鑰存入於此檔案。此檔案只能為root或屬主讀寫,但應該是全域性可讀的。
 
/etc/ssh/ssh_host_key
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_rsa_key
    以上三個檔案用來存放主機金鑰的私鑰部分,它們的屬主只能為root使用者,只能被root使用者讀取,不能為其他任何使用者訪問。如果其他使用者可以讀取此檔案,則sshd將不能啟動。
 
/etc/ssh/ssh_host_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_rsa_key.pub
    以上三個檔案用來存放主機金鑰的公鑰部分,它們應該是全域性可讀的,但只有root使用者可寫。它們分別對應相應的私鑰檔案。這些檔案並沒有什麼實際用途,僅僅是用來為使用者認證登入提供便利,因此常被copy至其它可信的主機中。可以使用ssh-keygen來生成這些檔案。
 
/etc/ssh/sshd_config
    sshd的主配置檔案;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-372013/,如需轉載,請註明出處,否則將追究法律責任。

相關文章