【问题标题】:How to run script on AWS Cloud Formation startup as a different user?如何以不同用户身份在 AWS Cloud Formation 启动时运行脚本?
【发布时间】:2017-10-31 01:56:32
【问题描述】:

我在启动 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 级别拥有。

谢谢, 菲尔

【问题讨论】:

    标签: bash amazon-web-services cloud


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您向我解释,该链接也很有用。 sudo -u ubuntu [...] 也可以。谢谢。
    • 神圣的跳跃。我今天找了 几个小时 ,终于找到了有用的东西。谢谢你一百万次。为什么 AWS 不在其文档中提供此信息?
    【解决方案2】:

    这是一个不错的选择。

    #!/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
    

    【讨论】:

    • 请向用户解释差异,为什么它比他所做的更好(或者是他的错误)?
    猜你喜欢
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2021-10-11
    • 1970-01-01
    • 2021-01-01
    • 2010-09-11
    • 1970-01-01
    相关资源
    最近更新 更多