在高山docker图像中使用SUID

我正在尝试在Alpine Docker镜像中以不同的用户身份运行一些脚本。 以devuserlogin时,我想以root devuser运行setup.sh ,并以appuser devuser运行app.sh 由于我已经读过,你不能在脚本文件上使用SUID,我有几个C程序, setup appapp ,调用脚本。 我可以运行setup作为root但不能运行app作为appuser

这是目录的内容。 请注意,应用程序和安装程序在程序上设置了SUID位。 我试图在脚本上设置SUID,但没有奏效。

 /opt/app $ ls -l total 24552 -r-sr-xr-x 1 appuser appgroup 10632 Jun 27 12:59 app -r-------- 1 appuser appgroup 25101769 Jun 27 12:59 app.jar -r-xr-xr-- 1 appuser appgroup 327 Jun 27 12:59 app.sh -r-------- 1 appuser appgroup 316 Jun 27 12:59 application.yml -r-sr-xr-x 1 root root 10632 Jun 27 12:59 setup -r-xr-xr-- 1 root root 152 Jun 27 12:59 setup.sh 

我以开发者devuser运行。

 /opt/app $ whoami devuser 

我可以成功运行setup 。 它由root拥有并以root身份运行。

 /opt/app $ ./setup Running As: root:appgroup 

我尝试运行app ,它不会更改为所有者。

 /opt/app $ ./app Running As: devuser:appgroup Error: Unable to access jarfile app.jar 

这里是setup.sh的源代码。

 /opt/app $ cat setup.sh #!/bin/ash echo "Running As: $(whoami):$(id -gn)" 

这是app.sh的源app.sh

 /opt/app $ cat app.sh #!/bin/ash echo "Running As: $(whoami):$(id -gn)" java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar $SPRING_OPTS 

这是两个用户。

 /opt/app $ id devuser uid=701(devuser) gid=700(appgroup) groups=700(appgroup),700(appgroup) /opt/app $ id appuser uid=700(appuser) gid=700(appgroup) groups=700(appgroup),700(appgroup) 

这里是setup.c的源码。

 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { setuid(0); system("./setup.sh"); return 0; } 

这是app.c的源app.c 。 我也试过setuid(0) ,但没有奏效。

 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { setuid(700); system("./app.sh"); return 0; } 

最后,我的脏衣服; Docker构build。 我曾尝试将adduser设置为系统用户和非系统用户。

 RUN addgroup -g 700 appgroup \ && adduser -G appgroup -D -u 700 -S -H -s /bin/sh appuser \ && adduser -G appgroup -D -u 701 -s /bin/sh devuser RUN sh -c 'touch app.jar' \ && chown appuser:appgroup *.jar \ && chown appuser:appgroup *.yml \ && chown appuser:appgroup app.sh \ && chown appuser:appgroup app \ # && chmod -R 750 . \ && chmod u+x,g+x,ox *.sh \ && chmod 4555 setup \ && chmod 4555 app \ && chmod 400 *.yml \ && chmod 400 *.jar \ && chmod -R -w . USER devuser # USER appuser 

韦斯,谢谢你的帮助。