許多人裝 RedHat 7.x 後感到手足無措。7.x 重視系統安全,最大變化是以 xinetd.conf 取代 inetd.conf。7.1 預設不開啟 FTP、Telnet 等傳統服務,改用更安全的 SSH,並新增防火牆服務。
超級伺服器 Inetd 監控主機網路連接。請求抵達 Inetd 管理埠時,轉發給 tcpd。tcpd 依 /etc/hosts.allow、/etc/hosts.deny 判斷允許與否,允許則啟動對應伺服器程式(ftpd、telnetd),此機制稱 tcp_wrapper。
xinetd(eXtended InterNET services daemon)提供類似 inetd+tcp_wrapper 功能但更強大安全。特色:
最大缺點 RPC 支援不穩定,可啟動 portmap 與 xinetd 共存解決。
從 https://www.xinetd.org 下載,最新版 xinetd 2.1.8.8p3。預設編譯安裝簡單:
# ./configure # make # make install
configure 實用選項:
hosts.allow/hosts.deny)進行存取控制,需系統安裝 tcp_wrapper 及相關函式庫。RedHat 7.0 預設已安裝 xinetd,無需自行編譯。
預設配置檔 /etc/xinetd.conf,語法與 inetd.conf 完全不同不相容。本質上是 inetd.conf 與 hosts.allow/hosts.deny 功能組合。每項形式:
service service-name { <OPERATOR> <VALUE> ... }service 為必需關鍵字,屬性表用大括號括起。service-name 為自訂名稱,通常為標準網路服務名,也可增加非標準服務。操作符可為 =、+=、-=。Value 為屬性參數。
| 屬性 | 描述與允許值 |
|---|---|
| Socket_type | TCP/IP socket 類型:stream(TCP)、dgram(UDP)、raw、seqpacket |
| protocol | 指定協定,值必須在 /etc/protocols 定義,不指定用預設協定 |
| Server | 啟動進程完整路徑 |
| Server_args | 傳給進程參數,不含服務程式名 |
| Port | 定義服務埠號,若在 /etc/services 列出必須匹配 |
| Wait | yes:單線程,啟動進程並停止處理請求直到進程終止;no:多線程,每請求啟動一進程 |
| User | 設定服務進程 UID,xinetd 有效 UID 非 0 時無效 |
| Group | 設定進程 GID,xinetd 有效 UID 非 0 時無效 |
| Nice | 指定進程 nice 值 |
| Id | 唯一指定一服務,區分僅協定不同的服務(如 echo 同時支援 dgram/stream,設 id=echo_dgram、id=echo_stream) |
| Type | RPC、INTERNAL(xinetd 自身提供如 echo)、UNLISTED(未列在標準系統檔案服務) |
| Access_time | 服務可用時間區間,格式 hh:mm-hh:mm(如 08:00-18:00) |
| Banner | 連接建立時顯示給客戶端的檔案,無論允許與否 |
| Flags | REUSE、INTERCEPT、NORETRY、IDONLY、NAMEINARGS、NODELAY 等組合 |
| Rpc_version | RPC 版本號或範圍(如 2-3) |
| rpc_number | RPC 程式號不在 /etc/rpc 時指定 |
| Env | 空格分隔 VAR=VALUE 表,傳給服務程式,支援 = 和 += |
| Passenv | 空格分隔環境變數表,傳給服務程式,支援所有操作符 |
| Only_from | 允許存取的客戶端列表,不指定值則拒絕存取,支援所有操作符 |
| No_access | 拒絕存取的客戶端列表,支援所有操作符 |
| Instances | 最大同時進程數(>=1 整數或 UNLIMITED) |
| Log_type | SYSLOG facility[level] 或 file[soft[hard]](KB 限制,soft 達到記錄訊息,hard 達到停止記錄,預設 soft 5MB,hard 不超過 20MB) |
| Redirect | redirect=IPaddress:port,將 TCP 服務重導向其他系統,使用時忽略 server 屬性 |
| Bind | bind=IPaddress,將服務綁定特定介面,多介面主機可允許特定介面服務 |
| Log_on_success | 成功時記錄資訊:PID、HOST、USERID、EXIT、DURATION,預設不記錄,支援所有操作符 |
| Log_on_failure | 失敗時記錄資訊:ATTEMPT、HOST、USERID、RECORD,預設不記錄,支援所有操作符 |
| Disabled | 僅用於 defaults 項,指定關閉服務列表,效果同註解該服務項 |
以下簡單範例展示 /etc/xinetd.conf 配置格式。兩服務定義像 inetd.conf 是因用 itox 工具從 inetd.conf 轉換而來——只需將項目對應轉換成適當 xinetd 語法。大括號中 = 左邊屬性意義直接明瞭。