我附加到一个已使用以下命令创建用户的 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
.