在 Linux 下如何以没有配置 shell 或 shell 为 /sbin/nologin 的用户身份执行命令

处于安全考虑,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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注