Problema de permissões: por que o usuário não é necessário em meu segundo conjunto php-fpm?

1

Estou executando o FreeBSD 10.2 com um Apache 2.4.17 compilado sob encomenda com o php-fpm. O pool padrão ( [www] , quase uma configuração stock php-fpm) foi executado em user / group nobody / nobody . O Apache é executado no usuário / grupo daemon / daemon . Ele funciona bem conectando-se a um soquete com alguns sites diferentes, todos funcionando no pool de estoque. Eles são sites de baixa prioridade usando PHP para coisas como exibir a hora.

A longo prazo, quero descobrir uma melhor separação de privilégios. Eu criei um pool para uma instalação roundcube em um vhost separado pertencente ao usuário rcuser , group rcuser (basicamente uma conta normal do FreeBSD shell). Por hábito, eu estaciono web vhosts em /usr/vhosts/ , então este site vai para /usr/vhosts/webmail/ com o próprio aplicativo armazenado em /usr/vhosts/webmail/htdocs/ . Toda a árvore de webmail pertence ao usuário e grupo rcuser. Todos os diretórios dessa árvore têm 750 e os arquivos têm 640 permissões. A piscina é assim:

[rcuser]
user = rcuser
group = rcuser
listen = /var/run/php5-fpm-rcuser.sock
listen.owner = rcuser
listen.group = rcuser
listen.mode = 0666
pm = dynamic
pm.max_children = 5
pm.min_spare_servers = 1
pm.start_servers = 2
pm.max_spare_servers = 3

Para que o Apache possa acessá-lo, criei uma ACL em cada arquivo e diretório, fornecendo daemon acesso equivalente a /usr/vhosts/webmail/ e seus subdiretórios. Basicamente, isso significava fazer find /usr/vhosts/webmail/ -type d -exec setfacl -m user:daemon:rwx {} \; e find webmail/ -type f -exec setfacl -m user:daemon:rw {} \; Achei que funcionaria, mas não funcionou, me dando um erro de arquivo não encontrado quando tentei carregar o Roundcube.

A próxima coisa que tentei foi dar ao bit de permissão other o acesso de leitura aos arquivos e o acesso rx aos diretórios. Isso funcionou. O Roundcube funcionou muito bem, mas isso obviamente significa que outros usuários podem ler arquivos nele e encontrar informações confidenciais, como senhas do MySQL. Não quero realmente que eu queira.

Então, a próxima coisa que fiz foi find /usr/vhosts/webmail/ -exec chmod o-rwx {} \; para remover as permissões liberais, mas manter as permissões rcuser e daemon originais intactas. para outros usuários e tente descobrir onde está o problema. Depois de algumas dicas, lembrei que o primeiro pool que criei é executado como usuário nobody e find /usr/vhosts/webmail/ -exec -exec setfacl -m user:nobody:r-x {} \; . Isso funcionou. Por alguma razão, o php-fpm quer que o usuário nobody tenha acesso de leitura e execução nos diretórios deste segundo conjunto.

Portanto, ps -maux revela que o php-fpm está executando este pool sob o usuário certo rcuser . Este não é o maior problema do mundo para mim, mas não tenho certeza sobre quais implicações de segurança isso pode ter quando começar a implantar essa configuração do php-fpm nos sites dos clientes. Além disso, uma ACL extra e aparentemente estranha para se preocupar é um aborrecimento.

Há algo que eu possa fazer para que o usuário nobody não precise dessa ACL?

    
por Bolwerk 11.11.2015 / 22:44

1 resposta

0

Oh, bem, feliz por ter escrito tudo porque acho que inspirou uma resposta. O pool padrão usava TCP e eu queria que meu novo usasse soquetes de domínio UNIX. Então, eu tive um pequeno problema de sintaxe. Eu acidentalmente incluí uma porcaria extra na linha de configuração do proxy no Apache.

ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm-rcuser.sock|fcgi://localhost:9000/usr/vhosts/webmail/htdocs/$1"

deveria ter sido

ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm-rcuser.sock|fcgi://localhost/usr/vhosts/webmail/htdocs/"

Ele estava se conectando ao primeiro pool, embora o segundo pool estivesse funcionando corretamente. Essa :9000 designação de porta e $1 parte no final da linha tinha que ir para.

Então, corrijo o Apache e corri:

find webmail/ -exec setfacl -b {} \; para limpar as permissões da ACL e, em seguida, executou find webmail/ -type d -exec setfacl -m user:daemon:rwx {} \;; find webmail/ -type f -exec setfacl -m user:daemon:rw {} \; para defini-las da forma que eu queria.

A configuração parece ser legal, então espere que ajude alguém lutando com as permissões do vache do Apache algum dia.

Meu objetivo de longo prazo é não precisar mais executar um servidor FTPS ou usar php_admin_value open_basedir

    
por 11.11.2015 / 23:17