为什么我无法以 /bin/false 作为登录 shell 的用户运行命令?

为什么我无法以 /bin/false 作为登录 shell 的用户运行命令?

我附加到一个已使用以下命令创建用户的 docker 映像:

RUN useradd -r -u 200 -m -c "nexus role account" -d /nexus-data -s /bin/false nexus

我想以该用户身份运行命令,但什么也没发生。试图解决这个问题,我发现我无法使用 /bin/false 作为登录名的用户运行任何内容:

# useradd xxx
# su xxx -c 'ls >>/t/t1'
# ls /t
t1
# useradd -s /bin/false
# su xxx1 -c 'ls >>/t/t2'
# ls /t
t1

我期望在没有 . 的情况下调用 su 时登录 shell 不会有问题-。我用谷歌搜索,发现如果添加就可以运行该命令-s /bin/bash,但为什么会这样呢?选项-su 表示“使用登录 shell”,为什么登录 shell 相关而没有-

答案1

如果您不指定-s--preserve-environment目标使用用户的 shell。在您的示例中,这将运行/bin/false -c 'ls >> /t/t2',当然,不会运行任何有用的东西。

“登录 shell”具有特定的含义,并且会导致普通 shell(例如sh或 )bash运行登录脚本(例如.profile.

相关内容