Ssh

Centos:如果 selinux 處於活動狀態,rsyslog 會阻止 sshd 和本地登錄

  • November 19, 2014

我在 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 登錄。

謝謝你的文章,很有幫助。

引用自:https://serverfault.com/questions/640816