在shell 中执行chmod无效的bug?

因为安全整改需求:docker容器启动的用户不能是root所以在安装部署的时候创建了用户hcs

image.png

并赋予了对应二进制可执行文件的权限
image.png

然后使用hcs用户登录系统,执行docker 及docker-compose 命令显示无权限?

去看了一下对应的文件 发现居然赋权没有生效

但是手动执行下面三行命令后发现 hcs可以用docker及docker-compose 命令

chmod +x /usr/bin/docker
chmod 755 /usr/local/bin/docker-compose
chmod o+rw /var/run/docker.sock

这下彻底无语了..为啥在shell脚本中执行chmod 命令无效

手动在终端执行却有效?


下面是主脚本

function installDocker {
    color_printf green  "5.1 copy docker to /usr/bin ..."
    cp ./installFiles/${server_arch}/docker-environment/docker/* /usr/bin/
    chmod +x /usr/bin/{containerd,containerd-shim,ctr,docker,dockerd,docker-init,containerd-shim-runc-v2,docker-proxy,runc}
    cp ./installFiles/${server_arch}/docker-environment/docker.service /etc/systemd/system/
    chmod +x /etc/systemd/system/docker.service
    systemctl daemon-reload
    systemctl start docker
    systemctl enable docker.service
    docker -v
    color_printf green   "5.2 start install docker-compose ..."
    cp ./installFiles/${server_arch}/docker-environment/docker-compose-Linux-${server_arch} /usr/local/bin/docker-compose
    chmod 755 /usr/local/bin/docker-compose
    chmod o+rw /var/run/docker.sock
    docker-compose -v
    cp ./installFiles/${server_arch}/docker-environment/daemon.json /etc/docker/
    systemctl daemon-reload
    systemctl restart docker
}

installDocker

以及执行脚本后的终端命令截图

image.png

可以看到权限都没有赋上

阅读 2.8k
1 个回答

其实脚本里面应该是执行成功的,问题应该在后面的重启docker操作。
重新启动docker时,docker应该是重新创建了docker.sock。新创建的文件权限默认没有o+rw。

可以考虑直接把hcs加入到docker组中。sudo usermod -aG docker hcs

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题