su:从其他位置删除读取、执行位后,权限被拒绝



我想将su的访问权限限制给其他人,而不是我的部署用户。所以我遵循了以下步骤。正如你所看到的,su已经被deploy拥有,但我仍然无法访问它。我的docker文件如下:

FROM alpine:3.8
RUN set -ex 
&& addgroup -g 1000 deploy 
&& adduser -D -u 1000 -G deploy -s /bin/sh deploy 
&& chown root:deploy /bin/su 
&& chmod u+rws,g+rws,o-rwx /bin/su
USER deploy:nobody

当我执行以下命令时,在容器内:

/var/www/ $ ls -al /bin/su 
-rwsrws---    1 root     deploy       36560 May 19 11:19 /bin/su
/var/www/ $ su -h
sh: su: Permission denied

注意:当我像下面这样从root切换到部署时,它是有效的。

docker exec -it --user root alpine sh
/var/www/ # su deploy
/var/www/ $ su -h 

我的错,我自己想好了。由于我的dockerfile以USERdeploy:nobody的身份运行,因此无论我在哪里运行docker exec -it alpine sh,容器都以组nobody的身份运行但/bin/su只允许root:deploy。:(