计算引擎启动脚本无法以非root用户身份执行

Pega88

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

#! /bin/bash
sudo useradd -m drupal
su drupal
cd /home/drupal
touch test.txt

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

ls -l结果

意思是我的

su drupal

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

塞尔吉·亨德里克斯

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

新的外壳程序不再运行您的脚本,而运行脚本的旧外壳程序在新脚本继续运行之前等待退出。

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

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”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章