集羣環境有幾臺新增的機器,嘗試修改open files的時候,按照日常的操做就是修改/etc/security/limits.conf和/etc/security/limits.d/90-nproc.conf使得重啓後永久生效,而後執行ulimit -n 65536這種使得當前生效。這樣大多數狀況是OK的,可是這裏要注意有坑,首先是否真正的生效,須要經過其餘機器直接ssh username@ip來直接登陸到修改的服務器的username用戶下,而後執行ulimit -a查看是否正常。不能直接先在root權限下,經過su命令切換到普通用戶下查看,這種查看效果看起來是生效了,可是其實是使用的root用戶的配置,不是mmtrix的配置。因此要在其它服務器上直接經過ssh登陸普通用戶查看。
本人遇到的問題是,對於CentOS6.5直接依據上述操做修改正常,可是恰好新增的幾臺機器系統版本號不同,這也是坑。。。而後有一臺是CentOS 7.4,經過上述方法改完後並無什麼卵用,經google查閱文檔瞭解對於CentOS部分版本,關於各類系統限制和PAM存在衝突,從而致使修改失敗。問題排查步驟以下:
首先要查看系統總體對每一個用戶設置的文件句柄的最大限制:cat /proc/sys/fs/file-max,這個值要大於咱們須要設置的值,不然配置是無效的。修改這個值的方式:html
vim /etc/sysctl.con算法
#新增一行
fs.file-max = 100000
1
2
3
4
修改完畢後執行sysctl -p便可成功修改。這裏肯定沒問題後,再修改pam的配置文件,
具體就是編輯/etc/pam.d/login文件,新增一行:session required pam_limits.so內容。這些配置完畢後再從新登陸到普通用戶查看,若是仍是發現open files未修改爲功,那麼就須要進行下一步修改ssh的配置,編輯/etc/ssh/sshd_config配置文件,配置UsePrivilegeSeparation no和UsePAM no,而後經過service sshd restart重啓sshd服務,再從新ssh登陸普通用戶,這時執行ulimt -a發現配置已經生效了。
針對以上問題,若是未修改爲功,還有一個現象供參考是普通用戶執行ulimit -n xxx的時候,通常因爲配置未生效,若是配置的值過大會提示shell
-bash: ulimit: open files: cannot modify limit: Operation not permitted
1
即雖然改了limits.conf相關配置文件,可是發現修改的容許範圍值仍是很小,此時按照以上步驟本人集羣機器上問題已經解決。
vim
最後定位爲openssh配置問題,附openssh詳解緩存
-
-
sshd_config - OpenSSH SSH
服務器守護進程配置文件
-
-
-
-
-
-
-
-
sshd(
8) 默認從 /etc/ssh/sshd_config 文件(或經過 -f 命令行選項指定的文件)讀取配置信息。
-
配置文件是由
"指令 值"對組成的,每行一個。空行和以'#'開頭的行都將被忽略。
-
若是值中含有空白符或者其餘特殊符號,那麼能夠經過在兩邊加上雙引號(
")進行界定。
-
-
-
-
-
-
-
-
指定客戶端發送的哪些環境變量將會被傳遞到會話環境中。[注意]只有SSH-2協議支持環境變量的傳遞。
-
細節能夠參考 ssh_config(5) 中的 SendEnv 配置指令。
-
指令的值是空格分隔的變量名列表(其中可使用'*'和'?'做爲通配符)。也可使用多個 AcceptEnv 達到一樣的目的。
-
須要注意的是,有些環境變量可能會被用於繞過禁止用戶使用的環境變量。因爲這個緣由,該指令應當當心使用。
-
-
-
-
-
指定 sshd(8) 應當使用哪一種地址族。取值範圍是:"any"(默認)、"inet"(僅IPv4)、"inet6"(僅IPv6)。
-
-
-
-
這個指令後面跟着一串用空格分隔的組名列表(其中可使用"*"和"?"通配符)。默認容許全部組登陸。
-
若是使用了這個指令,那麼將僅容許這些組中的成員登陸,而拒絕其它全部組。
-
這裏的"組"是指"主組"(primary group),也就是/etc/passwd文件中指定的組。
-
這裏只容許使用組的名字而不容許使用GID。相關的 allow/deny 指令按照下列順序處理:
-
DenyUsers, AllowUsers, DenyGroups, AllowGroups
-
-
-
-
-
禁止TCP轉發並不能加強安全性,除非禁止了用戶對shell的訪問,由於用戶能夠安裝他們本身的轉發器。
-
-
-
-
這個指令後面跟着一串用空格分隔的用戶名列表(其中可使用"*"和"?"通配符)。默認容許全部用戶登陸。
-
若是使用了這個指令,那麼將僅容許這些用戶登陸,而拒絕其它全部用戶。
-
若是指定了 USER@HOST 模式的用戶,那麼 USER 和 HOST 將同時被檢查。
-
這裏只容許使用用戶的名字而不容許使用UID。相關的 allow/deny 指令按照下列順序處理:
-
DenyUsers, AllowUsers, DenyGroups, AllowGroups
-
-
-
-
-
該指令中可使用下列根據鏈接時的實際狀況進行展開的符號:
-
%% 表示'%'、%h 表示用戶的主目錄、%u 表示該用戶的用戶名。
-
通過擴展以後的值必需要麼是絕對路徑,要麼是相對於用戶主目錄的相對路徑。
-
默認值是".ssh/authorized_keys"。
-
-
-
-
將這個指令指定的文件中的內容在用戶進行認證前顯示給遠程用戶。
-
這個特性僅能用於SSH-2,默認什麼內容也不顯示。"none"表示禁用這個特性。
-
-
-
ChallengeResponseAuthentication
-
是否容許質疑-應答(challenge-response)認證。默認值是"yes"。
-
全部 login.conf(5) 中容許的認證方式都被支持。
-
-
-
-
指定SSH-2容許使用的加密算法。多個算法之間使用逗號分隔。可使用的算法以下:
-
"aes128-cbc", "aes192-cbc", "aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr",
-
"3des-cbc", "arcfour128", "arcfour256", "arcfour", "blowfish-cbc", "cast128-cbc"
-
-
-
-
-
sshd(8) 在未收到任何客戶端迴應前最多容許發送多少個"alive"消息。默認值是 3 。
-
到達這個上限後,sshd(8) 將強制斷開鏈接、關閉會話。
-
須要注意的是,"alive"消息與 TCPKeepAlive 有很大差別。
-
"alive"消息是經過加密鏈接發送的,所以不會被欺騙;而 TCPKeepAlive 倒是能夠被欺騙的。
-
若是 ClientAliveInterval 被設爲 15 而且將 ClientAliveCountMax 保持爲默認值,
-
那麼無應答的客戶端大約會在45秒後被強制斷開。這個指令僅能夠用於SSH-2協議。
-
-
-
-
設置一個以秒記的時長,若是超過這麼長時間沒有收到客戶端的任何數據,
-
sshd(8) 將經過安全通道向客戶端發送一個"alive"消息,並等候應答。
-
默認值 0 表示不發送"alive"消息。這個選項僅對SSH-2有效。
-
-
-
-
是否對通訊數據進行加密,仍是延遲到認證成功以後再對通訊數據加密。
-
可用值:"yes", "delayed"(默認), "no"。
-
-
-
-
這個指令後面跟着一串用空格分隔的組名列表(其中可使用"*"和"?"通配符)。默認容許全部組登陸。
-
若是使用了這個指令,那麼這些組中的成員將被拒絕登陸。
-
這裏的"組"是指"主組"(primary group),也就是/etc/passwd文件中指定的組。
-
這裏只容許使用組的名字而不容許使用GID。相關的 allow/deny 指令按照下列順序處理:
-
DenyUsers, AllowUsers, DenyGroups, AllowGroups
-
-
-
-
這個指令後面跟着一串用空格分隔的用戶名列表(其中可使用"*"和"?"通配符)。默認容許全部用戶登陸。
-
-
若是指定了 USER@HOST 模式的用戶,那麼 USER 和 HOST 將同時被檢查。
-
這裏只容許使用用戶的名字而不容許使用UID。相關的 allow/deny 指令按照下列順序處理:
-
DenyUsers, AllowUsers, DenyGroups, AllowGroups
-
-
-
-
強制執行這裏指定的命令而忽略客戶端提供的任何命令。這個命令將使用用戶的登陸shell執行(shell -c)。
-
這能夠應用於 shell 、命令、子系統的完成,一般用於 Match 塊中。
-
這個命令最初是在客戶端經過 SSH_ORIGINAL_COMMAND 環境變量來支持的。
-
-
-
-
是否容許遠程主機鏈接本地的轉發端口。默認值是"no"。
-
sshd(8) 默認將遠程端口轉發綁定到loopback地址。這樣將阻止其它遠程主機鏈接到轉發端口。
-
GatewayPorts 指令可讓 sshd 將遠程端口轉發綁定到非loopback地址,這樣就能夠容許遠程主機鏈接了。
-
"no"表示僅容許本地鏈接,"yes"表示強制將遠程端口轉發綁定到統配地址(wildcard address),
-
"clientspecified"表示容許客戶端選擇將遠程端口轉發綁定到哪一個地址。
-
-
-
-
是否容許使用基於 GSSAPI 的用戶認證。默認值爲"no"。僅用於SSH-2。
-
-
-
-
是否在用戶退出登陸後自動銷燬用戶憑證緩存。默認值是"yes"。僅用於SSH-2。
-
-
-
-
這個指令與 RhostsRSAAuthentication 相似,可是僅能夠用於SSH-2。推薦使用默認值"no"。
-
-
-
-
HostbasedUsesNameFromPacketOnly
-
在開啓 HostbasedAuthentication 的狀況下,
-
指定服務器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 進行遠程主機名匹配時,是否進行反向域名查詢。
-
"yes"表示 sshd(8) 信任客戶端提供的主機名而不進行反向查詢。默認值是"no"。
-
-
-
-
主機私鑰文件的位置。若是權限不對,sshd(8) 可能會拒絕啓動。
-
SSH-1默認是 /etc/ssh/ssh_host_key 。
-
SSH-2默認是 /etc/ssh/ssh_host_rsa_key 和 /etc/ssh/ssh_host_dsa_key 。
-
一臺主機能夠擁有多個不一樣的私鑰。"rsa1"僅用於SSH-1,"dsa"和"rsa"僅用於SSH-2。
-
-
-
-
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 過程當中忽略 .rhosts 和 .shosts 文件。
-
不過 /etc/hosts.equiv 和 /etc/shosts.equiv 仍將被使用。推薦設爲默認值"yes"。
-
-
-
-
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 過程當中忽略用戶的 ~/.ssh/known_hosts 文件。
-
默認值是"no"。爲了提升安全性,能夠設爲"yes"。
-
-
-
-
是否要求用戶爲 PasswordAuthentication 提供的密碼必須經過 Kerberos KDC 認證,也就是是否使用Kerberos認證。
-
要使用Kerberos認證,服務器須要一個能夠校驗 KDC identity 的 Kerberos servtab 。默認值是"no"。
-
-
-
-
若是使用了 AFS 而且該用戶有一個 Kerberos 5 TGT,那麼開啓該指令後,
-
將會在訪問用戶的家目錄前嘗試獲取一個 AFS token 。默認爲"no"。
-
-
-
-
若是 Kerberos 密碼認證失敗,那麼該密碼還將要經過其它的認證機制(好比 /etc/passwd)。
-
-
-
-
-
是否在用戶退出登陸後自動銷燬用戶的 ticket 。默認值是"yes"。
-
-
-
-
在SSH-1協議下,短命的服務器密鑰將以此指令設置的時間爲週期(秒),不斷從新生成。
-
這個機制能夠儘可能減少密鑰丟失或者黑客攻擊形成的損失。
-
設爲 0 表示永不從新生成,默認爲 3600(秒)。
-
-
-
-
指定 sshd(8) 監聽的網絡地址,默認監聽全部地址。可使用下面的格式:
-
-
-
ListenAddress host|IPv4_addr|IPv6_addr
-
ListenAddress host|IPv4_addr:port
-
ListenAddress [host|IPv6_addr]:port
-
-
-
若是未指定 port ,那麼將使用 Port 指令的值。
-
可使用多個 ListenAddress 指令監聽多個地址。
-
-
-
-
限制用戶必須在指定的時限內認證成功,0 表示無限制。默認值是 120 秒。
-
-
-
-
指定 sshd(8) 的日誌等級(詳細程度)。可用值以下:
-
QUIET, FATAL, ERROR, INFO(默認), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3
-
DEBUG 與 DEBUG1 等價;DEBUG2 和 DEBUG3 則分別指定了更詳細、更羅嗦的日誌輸出。
-
比 DEBUG 更詳細的日誌可能會泄漏用戶的敏感信息,所以反對使用。
-
-
-
-
指定容許在SSH-2中使用哪些消息摘要算法來進行數據校驗。
-
可使用逗號分隔的列表來指定容許使用多個算法。默認值(包含全部可使用的算法)是:
-
hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96
-
-
-
-
引入一個條件塊。塊的結尾標誌是另外一個 Match 指令或者文件結尾。
-
若是 Match 行上指定的條件都知足,那麼隨後的指令將覆蓋全局配置中的指令。
-
Match 的值是一個或多個"條件-模式"對。可用的"條件"是:User, Group, Host, Address 。
-
只有下列指令能夠在 Match 塊中使用:AllowTcpForwarding, Banner,
-
ForceCommand, GatewayPorts, GSSApiAuthentication,
-
KbdInteractiveAuthentication, KerberosAuthentication,
-
PasswordAuthentication, PermitOpen, PermitRootLogin,
-
RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
-
X11Forwarding, X11UseLocalHost
-
-
-
-
指定每一個鏈接最大容許的認證次數。默認值是 6 。
-
若是失敗認證的次數超過這個數值的一半,鏈接將被強制斷開,且會生成額外的失敗日誌消息。
-
-
-
-
最大容許保持多少個未認證的鏈接。默認值是 10 。
-
到達限制後,將再也不接受新鏈接,除非先前的鏈接認證成功或超出 LoginGraceTime 的限制。
-
-
-
-
-
-
-
-
-
-
-
-
指定TCP端口轉發容許的目的地,可使用空格分隔多個轉發目標。默認容許全部轉發請求。
-
-
-
PermitOpen IPv4_addr:port
-
PermitOpen [IPv6_addr]:port
-
"any"能夠用於移除全部限制並容許一切轉發請求。
-
-
-
-
-
-
"without-password"表示禁止使用密碼認證登陸。
-
"forced-commands-only"表示只有在指定了 command 選項的狀況下才容許使用公鑰認證登陸。
-
同時其它認證方法所有被禁止。這個值經常使用於作遠程備份之類的事情。
-
-
-
-
-
"yes", "point-to-point"(layer 3), "ethernet"(layer 2), "no"(默認)。
-
"yes"同時蘊含着"point-to-point"和"ethernet"。
-
-
-
-
指定是否容許 sshd(8) 處理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 選項。
-
默認值是"no"。若是設爲"yes"可能會致使用戶有機會使用某些機制(好比 LD_PRELOAD)繞過訪問控制,形成安全漏洞。
-
-
-
-
指定在哪一個文件中存放SSH守護進程的進程號,默認爲 /var/run/sshd.pid 文件。
-
-
-
-
指定 sshd(8) 守護進程監聽的端口號,默認爲 22 。可使用多條指令監聽多個端口。
-
默認將在本機的全部網絡接口上監聽,可是能夠經過 ListenAddress 指定只在某個特定的接口上監聽。
-
-
-
-
指定 sshd(8) 是否在每一次交互式登陸時打印最後一位用戶的登陸時間。默認值是"yes"。
-
-
-
-
指定 sshd(8) 是否在每一次交互式登陸時打印 /etc/motd 文件的內容。默認值是"yes"。
-
-
-
-
-
'1'和'2'表示僅僅支持SSH-1和SSH-2協議。"2,1"表示同時支持SSH-1和SSH-2協議。
-
-
-
-
是否容許公鑰認證。僅能夠用於SSH-2。默認值爲"yes"。
-
-
-
-
是否使用強可信主機認證(經過檢查遠程主機名和關聯的用戶名進行認證)。僅用於SSH-1。
-
這是經過在RSA認證成功後再檢查 ~/.rhosts 或 /etc/hosts.equiv 進行認證的。
-
-
-
-
-
是否容許使用純 RSA 公鑰認證。僅用於SSH-1。默認值是"yes"。
-
-
-
-
指定臨時服務器密鑰的長度。僅用於SSH-1。默認值是 768(位)。最小值是 512 。
-
-
-
-
指定是否要求 sshd(8) 在接受鏈接請求前對用戶主目錄和相關的配置文件進行宿主和權限檢查。
-
強烈建議使用默認值"yes"來預防可能出現的低級錯誤。
-
-
-
-
配置一個外部子系統(例如,一個文件傳輸守護進程)。僅用於SSH-2協議。
-
值是一個子系統的名字和對應的命令行(含選項和參數)。好比"sft /bin/sftp-server"。
-
-
-
-
指定 sshd(8) 將日誌消息經過哪一個日誌子系統(facility)發送。有效值是:
-
DAEMON, USER, AUTH(默認), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7
-
-
-
-
指定系統是否向客戶端發送 TCP keepalive 消息。默認值是"yes"。
-
這種消息能夠檢測到死鏈接、鏈接不當關閉、客戶端崩潰等異常。
-
-
-
-
-
指定 sshd(8) 是否應該對遠程主機名進行反向解析,以檢查此主機名是否與其IP地址真實對應。默認值爲"yes"。
-
-
-
-
是否在交互式會話的登陸過程當中使用 login(1) 。默認值是"no"。
-
若是開啓此指令,那麼 X11Forwarding 將會被禁止,由於 login(1) 不知道如何處理 xauth(1) cookies 。
-
須要注意的是,login(1) 是禁止用於遠程執行命令的。
-
若是指定了 UsePrivilegeSeparation ,那麼它將在認證完成後被禁用。
-
-
-
-
是否讓 sshd(8) 經過建立非特權子進程處理接入請求的方法來進行權限分離。默認值是"yes"。
-
認證成功後,將以該認證用戶的身份建立另外一個子進程。
-
這樣作的目的是爲了防止經過有缺陷的子進程提高權限,從而使系統更加安全。
-
-
-
-
指定 sshd(8) X11 轉發的第一個可用的顯示區(display)數字。默認值是 10 。
-
這個能夠用於防止 sshd 佔用了真實的 X11 服務器顯示區,從而發生混淆。
-
-
-
-
是否容許進行 X11 轉發。默認值是"no",設爲"yes"表示容許。
-
若是容許X11轉發而且sshd(8)代理的顯示區被配置爲在含有通配符的地址(X11UseLocalhost)上監聽。
-
那麼將可能有額外的信息被泄漏。因爲使用X11轉發的可能帶來的風險,此指令默認值爲"no"。
-
須要注意的是,禁止X11轉發並不能禁止用戶轉發X11通訊,由於用戶能夠安裝他們本身的轉發器。
-
若是啓用了 UseLogin ,那麼X11轉發將被自動禁止。
-
-
-
-
sshd(8) 是否應當將X11轉發服務器綁定到本地loopback地址。默認值是"yes"。
-
sshd 默認將轉發服務器綁定到本地loopback地址並將 DISPLAY 環境變量的主機名部分設爲"localhost"。
-
這能夠防止遠程主機鏈接到 proxy display 。不過某些老舊的X11客戶端不能在此配置下正常工做。
-
爲了兼容這些老舊的X11客戶端,你能夠設爲"no"。
-
-
-
-
指定 xauth(1) 程序的絕對路徑。默認值是 /usr/X11R6/bin/xauth
-
-
-
-
-
-
在 sshd(8) 命令行參數和配置文件中使用的時間值能夠經過下面的格式指定:time[qualifier] 。
-
其中的 time 是一個正整數,而 qualifier 能夠是下列單位之一:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
sshd(8) 的主配置文件。這個文件的宿主應當是root,權限最大能夠是"644"。
問題描述
登陸 Linux 服務器時,即使輸入了正確的密碼,也沒法正常登陸。同時,secure 日誌中出現相似以下錯誤信息:安全
問題緣由
PAM 相關模塊策略配置,禁止了 UID 小於 1000 的用戶進行登陸。服務器
處理辦法
要解決此問題,請進行以下配置檢查:cookie
-
經過 SSH 客戶端或 管理終端 登陸服務器。網絡
-
經過 cat 等指令查看異常登陸模式,對應的 PAM 配置文件。說明以下:
文件 |
功能說明 |
/etc/pam.d/login |
控制檯(管理終端)對應配置文件 |
/etc/pam.d/sshd |
登陸對應配置文件 |
/etc/pam.d/system-auth |
系統全局配置文件 |
注:每一個啓用了 PAM 的應用程序,在 /etc/pam.d 目錄中都有對應的同名配置文件。例如,login 命令的配置文件是 /etc/pam.d/login,能夠在相應配置文件中配置具體的策略。
-
檢查前述配置文件中,是否有相似以下配置信息:
auth required pam_succeed_if.so uid >= 1000
-
若是須要修改相關策略配置,在繼續以前建議進行文件備份。
-
使用 vi 等編輯器,修改相應配置文件中的上述配置,或者整個刪除或註釋(在最開頭添加 # 號)整行配置,好比:
auth required pam_succeed_if.so uid <= 1000 # 修改策略 # auth required pam_succeed_if.so uid >= 1000 #取消相關配置
-
嘗試從新登陸服務器。
-
pam_securetty(sshd:auth): access denied: tty 'ssh' is not secure !
vim /etc/pam.d/login
註釋:#auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so