运行 shell 脚本中的 if 语句作为带有 docker -c 选项的单行
Running an if statement in shell script as a single line with docker -c option
我需要 运行 下面的代码作为单行 docker 运行 -it image_name -c \bin\bash --script with --下面的脚本
(dir 和 dockerImageName 是参数)
'''cd ''' + dir+ ''' \
&& if make image ''' + dockerImageName''' 2>&1 | grep -m 1 "No rule to make target"; then
exit 1
fi'''
这怎么可能运行是一条线?
您可以将所有这些逻辑抽象到更高级别的应用程序中。如果您做不到,请编写标准 shell 脚本并将其 COPY
放入您的图像中。
三重引号看起来像 Python 语法。您可以将其分为三个部分:
cd $dir
部分指定子进程的工作目录;
make ...
是对 运行; 的实际命令
- 您正在检查其输出的某些条件。
在 Python 中,您可以使用参数数组调用 subprocess.run()
,并在应用程序级别指定这些不同的内容。参数数组不会被 shell 重新解释,因此可以保护您免受此特定安全问题的影响。你可能 运行:
completed = subprocess.run(['make', 'image', dockerImageName],
cwd=dir,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
if 'No rule to make target' in completed.stdout:
...
如果您需要将此作为 shell 脚本执行,请将其作为适当的 shell 脚本执行并确保再次引用您的参数可以保护您。
#!/bin/sh
set -e
cd ""
if make image "" 2>&1 | grep -m 1 "No rule to make target"; then
exit 1
fi
您永远不应该按照您所展示的方式组合字符串来构建命令行。这使您容易受到 shell 注入攻击。特别是如果攻击者知道用户有权使用 运行 docker
命令,他们可以设置
dir = '.; docker run --rm -v /:/host busybox cat /host/etc/shadow'
并获得一个他们可以在闲暇时破解的加密密码文件。一旦攻击者使用此技术获得对主机文件系统的无限根级 read/write 访问权限,几乎任何其他事情都是可能的。
我需要 运行 下面的代码作为单行 docker 运行 -it image_name -c \bin\bash --script with --下面的脚本 (dir 和 dockerImageName 是参数)
'''cd ''' + dir+ ''' \
&& if make image ''' + dockerImageName''' 2>&1 | grep -m 1 "No rule to make target"; then
exit 1
fi'''
这怎么可能运行是一条线?
您可以将所有这些逻辑抽象到更高级别的应用程序中。如果您做不到,请编写标准 shell 脚本并将其 COPY
放入您的图像中。
三重引号看起来像 Python 语法。您可以将其分为三个部分:
cd $dir
部分指定子进程的工作目录;make ...
是对 运行; 的实际命令
- 您正在检查其输出的某些条件。
在 Python 中,您可以使用参数数组调用 subprocess.run()
,并在应用程序级别指定这些不同的内容。参数数组不会被 shell 重新解释,因此可以保护您免受此特定安全问题的影响。你可能 运行:
completed = subprocess.run(['make', 'image', dockerImageName],
cwd=dir,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
if 'No rule to make target' in completed.stdout:
...
如果您需要将此作为 shell 脚本执行,请将其作为适当的 shell 脚本执行并确保再次引用您的参数可以保护您。
#!/bin/sh
set -e
cd ""
if make image "" 2>&1 | grep -m 1 "No rule to make target"; then
exit 1
fi
您永远不应该按照您所展示的方式组合字符串来构建命令行。这使您容易受到 shell 注入攻击。特别是如果攻击者知道用户有权使用 运行 docker
命令,他们可以设置
dir = '.; docker run --rm -v /:/host busybox cat /host/etc/shadow'
并获得一个他们可以在闲暇时破解的加密密码文件。一旦攻击者使用此技术获得对主机文件系统的无限根级 read/write 访问权限,几乎任何其他事情都是可能的。