6

我在启动 AWS Ubuntu 实例(从 Cloud Formation 模板)并在启动时成功运行脚本时遇到了很多麻烦。该脚本确实运行,但我不希望它以 root 身份运行。我希望脚本要么作为不同的用户调用,要么在脚本运行时让脚本更改用户。

由于我们正在尝试使用 Cloud Formation,因此我需要将脚本或对脚本的引用放入我的模板文件中。我的模板文件的相关部分如下。脚本“myScript.sh”确实运行,但始终以 root 身份运行。

"MyImage" : {
        "Type" : "AWS::EC2::Instance",
        "Properties" : {
           "ImageId" : "xxxxxx",
           "KeyName" : "xxxxxx",
           "SecurityGroups" : [ "xxxxxx" ],
           "UserData" : {"Fn::Base64" : {"Fn::Join" : ["", [
            "#include\n",
            "https://s3-eu-west-1.amazonaws.com/aFolder/myScript.sh \n"
            ] ] } }
        }
      }
    },

来自 URL:http ://alestic.com/2009/06/ec2-user-data-scripts它指出这些脚本始终以 root 身份运行。因此,我决定修改脚本以更改用户。下面是一个示例脚本,它不符合我的要求。我已经对其进行了内联评论以解释每个阶段的作用:

#!/bin/bash

whoami > /home/ubuntu/who1.txt    # Always returns 'root'
su ubuntu                         # Appears to have no effect. Ubuntu user does exist
whoami > /home/ubuntu/who2.txt    # Always returns 'root'

su ubuntu echo fish > /home/ubuntu/aFile.txt  # File is not created

sudo -u ubuntu bash               # Appears to have no effect
whoami > /home/ubuntu/who3.txt    # Always returns 'root'

我猜我的剧本有根本性的问题,但我就是看不到!有没有人对 AWS 和 Cloud Formation 有任何经验,并且您是否成功地以非 root 身份运行脚本?我真的不希望脚本以 root 身份运行,因为将要启动的活动不应该在 root 级别拥有。

谢谢,菲尔

4

2 回答 2

9

su在脚本的其余部分不会更改用户,它会为您指定的用户启动一个新的交互式 shell。在像您的脚本这样的非交互式上下文中,该 shell 会立即退出,因为它无事可做。

有关如何为一系列命令更改用户的一些建议,请参阅此问题。或者,对于单个命令,您可以执行sudo -u ubuntu [...].

于 2013-05-24T11:36:40.140 回答
0

这是一个很好的选择。

#!/bin/bash
su ubuntu << 'EOF'
    whoami >> /home/ubuntu/user_data_output2
EOF
su user2 << 'EOF'
    whoami >> /home/user2/user_data_output2
EOF

为什么 ?这会在每个“EOF”块中的命令之间保留目录和环境变量。

例如:

#!/bin/bash
su ubuntu << 'EOF'
    cd /home/ubuntu/myfolder
    pwd # The result will be /home/ubuntu/myfolder #
EOF
于 2017-10-27T11:32:56.030 回答