1
phy25 2020-02-10 16:06:57 +08:00 via Android
这个权限取决于你用的是什么容器的亲亲。
|
2
momocraft 2020-02-10 16:09:41 +08:00
改成 **容器内的** 相应用户的 UID (数字)。同一 UID 数字在容器内外的用户名可能不同。
|
3
programV2 OP |
4
jinliming2 2020-02-10 19:42:38 +08:00 via iPhone
理论上不需要设置权限,把目录挂载进 docker 之后,挂载的目录会在容器启动时被设置为容器中启动时用户的权限。
|
5
anguiao 2020-02-10 19:54:23 +08:00
容器里面 www-data 的 UID 不一定和容器外面的一样,要把 UID 设置成一样的才行。
|
6
litanid 2020-02-10 19:57:16 +08:00 via Android
我是把容器里 wwwdata 的 uid 改成外面用户一样
|
7
programV2 OP @jinliming2 不行, 我试过安装网站时报错提示没权限
@litanid@anguiao 谢谢! 那我直接 id命令查看www-data的 UID 和 GID , 如果不一样, 再用 usermod groupmod 把主机上的用户 改成跟容器里的一样, 就行了吧? 改里面或者外面 的 uid 应该没区别吧? |
8
saytesnake 2020-02-10 21:46:53 +08:00 via Android
最近用的几个镜像都很巧 UID 是 1001,实际上很简单,看下 Dockerfile 怎么写的,一般是定义用户名或直接就是 UID,随后起一个容器,进去看下指定用户的 UID 是多少就可以了。
|
10
programV2 OP @litanid 谢谢 V 友回复!我刚查了下容器外的 www-data 是
uid=33(www-data) gid=33(www-data) groups=33(www-data) 而容器内 www-data 是 uid=82(www-data) gid=82(www-data) groups=82(www-data),82(www-data) 我只要改 uid 和 gid 就可以了吗? 后面的 groups=82(www-data),82(www-data) 不用管他吗? 另外想请问我容器外主机上部署容器是用 root 用户, 容器内运行用户默认也是 root, 这样有什么安全风险? 除了把挂载主机目录./project/web 的 owner 改成 www-data 及 chmod -R 755 ./project/web 外该如何加固? @saytesnake |
11
litanid 2020-02-11 03:26:45 +08:00 via Android
我的本来意思是说把容器里 wwwdata 的 uid 和 gid,改成主机目录常用用户非 root 的 uid 和 gid,而不是主机的 wwwdata,这样主机常用用户可以随意更改目录内容。
|
12
saytesnake 2020-02-11 15:28:26 +08:00
@programV2 跟容器外(即主机)的用户与组没有任何关系...你直接 chown -R 82.82 /project/web 就可以了。
|
13
programV2 OP @litanid 谢谢 V 友指点! 请问 1.我现在在主机新建普通用户 foo: useradd -m -s -u 2005 -g 2005 foo , 我建了 3 个 docker 容器:Nginx,Drupal, MySQL, 其中 Nginx 和 Drupal 容器都是挂载到 ./project/web , 这样我是不是需要同时改这两个容器的 uid gid? 分别进这两个容器执行下列命令吗?
usermod -u 2005 www-data groupmod -g 2005 www-data find / -user 82 -exec chown -h www-data {} \; find / -group 82 -exec chgrp -h www-data {} \; 2. 改完 uid gid 后我在主机上执行 chmod -R 755 ./project/web 及 chown -R foo:foo ./project/web 为了减少网站被黑掉或挂马的危险, 还有什么地方该加固的吗? 我主机已经改成证书登陆了. 谢谢 V 友指点! |
14
programV2 OP @saytesnake 谢谢V友指点! 我建了 3 个 docker 容器:Nginx,Drupal, MySQL, 其中 Nginx 和 Drupal 容器都是挂载到 ./project/web , 直接 chown -R 82.82 /project/web 那我 nginx 容器不就无法访问这个数据卷了吗 ? 刚进 nginx 容器发现没有 www-data 这个用户名,请问 nginx 服务访问 /project/web 用的是哪个用户名?
@litanid V 友,我刚进 nginx 容器发现没有 www-data 这个用户名,请问 nginx 服务访问 /project/web 用的是哪个用户名? |
15
programV2 OP @litanid
@saytesnake 我 docker-compose.yml 部分设置如下 version: "3" services: nginx: image: nginx:$NGINX_TAG container_name: "${PROJECT_NAME}_nginx" ports: - $NGINX_PORTA volumes: - "./drupal/web:/var/www/html" - "./drupal/logs/nginx:/var/log/nginx" - "./drupal/nginx/nginx.conf:/etc/nginx/conf.d/default.conf" - "./drupal/cloudflare:/etc/ssl" depends_on: - php drupal: image: drupal:$DRUPAL_TAG container_name: "${PROJECT_NAME}_drupal" volumes: - "./drupal/web:/var/www/html" - "./drupal/mysql:/var/lib/mysql" restart: always depends_on: - mysql |
16
programV2 OP @anguiao 谢谢 ! 请问 1.我现在在主机新建普通用户 foo: useradd -m -s -u 2005 -g 2005 foo , 我建了 3 个 docker 容器:Nginx,Drupal, MySQL, 其中 Nginx 和 Drupal 容器都是挂载到 ./project/web , 这样我是不是需要同时改这两个容器的 uid gid? 分别进这两个容器执行下列命令吗?
usermod -u 2005 www-data groupmod -g 2005 www-data find / -user 82 -exec chown -h www-data {} \; find / -group 82 -exec chgrp -h www-data {} \; ps: 我刚进 nginx 容器发现没有 www-data 这个用户名,请问 nginx 服务访问 /project/web 用的是哪个用户名? 2. 改完 uid gid 后我在主机上执行 chmod -R 755 ./project/web 及 chown -R foo:foo ./project/web 为了减少网站被黑掉或挂马的危险, 还有什么地方该加固的吗? 我主机已经改成证书登陆了. 谢谢 V 友指点! |
17
cdlnls 2020-02-12 00:04:46 +08:00 via iPhone
我个人觉得没必要关心容器里面的用户权限,关心这个,还不如关心程序有没有问题。
看一下服务器开放了什么端口,不必要的可以关掉,常用的端口可以改改。然后都设置复杂密码。 |
18
programV2 OP @cdlnls 谢谢大佬回复 !端口和密码我都加固了, 之前安装网站时赶时间运行了 chmod -R 777, 现在是想把网站源码文件夹的 owner 改为 www-data 用户, 我刚进 nginx 容器发现没有 www-data 这个用户名,请问 nginx 服务访问 /project/web 用的是哪个用户名?
1.主机建了 3 个 docker 容器:Nginx,Drupal, MySQL, 其中 Nginx 和 Drupal 容器都是挂载到 ./project/web , 这样我是不是需要同时改这两个容器的 uid gid? 我现在在主机新建普通用户 foo: useradd -m -s -u 2005 -g 2005 foo , 还要分别进这两个容器执行下列命令吗? usermod -u 2005 www-data groupmod -g 2005 www-data find / -user 82 -exec chown -h www-data {} \; find / -group 82 -exec chgrp -h www-data {} \; 我 docker-compose.yml 部分设置如下 version: "3" services: nginx: image: nginx:$NGINX_TAG container_name: "${PROJECT_NAME}_nginx" ports: - $NGINX_PORTA volumes: - "./drupal/web:/var/www/html" - "./drupal/logs/nginx:/var/log/nginx" - "./drupal/nginx/nginx.conf:/etc/nginx/conf.d/default.conf" - "./drupal/cloudflare:/etc/ssl" depends_on: - php drupal: image: drupal:$DRUPAL_TAG container_name: "${PROJECT_NAME}_drupal" volumes: - "./drupal/web:/var/www/html" - "./drupal/mysql:/var/lib/mysql" restart: always depends_on: - mysql |