计算引擎启动脚本无法作为非root用户执行

Peg*_*a88 7 google-compute-engine google-cloud-platform containeros google-container-os

将我的问题归结为最简单的情况,我使用Compute Engine和以下启动脚本:

#! /bin/bash
sudo useradd -m drupal
su drupal
cd /home/drupal
touch test.txt
Run Code Online (Sandbox Code Playgroud)

我可以在此命令后确认drupal用户是否存在,测试文件也是如此.但是我希望测试文件的所有者是'drupal'(因此是su).但是,当我将其用作启动脚本时,我仍然可以确认ROOT是文件的所有者:

ls -l结果

意思是我的

su drupal
Run Code Online (Sandbox Code Playgroud)

不工作.sudo su drupal也没有任何区别.我正在使用Google Container OS,但在Debian 8图像上也是如此.

小智 6

sudo su 不是在shell中运行的命令 - 它启动一个新的shell.

新的shell不再运行您的脚本,并且运行该脚本的旧shell在继续之前等待新的shell退出.

sudo su命令将启动一个新shell.旧shell等待旧的shell退出并继续执行其余代码.您的脚本在"旧"shell中运行,这意味着这些命令:

cd /home/drupal
touch test.txt
Run Code Online (Sandbox Code Playgroud)

仍然以root身份执行,因此这些文件的所有者也是root用户.

您可以将脚本修改为:

#! /bin/bash
sudo useradd -m drupal
sudo -u drupal bash -c 'cd ~/; touch text2.txt'
Run Code Online (Sandbox Code Playgroud)

它应该工作.该-u标志以用户指定的方式执行命令,在本例中为"drupal"