集群环境有几台新增的机器,尝试修改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,这个值要大于我们需要设置的值,否则配置是无效的。修改这个值的方式:
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的时候,一般由于配置未生效,如果配置的值过大会提示
-bash: ulimit: open files: cannot modify limit: Operation not permitted
1
即虽然改了limits.conf相关配置文件,但是发现修改的允许范围值还是很小,此时按照以上步骤本人集群机器上问题已经解决。
最后定位为openssh配置问题,附openssh详解
-
-
名称
-
sshd_config - OpenSSH SSH 服务器守护进程配置文件
-
-
-
大纲
-
/etc/ssh/sshd_config
-
-
-
描述
-
sshd( 8) 默认从 /etc/ssh/sshd_config 文件(或通过 -f 命令行选项指定的文件)读取配置信息。
-
配置文件是由 "指令 值"对组成的,每行一个。空行和以'#'开头的行都将被忽略。
-
如果值中含有空白符或者其他特殊符号,那么可以通过在两边加上双引号( ")进行界定。
-
[注意]值是大小写敏感的,但指令是大小写无关的。
-
-
-
当前所有可以使用的配置指令如下:
-
-
-
AcceptEnv
-
指定客户端发送的哪些环境变量将会被传递到会话环境中。[注意]只有SSH-2协议支持环境变量的传递。
-
细节可以参考 ssh_config(5) 中的 SendEnv 配置指令。
-
指令的值是空格分隔的变量名列表(其中可以使用'*'和'?'作为通配符)。也可以使用多个 AcceptEnv 达到同样的目的。
-
需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。由于这个原因,该指令应当小心使用。
-
默认是不传递任何环境变量。
-
-
-
AddressFamily
-
指定 sshd(8) 应当使用哪种地址族。取值范围是:"any"(默认)、"inet"(仅IPv4)、"inet6"(仅IPv6)。
-
-
-
AllowGroups
-
这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*"和"?"通配符)。默认允许所有组登录。
-
如果使用了这个指令,那么将仅允许这些组中的成员登录,而拒绝其它所有组。
-
这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组。
-
这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理:
-
DenyUsers, AllowUsers, DenyGroups, AllowGroups
-
-
-
AllowTcpForwarding
-
是否允许TCP转发,默认值为"yes"。
-
禁止TCP转发并不能增强安全性,除非禁止了用户对shell的访问,因为用户可以安装他们自己的转发器。
-
-
-
AllowUsers
-
这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*"和"?"通配符)。默认允许所有用户登录。
-
如果使用了这个指令,那么将仅允许这些用户登录,而拒绝其它所有用户。
-
如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。
-
这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理:
-
DenyUsers, AllowUsers, DenyGroups, AllowGroups
-
-
-
AuthorizedKeysFile
-
存放该用户可以用来登录的 RSA/DSA 公钥。
-
该指令中可以使用下列根据连接时的实际情况进行展开的符号:
-
%% 表示'%'、%h 表示用户的主目录、%u 表示该用户的用户名。
-
经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径。
-
默认值是".ssh/authorized_keys"。
-
-
-
Banner
-
将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。
-
这个特性仅能用于SSH-2,默认什么内容也不显示。"none"表示禁用这个特性。
-
-
-
ChallengeResponseAuthentication
-
是否允许质疑-应答(challenge-response)认证。默认值是"yes"。
-
所有 login.conf(5) 中允许的认证方式都被支持。
-
-
-
Ciphers
-
指定SSH-2允许使用的加密算法。多个算法之间使用逗号分隔。可以使用的算法如下:
-
"aes128-cbc", "aes192-cbc", "aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr",
-
"3des-cbc", "arcfour128", "arcfour256
-