如何在AWS Cloud Formation启动时以不同的用户身份运行脚本?

时间:2013-05-24 11:10:40

标签: bash amazon-web-services cloud

我在启动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身份运行,因为要启动的活动不应该在根级别拥有。

谢谢, 菲尔

2 个答案:

答案 0 :(得分:8)

su不会更改脚本剩余部分的用户,而是为您指定的用户启动新的交互式shell。在像这里的脚本这样的非交互式上下文中,该shell会立即退出,因为它没有任何内容可以执行。

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

答案 1 :(得分: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