计算引擎启动脚本无法以非根用户身份执行
compute engine startup script can't execute as a non-root user
将我的问题归结为最简单的情况,我将 Compute Engine 与以下启动脚本结合使用:
#! /bin/bash
sudo useradd -m drupal
su drupal
cd /home/drupal
touch test.txt
我可以在这个命令后确认drupal用户存在,测试文件也是如此。但是我希望测试文件的所有者是 'drupal'(因此是 su)。但是,当我将其用作启动脚本时,我仍然可以确认 ROOT 是文件的所有者:
意思是我的
su drupal
没用。 sudo su drupal 也没有任何区别。我正在使用 Google 容器 OS,但在 Debian 8 映像上也会发生同样的情况。
我在下面写了一些东西 - 但看起来应该可以工作:
how to run script as another user without password
另一种选择是以其他用户身份通过 ssh 连接到您自己的计算机,您可以使用 sshpass 发送密码,或者获取您自己的 public 密钥。
当我测试类似的脚本时:
su [my username]
touch test.txt
它实际上以我的身份登录,直到我 ctrl-d 才完成
进一步测试表明,拥有文件的唯一方法是从 shell 调用脚本,即:
su me
touch test.txt
./test2.sh
test2.sh:
触摸 test2.txt
将这两个文件都授予 root,即使我拥有这两个脚本。
这意味着你所做的一切都是你自己的,你不能为别人做点什么。
sudo su
不是 shell 中的命令 运行 -- 它会启动一个新的 shell.
新的 shell 不再 运行ning 您的脚本,旧的 shell 即 运行ning 脚本等待新脚本退出它继续。
sudo su
命令将启动一个新的 shell。旧的 shell 等待旧的退出并继续执行其余代码。
您的脚本在 'old' shell 中 运行ning,这意味着这些命令:
cd /home/drupal
touch test.txt
仍然以 root 身份执行,因此这些文件的所有者也是 root。
您可以将脚本修改为:
#! /bin/bash
sudo useradd -m drupal
sudo -u drupal bash -c 'cd ~/; touch text2.txt'
它应该可以工作。
-u
标志按照用户指定的方式执行命令,在本例中为 'drupal'
将我的问题归结为最简单的情况,我将 Compute Engine 与以下启动脚本结合使用:
#! /bin/bash
sudo useradd -m drupal
su drupal
cd /home/drupal
touch test.txt
我可以在这个命令后确认drupal用户存在,测试文件也是如此。但是我希望测试文件的所有者是 'drupal'(因此是 su)。但是,当我将其用作启动脚本时,我仍然可以确认 ROOT 是文件的所有者:
意思是我的
su drupal
没用。 sudo su drupal 也没有任何区别。我正在使用 Google 容器 OS,但在 Debian 8 映像上也会发生同样的情况。
我在下面写了一些东西 - 但看起来应该可以工作: how to run script as another user without password
另一种选择是以其他用户身份通过 ssh 连接到您自己的计算机,您可以使用 sshpass 发送密码,或者获取您自己的 public 密钥。
当我测试类似的脚本时:
su [my username]
touch test.txt
它实际上以我的身份登录,直到我 ctrl-d 才完成
进一步测试表明,拥有文件的唯一方法是从 shell 调用脚本,即:
su me
touch test.txt
./test2.sh
test2.sh: 触摸 test2.txt
将这两个文件都授予 root,即使我拥有这两个脚本。 这意味着你所做的一切都是你自己的,你不能为别人做点什么。
sudo su
不是 shell 中的命令 运行 -- 它会启动一个新的 shell.
新的 shell 不再 运行ning 您的脚本,旧的 shell 即 运行ning 脚本等待新脚本退出它继续。
sudo su
命令将启动一个新的 shell。旧的 shell 等待旧的退出并继续执行其余代码。
您的脚本在 'old' shell 中 运行ning,这意味着这些命令:
cd /home/drupal
touch test.txt
仍然以 root 身份执行,因此这些文件的所有者也是 root。
您可以将脚本修改为:
#! /bin/bash
sudo useradd -m drupal
sudo -u drupal bash -c 'cd ~/; touch text2.txt'
它应该可以工作。
-u
标志按照用户指定的方式执行命令,在本例中为 'drupal'