我有一个由这个docker-compose命令创建的LEMP堆栈:
cadvisor:
image: google/cadvisor:latest
container_name: lemp_cadvisor
ports:
- "8082:8080"
volumes:
- "/:/rootfs:ro"
- "/var/run:/var/run:rw"
- "/sys:/sys:ro"
- "/var/lib/docker/:/var/lib/docker:ro"
ssh:
build: ./ssh
container_name: lemp_ssh
ports:
- "2222:22"
volumes:
- /home/core/www/:/var/www/:rw
- /home/core/.ssh/:/root/.ssh/:ro
phpmyadmin:
build: ./phpmyadmin
container_name: lemp_phpmyadmin
links:
- ssh
volumes:
- /var/www/phpmyadmin
- ./phpmyadmin/var/www/phpmyadmin/config.inc.php:/var/www/phpmyadmin/config.inc.php:ro
mariadb:
build: ./mariadb
container_name: lemp_mariadb
env_file: ./mariadb/mariadb.env
links:
- ssh
volumes:
- /var/run/mysqld
- /home/core/mysql/:/var/lib/mysql/:rw
- ./mariadb/etc/mysql/my.cnf:/etc/mysql/my.cnf:ro
php:
build: ./php
container_name: lemp_php
links:
- ssh
volumes:
- /var/run/php-fpm
- ./php/usr/local/php7/etc/php-fpm.conf:/usr/local/php7/etc/php-fpm.conf:ro
- ./php/usr/local/php7/etc/php.ini:/usr/local/php7/etc/php.ini:ro
- ./php/usr/local/php7/etc/php-fpm.d/www.conf:/usr/local/php7/etc/php-fpm.d/www.conf:ro
volumes_from:
- ssh
- mariadb
- phpmyadmin
nginx:
build: ./nginx
container_name: lemp_nginx
links:
- ssh
ports:
- "8080:80"
- "8081:443"
volumes:
- ./nginx/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./nginx/etc/nginx/conf.d/php.conf:/etc/nginx/conf.d/php.conf:ro
- ./nginx/etc/nginx/conf.d/cert/:/etc/nginx/conf.d/cert/:ro
volumes_from:
- php
我将Wordpress文件存储在/home/core/www/my-wordpress-install-dir
文件夹中的主机上。
从CoreOS主机SSH会话中查看文件,文件夹的权限如下:
core@core-01 ~/www/my-wordpress-install-dir $ ls -al
total 272
drwxrwxrwx 5 core core 4096 Dec 16 14:36 .
drwxr-xr-x 4 core core 4096 Dec 13 23:54 ..
-rw-r--r-- 1 core core 418 Dec 13 23:09 index.php
-rw-r--r-- 1 core core 19930 Dec 13 23:09 license.txt
-rw-r--r-- 1 core core 7358 Dec 13 23:09 readme.html
-rw-r--r-- 1 core core 5035 Dec 13 23:09 wp-activate.php
drwxr-xr-x 9 core core 4096 Dec 13 23:09 wp-admin
-rw-r--r-- 1 core core 271 Dec 13 23:09 wp-blog-header.php
-rw-r--r-- 1 core core 1369 Dec 13 23:09 wp-comments-post.php
-rw-r--r-- 1 core core 2764 Dec 13 23:09 wp-config-sample.php
-rw-rw-rw- 1 33 33 3216 Dec 16 14:36 wp-config.php
drwxr-xr-x 4 core core 4096 Dec 13 23:09 wp-content
-rw-r--r-- 1 core core 3286 Dec 13 23:09 wp-cron.php
drwxr-xr-x 16 core core 4096 Dec 13 23:09 wp-includes
-rw-r--r-- 1 core core 2380 Dec 13 23:09 wp-links-opml.php
-rw-r--r-- 1 core core 3316 Dec 13 23:09 wp-load.php
-rw-r--r-- 1 core core 33710 Dec 13 23:09 wp-login.php
-rw-r--r-- 1 core core 7887 Dec 13 23:09 wp-mail.php
-rw-r--r-- 1 core core 13021 Dec 13 23:09 wp-settings.php
-rw-r--r-- 1 core core 28594 Dec 13 23:09 wp-signup.php
-rw-r--r-- 1 core core 4035 Dec 13 23:09 wp-trackback.php
-rw-r--r-- 1 core core 3061 Dec 13 23:09 xmlrpc.php
但是,如果我将docker exec放入lemp_ssh
容器,则权限为:
root@15a6b53835e4:/var/www/my-wordpress-install-dir# ls -al
total 272
drwxrwxrwx. 5 500 500 4096 Dec 16 14:36 .
drwxr-xr-x. 4 500 500 4096 Dec 13 23:54 ..
-rw-r--r--. 1 500 500 418 Dec 13 23:09 index.php
-rw-r--r--. 1 500 500 19930 Dec 13 23:09 license.txt
-rw-r--r--. 1 500 500 7358 Dec 13 23:09 readme.html
-rw-r--r--. 1 500 500 5035 Dec 13 23:09 wp-activate.php
drwxr-xr-x. 9 500 500 4096 Dec 13 23:09 wp-admin
-rw-r--r--. 1 500 500 271 Dec 13 23:09 wp-blog-header.php
-rw-r--r--. 1 500 500 1369 Dec 13 23:09 wp-comments-post.php
-rw-r--r--. 1 500 500 2764 Dec 13 23:09 wp-config-sample.php
-rw-rw-rw-. 1 www-data www-data 3216 Dec 16 14:36 wp-config.php
drwxr-xr-x. 4 500 500 4096 Dec 13 23:09 wp-content
-rw-r--r--. 1 500 500 3286 Dec 13 23:09 wp-cron.php
drwxr-xr-x. 16 500 500 4096 Dec 13 23:09 wp-includes
-rw-r--r--. 1 500 500 2380 Dec 13 23:09 wp-links-opml.php
-rw-r--r--. 1 500 500 3316 Dec 13 23:09 wp-load.php
-rw-r--r--. 1 500 500 33710 Dec 13 23:09 wp-login.php
-rw-r--r--. 1 500 500 7887 Dec 13 23:09 wp-mail.php
-rw-r--r--. 1 500 500 13021 Dec 13 23:09 wp-settings.php
-rw-r--r--. 1 500 500 28594 Dec 13 23:09 wp-signup.php
-rw-r--r--. 1 500 500 4035 Dec 13 23:09 wp-trackback.php
-rw-r--r--. 1 500 500 3061 Dec 13 23:09 xmlrpc.php
经过一些更改后,我在主机上复制了wp-config.php
。我的这个权限问题,这可能是我的SSH2会话无法在Wordpress管理员中上传文件的原因。
我将此添加到我的wp-config.php
:
define('FTP_PUBKEY','/root/.ssh/wp_rsa.pub');
define('FTP_PRIKEY','/root/.ssh/wp_rsa');
define('FTP_USER','www-data');
define('FTP_PASS','');
define('FTP_HOST','10.0.2.2:22');
如果我在主机和容器中查看文件权限,请解释为什么文件权限如下。谢谢!
答案 0 :(得分:2)
我想我解决了。谢谢@dnephin的解释!
当您将整个Wordpress从主机共享到具有卷的容器时,我对此类Wordpress安装存在权限问题。
在我的堆栈中,我有一个基本图像,这是我的基本修改的debian,其他所有图像都是从这个图像构建的。
在基本图像中,我有这个部分:
### Start of Nginx WEBSERVER setup
RUN mkdir -p /var/www
# Modify www-data user and set UID, GID to 500
# https://muffinresearch.co.uk/linux-changing-uids-and-gids-for-user/
RUN groupmod -g 500 www-data \
&& usermod -u 500 www-data \
#&& `find / -user 33 -exec chown -h 500 {} \;` \
#&& `find / -group 33 -exec chgrp -h 500 {} \;` \
&& usermod -g 500 www-data \
&& chown -R www-data:www-data /var/www \
&& chmod g+s /var/www
### End of Nginx WEBSERVER setup
www-data
不是由php或nginx安装创建的。它是Debian中默认定义的用户/组,也许是其他发行版。一些PHP,Nginx安装建议在配置文件中使用此用户。
如果您的主机用户的UID / GID是500,那么此脚本会将www-data
用户的UID / GID从33更改为500.这样,如果您从主机共享任何内容,Docker会认为这些文件和文件夹属于www-data
用户。
在PHP-FPM设置文件中,还将用户和组设置为www-data
。
在你的nginx Dockerfile中,你还必须设置:
# Allow Nginx to access /var/run/php-fpm/php-fpm.sock
RUN usermod -aG www-data nginx
这种方式nginx
用户可以访问www-data
拥有的文件(您可以在nginx配置文件中定义nginx的用户名)。
在这次黑客攻击之后,我的Wordpress安装没有任何权限问题。所有文件都驻留在主机上+更新Wordpress完美无瑕。
我的LEMP筹码:https://github.com/DJviolin/LEMP
答案 1 :(得分:0)
权限(第一列)对我来说看起来是一样的(除了最后的额外点,这很可能只是主机和容器之间的ls
二进制文件的差异)。
区别在于文件的所有者和组。所有者和组存储为ID,并在/etc/group
和/etc/passwd
中查找名称。如果系统无法在这些文件中找到id的名称,则使用该编号。
在您的情况下,主机具有UID / GID 500的名称(core
),但它没有UID / GID 33的名称。在容器中它具有相反的名称。这是因为我提到的文件不在主机和容器之间共享。