POP and IMAP
在 Red Hat 中,網路郵件存取通訊協定 (Internet Messages Access Protocol, IMAP) 和郵局通訊協定 (Post Office Protocol, POP) 是使用 dovecot 套件,它是 System V 管理服務,使用 /etc/init.d/ 中的腳本來啟動及關閉,支援 pop、pop3s、imap、imaps,它的加密是由 openssl 提供。
在 Red Hat 中,網路郵件存取通訊協定 (Internet Messages Access Protocol, IMAP) 和郵局通訊協定 (Post Office Protocol, POP) 是使用 dovecot 套件,它是 System V 管理服務,使用 /etc/init.d/ 中的腳本來啟動及關閉,支援 pop、pop3s、imap、imaps,它的加密是由 openssl 提供。
在 Unix-like 系統中,檔案分享可用 NFS,如果要跨平台和 Windows 系統作檔案分享,就可以使用 SAMBA 服務。
SAMBA 是 System V 管理服務,由 /etc/init.d/ 中的腳本來啟動或關閉,要使用 SAMBA 要安裝 samba、samba-common、samba-client 三支套件,它使用的埠是 445(TCP),SAMBA 主要的兩個 Daemon 是 /usr/sbin/smbd 和 /usr/sbin/nmbd:
.smbd:對使用者認證和授權,負責電腦資源的分享,模擬 Windows 系統中的 SMB。
.nmbd:提供電腦名稱的解析及瀏覽,模擬 Windows 系統中的 NetBIOS。
要執行 NFS 服務,要安裝兩個 RPM 套件,portmap 和 nfs-utils,兩者皆是 System V 啟動方式,將服務的腳本放在 /etc/init.d/ 中。NFS 分享出來的目錄,設定在 /etc/exports 中。NFS 服務要啟動,一定要啟動 portmap、rps.nfsd、rps.mountd 三個服務。在預設狀況下,NFS 是使用 2049 通訊埠,如果 2049 被其他程式佔用,就由 portmap 來指派其他的服務埠。
在 Red Hat 中使用的 FTP 套件是 vsftpd,它提供了兩種方式的取存:
.暱名取存:使用者可用共用的帳號 ftp,密碼 ftp;或帳號 anonymous,密碼為電子郵件來登入,預設的根目錄是 /var/ftp。
.使用者取存:使用私有的帳號密碼來登入 FTP。
pam_unix.so 是一個非常重要的模組,就是用這個模組來實現傳統的 NSS-based 認證,它可以適用 PAM 的 4 個驗證階段:
.auth : 它可以檢查使用者的名稱及密碼是否與 NSS 函式庫中雜湊演算的結果相符合。
.account : 利用 NSS 的資訊檢查密碼是否過期或是帳號是否有被鎖定。
.password : 指定密碼的相關資訊,如加密演算法 (預設是以 MD5 加密)、密碼是否以 shadow 遮蔽方式儲存 (預設是)、密碼時效功能是否啟動、是否透過 NIS 查詢修改帳密 ( 透過 rpc.yppasswdd 服務 ) 等。
.session : 指定經由 syslogd 服務來記錄 Log 檔。
可插入式認證模組 ( PAM ) 顧名思義就是認證的方法以模組的方式提供,想使用什麼認證方法就插入什麼模組,透過 PAM 認證方法可以隨意組合,稱之為 PAM 堆疊 ( PAM Stack ),如帳密、指紋、結合 IC 卡認證。
使用 PAM,應用程式可以呼叫 libpam 函式來使用,其中一個模組當然包含了傳統的 NSS 驗證方式,可透過 libc 函式來呼叫,不管使用多少模組,整個驗證結果只會有一個,就是通過或失敗。
PAM 的模組存放在 /lib/security 底下: ()
系統必須提供每個使用者帳號兩種類型的資訊:
.帳號資訊:UID 編號、預設的 Shell、家目錄、使用者群組、GID 編號等。
.認證資訊:分辨使用者登入時提供的密碼正確與否的方式。
帳號的資訊儲存在 /etc/passwd 檔案中,而認證資訊則儲存在 /etc/shadow 之中,每筆資訊存在獨立一行之中。
一般的應用程式或名稱服務(如 LDAP、NIS )不會直接存取 /etc/passwd 檔案,而是透過系統中的 C 函式庫中 libc 所提供的方法,如 getpwnam() 來取存 /etc/passwd 的資訊。
==============================
用 SSH 建立 tunnel 很好用,可是終端機就不能關了,必須維持在連線狀態,如果終端機關掉了,SSH 連線也會跟著中止,這時使用 Stunnel 可以改善這項缺點。
#mkdir /var/run/stunnel (先建立 run pid 的目錄)
#chown nobody:nobody /var/run/stunnel (將目錄的權限改成 nobody 的)
#cd /etc/pki/tls/certs/ (到這裡來建立加密金鑰)
使用 SSH 及 SSHD 可以建立安全連線通道,做法有兩種:
.ssh user@SSHDServer -L SSHClientPort:RemoteHost:RemotePort
(我本身會監聽 SSHClientPort,然後將它轉送到 SSHDServer,再由 SSHDServer 將封包送到 RemoteHost 的 RemotePort)
.ssh user@SSHDServer -R SSHDServerPort:RemoteHost:RemotePort
(你,SSHDServer 要負責監聽 SSHDServerPort 這個埠,然後將它轉送給我,我再將它送到 RemoteHost 的 RemotePort)
1. 由 SSH Client 本身監聽特定埠,由 SSHD 負責轉送到指定的主機:埠
# ssh localhost -L 8888:mail.so-net.net.tw:25 (由 ssh client 監聽 8888 埠,再由 sshd 轉送到 mail.so-net.net.tw 的 25 埠)
root@localhost’s password:
Last login: Sun Mar 22 20:55:28 2009 from 127.0.0.1
SSH 通訊協定有 Version1 和 Version2,即 V1 和 V2,V1只支援 RSA 加密,而 V2 支援 RSA 和 DSA 加密方式。
SSHD 有兩對金鑰:
Host Key:放在 /etc/ssh/ 之下,預設長度為 1024 bits,可設定加長至 2048 bits。
Server Key:儲存在 RAM 之中,預設長度為 768 bits,可設定加長至 1024 bits,Server Key 每小時會更新一次。
整個 SSH 通訊加密流程如下:
1. [SSH Client] ---(要求建立 SSH 連線)---> [SSH Server]
2. [SSH Client] <---(傳遞 HostKey 和 ServerKey 的公開金鑰)--- [SSH Server]
3. [SSH Client] ---(產生 SessionKey,再用 HostKey 和 ServerKey 加密:ServerKey(HostKey(SessionKey)),傳至 Server)---> [SSH Server]
4. [SSH Server]:用 HostKey 及 ServerKey 的私密金鑰,將 SessionKey 解密出來。ServerKey.Pri(ServerKey(HostKey(SessionKey))) --> HostKey.Pri(HostKey(SessionKey)) --> SessionKey。
5. [SSH Client] <---(使用 Session Key 加密進行連線)---> [SSH Server]
6. Session Key 每隔固定時間或傳遞了固定大小之後,亦會更換一次,再用同樣的方式傳遞給 SSH Server。
=========================================