处于安全考虑,Linux下有很多没有分配shell的用户,或者干脆shell被设置为 /sbin/nologin。关于这一点可以cat /etc/password 看一下。
/sbin/nologin 是一个特殊的 shell,通常用于非交互式用户账户。这意味着用户不能登录并执行命令行操作。然而,在某些情况下,比如系统维护或调试,我们可能需要以这样的用户身份执行一些命令。
执行命令的方法
即使用户被配置为使用 /sbin/nologin 或者没有 shell,我们仍然可以通过其他方式来执行命令,具体的原理就是使用su 命令的 -s参数(得root权限下执行,root下切普通用户不需要密码)。
比如现在我想看一下 elasticsearch 用户空间下的 ulimit -a实际都是怎么样的(配置的优化有没有生效啊?),我首先想到的办法是以elasticsearch的身份调用以下这个指令:
znl.pub:~# su -s /bin/sh elasticsearch -c "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) 770948
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 770948
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited