从自定义用户返回 ec2-user

从自定义用户返回 ec2-user

创建 ec2 实例时,我使用引导脚本。在实例上,我安装并配置了 nginx Web 服务器。出于安全原因,我需要创建一个新用户 (www-data)。

www-data 用户使用以下命令创建:

sudo groupadd www-data
sudo adduser www-data -g www-data
sudo passwd -d www-data

另外,我在该机器上运行了一些 Python 脚本。为此,我使用了 virtualenv。我运行以下流程:

su www-data
pip install --user virtualenv 
python -m virtualenv $VIRTUALENV_NAME
cd /path/to/bin
source activate
pip install `stuff`
deactivate

当我想返回 ec2-user 时,上述流程之后出现了问题。在终端中键入exit即可。在引导脚本中,它将退出脚本。

我试过了,su ec2-user但它要求输入密码。我没有密码。

如何从另一个用户返回 ec2-user?或者如何解决这个问题

答案1

当你类型

su www-data
whatever
something-else
exit

su以用户身份启动额外的 shell www-data。然后你类型连续的命令,它们都在这个 shell 中执行,因此exit会带你回到旧的 shell。

如果这些命令在脚本中,whatever则不会在附加 shell 中执行。原始 shell 将等待su退出,然后才能继续执行whatever。如果您从终端运行这样的脚本(带有适当 shebang 的文件script.sh),您将被带到一个交互的shell。exit手动输入以继续脚本。

现在,引导脚本中没有附加 TTY,su www-data无法启动交互式 shell 并立即退出。脚本的其余部分将被执行(显然不是以www-data用户身份执行);如果有exit某个地方,它将退出脚本。

处理它的最干净的方法是将其插入whateversomething-else单独的辅助脚本中,然后可以在主脚本中调用

su www-data -c "/path/to/the/helper/script"

主脚本将等待su退出。当它发生时,任何后续行都将由原始用户执行。

另一种方式是这样的:

su www-data -c 'whatever; something-else'

或者等价地

su www-data -c '
whatever
something-else
'

如果命令需要引用,后一种方法可能会很麻烦。使用附加脚本则不会出现这样的问题。

相关内容