Centos:如果 selinux 處於活動狀態,rsyslog 會阻止 sshd 和本地登錄
我在 centos 6.5(現在是 6.6)機器上有一個非常奇怪的問題。在 6 月 11 日和 10 月 21 日之間的更新之後,麻煩開始了(包: http: //pastebin.com/gXvaycLL)。在 10 月重新啟動後,無法使用 ssh 登錄伺服器。客戶端總是停止並顯示以下消息:
ssh_exchange_identification:讀取:對等方重置連接
我嘗試直接登錄伺服器。首先,我嘗試使用控制台登錄。輸入密碼後,伺服器以“密碼錯誤”拒絕。在圖形模式上也是如此。但是密碼是正確的。現在我找到了一個解決方案:通過在 bootmanager 中附加 selinux=0 來停用 selinux 後。現在我可以登錄伺服器上的控制台了。此外,我無法使用 ssh 登錄(也使用 localhost)。在此之後,我編輯 /etc/selinux/config 並將 SELINUX 值從強制設置為允許稍後禁用。重啟後我無法登錄,即使我設置了禁用。登錄的唯一方法是設置 selinux=0。現在我找到了罪魁禍首:rsyslog。如果我在開始時禁用日誌記錄,一切都很好,接受日誌記錄。
奇怪的是:如果啟動 rsyslogd,所有其他服務(如 apache 和 mysql)都可以正常工作。
這是使用 debug3 進行 sshd 日誌記錄的下半部分:
[...] debug1: Bind to port 22 on 0.0.0.0. Server listening on 0.0.0.0 port 22. debug2: fd 4 setting O_NONBLOCK debug1: Bind to port 22 on ::. Server listening on :: port 22. debug3: fd 5 is not O_NONBLOCK debug1: Server will not fork when running in debugging mode. debug3: send_rexec_state: entering fd = 8 config len 599 debug3: ssh_msg_send: type 0 debug3: send_rexec_state: done debug1: rexec start in 5 out 5 newsock 5 pipe -1 sock 8 debug1: inetd sockets after dupping: -1, -1 setsockopt SO_KEEPALIVE: Bad file descriptor debug1: getpeername failed: Bad file descriptor debug1: get_remote_port failed
如您所見,兩個 inetd 套接字均無效。如果 rsyslog 未啟動,則有正套接字,一切正常。
我試圖通過重新安裝 rsyslog(使用全新/未編輯的配置)並重新安裝 selinux-libraries 來修復它。我還從 centos6.5 更新到實際版本 6.6 有人知道我該如何解決這個問題嗎?
感謝 Marlon Régis Schmitz 在 centos.org 的提示:bugs.centos.org/view.php?id=7812
在這裡我找到了解決方案。我刪除了包
prelink
。重新啟動 rsyslog 並重新啟動系統後,ssh 和登錄現在可以正常工作。該
prelink
軟體包包括一個預處理執行檔和庫的程序,以減少 CPU 消耗並加快程序的載入速度。也可以為某些執行檔和庫創建黑名單,但我還沒有嘗試過。
我在 OEL 6 上遇到了同樣的問題,發現以下更新檔是根本原因:
nss-softokn-freebl-3.14.3-17.el6.x86_64.rpm
更新後我無法通過 ssh 登錄。
謝謝你的文章,很有幫助。