【发布时间】:2021-06-17 10:40:20
【问题描述】:
我正在尝试以非特权身份运行 nginx 映像,并找到了执行此操作所需的以下命令节。我不关心运行官方的 nginx-unprivileged 镜像,因为这会破坏练习的目的(不要问为什么......请)。
从 linux 终端样式转换为 Kubernetes YAML Pod 清单 init-container 部分的预期命令...
RUN sed -i 's,listen 80;,listen 8080;,' /etc/nginx/conf.d/default.conf \
&& sed -i '/user nginx;/d' /etc/nginx/nginx.conf \
&& sed -i 's,/var/run/nginx.pid,/tmp/nginx.pid,' /etc/nginx/nginx.conf \
&& sed -i "/^http {/a \ proxy_temp_path /tmp/proxy_temp;\n client_body_temp_path /tmp/client_temp;\n fastcgi_temp_path /tmp/fastcgi_temp;\n uwsgi_temp_path /tmp/uwsgi_temp;\n scgi_temp_path /tmp/scgi_temp;\n" /etc/nginx/nginx.conf \
&& chown -R 101:0 /var/cache/nginx \
&& chmod -R g+w /var/cache/nginx \
&& chown -R 101:0 /etc/nginx \
&& chmod -R g+w /etc/nginx
我尝试了以下使用块标量无济于事...
...
command: ["/bin/sh", "-c"]
args:
- >
sed -i 's,listen 80;,listen 8080;,' /etc/nginx/conf.d/default.conf \
&& sed -i '/user nginx;/d' /etc/nginx/nginx.conf \
&& sed -i 's,/var/run/nginx.pid,/tmp/nginx.pid,' /etc/nginx/nginx.conf \
&& sed -i "/^http {/a \ proxy_temp_path /tmp/proxy_temp;\n client_body_temp_path /tmp/client_temp;\n fastcgi_temp_path /tmp/fastcgi_temp;\n uwsgi_temp_path /tmp/uwsgi_temp;\n scgi_temp_path /tmp/scgi_temp;\n" /etc/nginx/nginx.conf \
&& chown -R 101:0 /var/cache/nginx \
&& chmod -R g+w /var/cache/nginx \
&& chown -R 101:0 /etc/nginx \
&& chmod -R g+w /etc/nginx
...
...
command: ["/bin/sh", "-c"]
args:
- |
sed -i 's,listen 80;,listen 8080;,' /etc/nginx/conf.d/default.conf \
&& sed -i '/user nginx;/d' /etc/nginx/nginx.conf \
&& sed -i 's,/var/run/nginx.pid,/tmp/nginx.pid,' /etc/nginx/nginx.conf \
&& sed -i "/^http {/a \ proxy_temp_path /tmp/proxy_temp;\n client_body_temp_path /tmp/client_temp;\n fastcgi_temp_path /tmp/fastcgi_temp;\n uwsgi_temp_path /tmp/uwsgi_temp;\n scgi_temp_path /tmp/scgi_temp;\n" /etc/nginx/nginx.conf \
&& chown -R 101:0 /var/cache/nginx \
&& chmod -R g+w /var/cache/nginx \
&& chown -R 101:0 /etc/nginx \
&& chmod -R g+w /etc/nginx
...
同样使用单行...
...
command: ["/bin/sh"]
args: ["-c", "sed -i 's,listen 80;,listen 8080;,' /etc/nginx/conf.d/default.conf && sed -i '/user nginx;/d' /etc/nginx/nginx.conf && sed -i 's,/var/run/nginx.pid,/tmp/nginx.pid,' /etc/nginx/nginx.conf && sed -i "/^http {/a \ proxy_temp_path /tmp/proxy_temp;\n client_body_temp_path /tmp/client_temp;\n fastcgi_temp_path /tmp/fastcgi_temp;\n uwsgi_temp_path /tmp/uwsgi_temp;\n scgi_temp_path /tmp/scgi_temp;\n" /etc/nginx/nginx.conf && chown -R 101:0 /var/cache/nginx && chmod -R g+w /var/cache/nginx && chown -R 101:0 /etc/nginx && chmod -R g+w /etc/nginx"]
...
这些都不起作用...初始化容器永远不会启动。
这是另一个尝试...但 initContainer 仍处于 crashloopbackoff 状态...
apiVersion: v1
kind: Pod
metadata:
name: securityreview
spec:
securityContext:
runAsUser: 101
runAsNonRoot: True
initContainers:
- name: permission-fix
image: nginx
command:
- /bin/sh
- -c
- sed -i 's,listen 80;,listen 8080;,' /etc/nginx/conf.d/default.conf
&& sed -i '/user nginx;/d' /etc/nginx/nginx.conf
&& sed -i 's,/var/run/nginx.pid,/tmp/nginx.pid,' /etc/nginx/nginx.conf
&& sed -i "/^http {/a \ proxy_temp_path /tmp/proxy_temp;\n client_body_temp_path /tmp/client_temp;\n
fastcgi_temp_path /tmp/fastcgi_temp;\n uwsgi_temp_path /tmp/uwsgi_temp;\n
scgi_temp_path /tmp/scgi_temp;\n" /etc/nginx/nginx.conf
&& chown -R 101:0 /var/cache/nginx && chmod -R g+w /var/cache/nginx
&& chown -R 101:0 /etc/nginx && chmod -R g+w /etc/nginx
containers:
- name: webguy
image: nginx
securityContext:
runAsUser: 101
runAsGroup: 101
allowPrivilegeEscalation: false
【问题讨论】:
-
你能从
kubectl describe pod securityreview中添加error吗?还有kubectl logs securityreview
标签: kubernetes