无法将ssh切换到特定用户:su:无法设置用户ID:资源暂时不可用?


15

/var/log/secure

su: pam_keyinit(su-l:session): Unable to change UID to 500 temporarily
su: pam_keyinit(su-l:session): Unable to change UID to 500 temporarily
su: pam_unix(su-l:session): session opened for user adtech by root(uid=0)
su: pam_unix(su-l:session): session closed for user adtech

我猜这是由每个用户的限制引起的,但是与另一个用户进行比较时没有什么不同。

这是ulimit -n为了adtech

[adtech@hmaster87 root]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 192025
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 655360
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

这是为了quanta

[quanta@hmaster87 ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 192025
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 655360
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

运行的进程数adtech

[root@hmaster87 ~]# ps -U adtech | wc -l
25

还有其他要检查的东西吗?


更新信息通讯社2012年7月21日星期六09:21:26

# getent passwd adtech
adtech:x:500:502::/home/adtech:/bin/bash

正如我在下面的评论中所说,我的同事发现了可能是罪魁祸首的过程:

adtech 12901 1 0 08:58 ? 00:00:00 /home/adtech/nexus/bin/../bin/jsw/linux-x86-64/wrapper /home/adtech/nexus/bin/../bin/jsw/conf/wrapper.conf wrapper.syslog.ident=nexus wrapper.pidfile=/home/adtech/nexus/bin/../bin/jsw/linux-x86-64/nexus.pid wrapper.daemonize=TRUE

adtech 12903 12901 1 08:58 ? 00:00:24 java -Dsun.net.inetaddr.ttl=3600 -DbundleBasedir=. -Djava.io.tmpdir=./tmp -DjettyContext=nexus.properties -DjettyContextIncludeKeys=bundleBasedir -DjettyPlexusCompatibility=true -Djava.library.path=bin/jsw/lib -classpath bin/jsw/lib/wrapper-3.2.3.jar:./lib/plexus-classworlds-2.4.jar:./conf/ -Dwrapper.key=ejxHaBJASiFkAB8w -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=12901 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.codehaus.plexus.classworlds.launcher.Launcher ./conf/jetty.xml

通过取消此过程,问题消失了,但我们仍然不知道超出了哪个限制。


资讯技术资讯网2012年12月15日00:56:13更新:

@ favadi的答案是正确的,但是如果有人用google这个线程,我会在这里更新。

日志文件说:

jvm 1    | Server daemon died!
jvm 1    | java.lang.OutOfMemoryError: unable to create new native thread
jvm 1    |      at java.lang.Thread.start0(Native Method)
jvm 1    |      at java.lang.Thread.start(Thread.java:640)
jvm 1    |      at org.tanukisoftware.wrapper.WrapperManager.privilegedStopInner(WrapperManager.java:3152)
jvm 1    |      at org.tanukisoftware.wrapper.WrapperManager.handleSocket(WrapperManager.java:3797)
jvm 1    |      at org.tanukisoftware.wrapper.WrapperManager.run(WrapperManager.java:4084)
jvm 1    |      at java.lang.Thread.run(Thread.java:662)

抱歉,如果这太明显了,但是系统上是否有一个userID 500?它与将要使用的用户名有关吗?祝好运。
剥壳机2012年

当然,adtech用户的UID为500。请参阅我的更新。我的同事发现了这个过程的罪魁祸首。通过杀死该进程,问题消失了,但我们仍然不知道超出了哪个限制:打开的文件没有,进程的数目没有,内存或其他任何东西。有什么想法吗?
量子

尝试将strace -f -p附加到该进程,并寻找明显失败的syscall及其执行的操作...
rackandboneman 2012年

Answers:


12

可能max user processes (-u) 1024太低。

请记住,进程和线程是一起计数的。您可以ps -eLF | grep adtech | wc -l用来显示您的当前值。


7
更确切地说,应该是ps -eLF -U adtech | wc -l
量子

2
如果您想知道在哪里设置,请查看/etc/security/limits.d/90-nproc.conf(假设您使用的是RH系统)。
mricon

@mricon检查CentOS7上的/etc/security/limits.d/90-nproc.conf返回/etc/security/limits.d/90-nproc.conf: No such file or directory
030年

@乌特勒支,你可以在/etc/security/limits.d/中做一个“ ls”,并注意到在EL-7上它叫做“ 20-nproc.conf”,这可能比在这里问它要快。
mricon

2
@quanta,更确切地说应该是ps -LF -U adtech | wc -l。使用该-e选项时,您还将获得其他用户进程。
Lambert

2

在jvm日志中查找证据,表明它已达到资源限制。堆栈大小可能是问题所在,具体取决于被终止进程正在运行多少个Java线程。

搜索错误消息会发现pam_keyinit的错误报告:与供应商的存储库检查是否有可用的更新版本。


+1。我忘记了这一课:发现问题时请查看日志。更新了我的问题。
量子

0

该错误是由报告的pam_keyinit。由于我不熟悉此模块,因此我搜索了文档并找到了此联机帮助页。根据描述,我想知道您杀死的进程是否阻止了对需要修改pam_keyinit的某些文件的必要访问?希望这会给您一些指导。


0

如果达到用户的进程运行限制,则可能会发生此问题。可以通过编辑:/etc/security/limits.conf具有root用户权限的用户文件来增加过程限制。要检查的条目将类似于:

*          hard     nproc         100

无需重新启动任何服务。


1
就我而言,提高硬性限制没有立竿见影的效果。我不得不改变软的。
Nicola Musatti
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.