【问题标题】:what user is php-fpm running in docker or without docker?php-fpm 在 docker 中运行还是在没有 docker 的情况下运行的用户是什么?
【发布时间】:2019-08-06 17:15:33
【问题描述】:
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
COPY . /var/www
COPY --chown=www:www . /var/www
USER www

在 dockerfile 中,我得到了这个。

我的问题是:如何检查哪个用户在 php-fpm 容器下运行?在 nginx 中,如果我想找到它,我检查 /etc/nginx/nginx.conf 文件,那里写着用户。但对于 php-fpm 我无法弄清楚。 我怎么知道?不要告诉我使用 whoami 或类似的东西,因为这是当前登录的用户。

我在上面向您展示的命令(我不知道它是怎么做的),但它会创建 www 用户和 www 组,并将此用户和组提供给我的所有文件和目录。然后设置将登录的用户。但我不知道“写”权限是如何工作的,因为文件夹有rwxr-xr-x.,这意味着 php-fpm 在 www 下运行。我们从未更改过哪个用户在 php-fpm 下运行,它是如何发生的?谁能给我解释一下?

【问题讨论】:

  • 我希望进程以 1000 的 uid 运行,并且容器相信用户名为 www,遵循 Dockerfile 说明。有理由相信这不会发生吗?
  • 问题是 php-fpm 以 www 用户身份运行 php 脚本。因为我更改了文件夹的权限,并且在我更改前 3 位后它就停止工作(它是 rwx,我设置了 ---)。对于其他人我设置(rwx)。如果它运行的是 www 以外的其他用户,它仍然可以工作。所以 php-fpm 在 www 下运行。但我不知道这是怎么回事。我们什么时候把它改成在 www 下运行还是默认来自 php-fpm docker image?

标签: php linux docker nginx permissions


【解决方案1】:

Docker 是隔离技术,但你仍然可以使用ps -ef 等,所以只需运行

docker exec -it ${container} ps -ef 

它将返回活动进程及其所有者的列表。

例如简单的php:8-fpm 显示:

UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 05:16 ?        00:00:00 php-fpm: master 
process (/usr/local/etc/php-fpm.conf)
www-data       7       1  0 05:16 ?        00:00:00 php-fpm: pool www
www-data       8       1  0 05:16 ?        00:00:00 php-fpm: pool www

接下来只需在/etc/passwd中找到用户

docker exec -it ${container} grep 'www-data' /etc/passwd

它会显示

www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

所以肯定是 uid 为 33 的 www-data。

如果容器里面没有ps,有2个选择,可以安装,也可以手动查找uid

安装使用这个命令(例如php:8-fpm):

docker exec -it -u 0 ${container} su -c "apt update -y && apt install procps -y"

对于手动搜索,只需 grep /proc

sudo docker exec -it ${container} ls -ln /proc/

php:8-fpm 因为其他容器以非 root 身份运行分叉进程,所以用户不会为 0,在本例中为 33

【讨论】:

  • php-fpm 没有 ps 。我应该安装它并更改图像。我不想这样做。
  • /proc/7/status - 没有这样的文件或目录。
  • 你需要更新你的linux知识。登录到容器并从 proc grep 内容。 ps axu 也一样。所以 docker exec 容器 ls -l /proc/.你会看到 www-data,确定 100% 就足够了
  • 当您之前告诉我并且有 www 权限时,我做到了。所以它在 www 下运行对吗?
  • 你使用哪一张图片?
【解决方案2】:

USER www 将容器运行的用户更改为www。如果 php-fpm 以非 root 身份运行,那么它将忽略池配置的 usergroup 指令并以当前用户身份运行。这些指令仅在 php-fpm 以 root 身份运行时适用。

标准 php-fpm docker 容器以 root 身份运行,但池配置为www-data

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 2020-01-06
    • 2019-02-01
    • 2016-10-23
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多