AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / 问题

Perguntas[php](server)

Martin Hope
alancc
Asked: 2024-12-06 11:57:06 +0800 CST

Opcache.php retorna uma página vazia

  • 5

Estamos usando PHP + FPM 8.2 + OPCache. No passado, usávamos https://www.repairrar.com/opcache.php para verificar seu status. Mas hoje ele retorna uma página vazia. Embora mostre uma página vazia, eu visualizo a fonte da página e vejo que seu conteúdo tem cerca de 3,3 MB, mas eles simplesmente não são exibidos no navegador. Eu tentei Chrome e FireFox, mas mostram conteúdo vazio.

Eu também escrevo um pequeno arquivo PHP

<?php
    echo '<pre>' , var_dump(opcache_get_status(false)) , '</pre>';
?>

Ao visitar https://www.repairrar.com/opcache-get-status.php , ele mostra que o OpCache está habilitado e sendo executado corretamente:

array(8) {
  ["opcache_enabled"]=>
  bool(true)
  ["cache_full"]=>
  bool(false)
  ["restart_pending"]=>
  bool(false)
  ["restart_in_progress"]=>
  bool(false)
  ["memory_usage"]=>
  array(4) {
    ["used_memory"]=>
    int(446911376)
    ["free_memory"]=>
    int(626183176)
    ["wasted_memory"]=>
    int(647272)
    ["current_wasted_percentage"]=>
    float(0.0602819025516510009765625)
  }
  ["interned_strings_usage"]=>
  array(4) {
    ["buffer_size"]=>
    int(134217728)
    ["used_memory"]=>
    int(52098200)
    ["free_memory"]=>
    int(82119528)
    ["number_of_strings"]=>
    int(242556)
  }
  ["opcache_statistics"]=>
  array(13) {
    ["num_cached_scripts"]=>
    int(10741)
    ["num_cached_keys"]=>
    int(15444)
    ["max_cached_keys"]=>
    int(130987)
    ["hits"]=>
    int(167134669)
    ["start_time"]=>
    int(1733489514)
    ["last_restart_time"]=>
    int(0)
    ["oom_restarts"]=>
    int(0)
    ["hash_restarts"]=>
    int(0)
    ["manual_restarts"]=>
    int(0)
    ["misses"]=>
    int(11569)
    ["blacklist_misses"]=>
    int(0)
    ["blacklist_miss_ratio"]=>
    float(0)
    ["opcache_hit_rate"]=>
    float(99.99307851607164820961770601570606231689453125)
  }
  ["jit"]=>
  array(7) {
    ["enabled"]=>
    bool(false)
    ["on"]=>
    bool(false)
    ["kind"]=>
    int(5)
    ["opt_level"]=>
    int(4)
    ["opt_flags"]=>
    int(6)
    ["buffer_size"]=>
    int(0)
    ["buffer_free"]=>
    int(0)
  }
}

E abaixo está o arquivo php.ini (eu verifiquei o histórico de alterações e ele não foi alterado desde que Opcache.php retornou conteúdo visível):

; cPanel-generated php ini directives, do not edit
; Manual editing of this file may result in unexpected behavior.
; To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
; For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)

allow_url_fopen = On
allow_url_include = Off
display_errors = Off
enable_dl = Off
file_uploads = On
max_execution_time = 1000
max_input_time = 1000
max_input_vars = 1000
memory_limit = 512M
post_max_size = 64M
session.gc_maxlifetime = 2880
#session.save_path = "/var/cpanel/php/sessions/ea-php72"
upload_max_filesize = 64M
zlib.output_compression = Off
session.save_path = "/var/cpanel/php/sessions/ea-php82"

; The gloabal 10-opcahce.ini has already enable opcache, so it is not necessary to enable it here again.
; Enable opcache here will cause 'Zend OPcache can't be temporary enabled' warning in PHP. So the following
; line is commented out
; opcache.enable=1

php
  • 1 respostas
  • 71 Views
Martin Hope
Peter VARGA
Asked: 2024-08-06 21:28:29 +0800 CST

Apache/PHP Se index.php não for especificado, ele será baixado

  • 4

Atualizei do SLES 15 SP5 para o SLES 15 SP6.
Cada atualização do SP causa problemas com o Apache/PHP. Agora de novo.
O problema atual é que quando o nãoindex.php é especificado, o arquivo é baixado. Especificar o script PHP na URL executa o código PHP.

sub.foo.com/--> baixa o index.php
sub.foo.com/index.php--> executa corretamente oindex.php

Isso significa que o Apache e o PHP funcionam corretamente, mas de alguma forma não ativam o manipulador PHP quando NÃOindex.php é especificado.

No arquivo de log do Apache há esta entrada:
"GET / HTTP/1.1" 200 2537

httpd.conftem esta diretiva:
DirectoryIndex index.php index.html index.html.var

Não há .htaccessarquivo.

Antes da atualização, tudo estava funcionando corretamente. A atualização deve ter modificado algo e, desde então, estou com esse problema.


PHP 8.3.9
:

Server version: Apache/2.4.58 (Linux/SUSE)  
Server built:   2024-07-17 04:55:34.000000000 +0000
php
  • 2 respostas
  • 120 Views
Martin Hope
Bastien974
Asked: 2024-07-30 00:59:40 +0800 CST

Chamadas para php mail() não estão na fila no postfix

  • 5

Estou executando CentOS7, PHP 8.0.30, postfix 2.10.1-9.el7 Às vezes, e-mails que tentamos enviar através da função php mail() não são enviados e após ativar o log detalhado para coleta, limpeza, qmgr, smtp do postfix, notamos nada está sendo captado.

captador unix n - n 60 1 captador -v

O email é perdido entre mail() (cuja chamada é registrada no syslog) e postfix.

Sendmail está definido corretamente no php.ini

sendmail_path = /usr/sbin/sendmail -t -i

Nosso mesmo código funciona perfeitamente em outro servidor do pool, mas não neste servidor em particular. Alguma ideia?

php
  • 2 respostas
  • 104 Views
Martin Hope
Leonardo Pessatti
Asked: 2024-06-11 06:39:25 +0800 CST

.htaccess para aceitar parâmetros em URL

  • 6

Tenho uma página WordPress com a seguinte estrutura website.com.au/pre-registration/parameter-value/, onde o valor do parâmetro era originalmente um parâmetro GET, mas fui solicitado a torná-lo parte da URL.

Como faço para que meu .htaccess entenda que ele deve desconsiderar a última parte e levou o usuário ao website.com.au/pre-registrationinvés de retornar um 404? Idealmente, ele ainda exibirá o URL inteiro, mas carregará apenaswebsite.com.au/pre-registration

Tentei muitas possibilidades que encontrei na web, mas nenhuma funcionou.

Meu .htaccess está assim no momento:

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.

<IfModule mod_rewrite.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET,PUT,POST,DELETE"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
php
  • 1 respostas
  • 41 Views
Martin Hope
cruunnerr
Asked: 2024-05-13 14:38:17 +0800 CST

tratamento de erros do postfix para não perder o email

  • 5

Eu tenho um site com um formulário. Ao enviar o formulário, o php envia um email para um gateway local.

o código php fica assim:

$ok = @mail($emailData['to'], $emailData['subject'], $message, $emailData['headers']); 
    if ($ok) { 
      echo "<p>Message has been sent.</p>"; 
    } else { 
      echo "<p>Message could not be sent!</p>"; 
    } 

Portanto, quando um e-mail for enviado com sucesso, o mail.log terá a seguinte aparência:

May 11 06:15:01 webserver postfix/qmgr[2280345]: 7B6B0600EF: from=<www-data@webserver>, size=803, nrcpt=1 (queue active)
May 11 06:15:01 webserver postfix/smtp[2573042]: 7B6B0600EF: to=<[email protected]>, relay=192.168.1.250[192.168.1.250]:26, delay=0.06, delays=0.03/0.01/0.02/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 8478AE11B4)
May 11 06:15:01 webserver postfix/qmgr[2280345]: 7B6B0600EF: removed

No entanto, devido a um problema técnico, o gateway não estava acessível e o mail.log ficou assim:

May  8 06:40:12 webserver postfix/qmgr[1521]: 33890607E6: from=<www-data@webserver>, size=67769, nrcpt=2 (queue active)
May  8 06:40:42 webserver postfix/smtp[1493379]: connect to 192.168.1.250[192.168.1.250]:26: Connection timed out
May  8 06:41:12 webserver postfix/smtp[1493379]: 33890607E6: to=<[email protected]>, relay=none, delay=399463, delays=399402/0.04/60/0, dsn=4.4.1, status=deferred (connect to 192.168.1.250[192.168.1.250]:26: Connection timed out)

O PHP só pode dizer se um e-mail foi aceito para entrega, mas não pode dizer se o e-mail foi enviado com sucesso. Então, em ambos os casos, recebi a mensagem "A mensagem foi enviada"...

Então tento encontrar uma maneira de deixar o postfix pelo menos salvar o conteúdo do email (com anexos) localmente em sua própria máquina (servidor web), caso o gateway não esteja acessível. Porque caso contrário o e-mail, respectivamente o conteúdo do formulário, desaparecerá para sempre.

Por outro lado já forneci uma forma de obter uma informação, quando o gateway não estiver acessível a partir do servidor web (com a ajuda do cronjobs). Mas isso só me ajuda a perceber os problemas mais rapidamente.

Alguma ideia?

Obrigado por me ajudar.

php
  • 2 respostas
  • 25 Views
Martin Hope
Jeff Loughlin
Asked: 2024-04-30 02:32:08 +0800 CST

Apache PHP 8 continua sendo desativado

  • 5

Eu tenho um servidor Ubuntu Linux (20.04) executando o Apache2 versão 2.4.41

$ apachectl -v
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2024-04-10T17:46:26

com PHP8 habilitado em /etc/apache2/mods-enabled:

$ ls -l /etc/apache2/mods-enabled/php8*
lrwxrwxrwx 1 root root 39 Apr 29 14:17 /etc/apache2/mods-enabled/php8.0.conf -> /etc/apache2/mods-available/php8.0.conf
lrwxrwxrwx 1 root root 39 Apr 29 14:17 /etc/apache2/mods-enabled/php8.0.load -> /etc/apache2/mods-available/php8.0.load

Ele funcionou assim por meses e agora, de alguma forma, o PHP continua sendo desativado. Percebo isso quando meu aplicativo PHP para de funcionar repentinamente e, quando olho, /etc/apache2/mods-enableddescubro que as duas entradas para PHP8 estão faltando. Se eu reativá-lo, ele funcionará por alguns dias e depois acontecerá a mesma coisa novamente.

Não consigo ver nada nos logs que indique que ele foi desativado e sou (espero) a única pessoa com acesso root à máquina.

Alguém sabe como posso rastrear o que está desativando isso e por quê? Existe algum tipo de registro que eu possa ativar para obter mais informações?

php
  • 1 respostas
  • 44 Views
Martin Hope
Will Martin
Asked: 2024-02-22 05:25:57 +0800 CST

Apache: erro 500, PHP falha em apenas um caminho específico

  • 6

Preciso de outro par de olhos para ajudar a depurar um problema. Esta será uma mensagem longa. Fornecerei muito contexto porque não tenho certeza de quais detalhes podem ser importantes.

Temos dois servidores: dev e produção. Os servidores existentes estão executando o RHEL7 e estão prestes a atingir o fim de sua vida útil. Estou no processo de construção de duas novas VMs RHEL9 para substituí-las.

Os servidores hospedam uma variedade de aplicativos. Eles são independentes um do outro e cada um reside em seu próprio subdiretório fora da raiz do documento. A raiz do documento está localizada em /var/www/html.

O que está me causando problemas é uma instalação nova e brilhante do Drupal 10.2. Instalei-o em/var/www/drupal usando o compositor e, em seguida, criei um link simbólico em/var/www/html/databases que aponta para/var/www/drupal/web. Tive que ajustar um pouco as permissões para garantir que o usuário do Apache pudesse fazer tudo o que precisava, mas logo tive uma instalação funcional do Drupal tanto no desenvolvimento quanto na produção.

Então o do dev parou de funcionar, logo depois de clonar uma cópia do nosso tema personalizado para a pasta de temas. Quando visito, recebo esta mensagem de erro:

The website encountered an unexpected error. Try again later.

O ssl_access_log mostra este erro:

10.133.0.30 - - [21/Feb/2024:13:55:07 -0600] "GET /databases/ HTTP/1.1" 500 61

Nossa, uma mensagem de erro 500. A mensagem de erro que pode significar literalmente qualquer coisa e, portanto, não significa absolutamente nada. Maravilhoso.

Configurei meu LogLevel para depuração, reproduzi o problema e verifiquei o ssl_error_log, onde ele relata o seguinte:

[Wed Feb 21 13:55:07.118063 2024] [ssl:info] [pid 7769:tid 7944] [client 10.133.0.30:64845] AH01964: Connection to child 81 established (server undcflwebdev0.und.edu:443)
[Wed Feb 21 13:55:07.118300 2024] [ssl:debug] [pid 7769:tid 7944] ssl_engine_kernel.c(2391): [client 10.133.0.30:64845] AH02043: SSL virtual host for servername undcflwebdev0.und.edu found
[Wed Feb 21 13:55:07.118492 2024] [core:debug] [pid 7769:tid 7944] protocol.c(2460): [client 10.133.0.30:64845] AH03155: select protocol from , choices=h2,http/1.1 for server undcflwebdev0.und.edu
[Wed Feb 21 13:55:07.120744 2024] [ssl:debug] [pid 7769:tid 7944] ssl_engine_kernel.c(2251): [client 10.133.0.30:64845] AH02041: Protocol: TLSv1.3, Cipher: TLS_AES_256_GCM_SHA384 (256/256 bits)
[Wed Feb 21 13:55:07.120862 2024] [socache_shmcb:debug] [pid 7769:tid 7944] mod_socache_shmcb.c(508): AH00831: socache_shmcb_store (0x16 -> subcache 22)
[Wed Feb 21 13:55:07.120889 2024] [socache_shmcb:debug] [pid 7769:tid 7944] mod_socache_shmcb.c(745): AH00842: expiring 11 and reclaiming 0 removed socache entries
[Wed Feb 21 13:55:07.120901 2024] [socache_shmcb:debug] [pid 7769:tid 7944] mod_socache_shmcb.c(765): AH00843: we now have 0 socache entries
[Wed Feb 21 13:55:07.120911 2024] [socache_shmcb:debug] [pid 7769:tid 7944] mod_socache_shmcb.c(862): AH00847: insert happened at idx=0, data=(0:32)
[Wed Feb 21 13:55:07.120917 2024] [socache_shmcb:debug] [pid 7769:tid 7944] mod_socache_shmcb.c(865): AH00848: finished insert, subcache: idx_pos/idx_used=0/1, data_pos/data_used=0/230
[Wed Feb 21 13:55:07.120923 2024] [socache_shmcb:debug] [pid 7769:tid 7944] mod_socache_shmcb.c(530): AH00834: leaving socache_shmcb_store successfully
[Wed Feb 21 13:55:07.121011 2024] [ssl:debug] [pid 7769:tid 7944] ssl_engine_kernel.c(415): [client 10.133.0.30:64845] AH02034: Initial (No.1) HTTPS request received for child 81 (server undcflwebdev0.und.edu:443)
[Wed Feb 21 13:55:07.121357 2024] [authz_core:debug] [pid 7769:tid 7944] mod_authz_core.c(815): [client 10.133.0.30:64845] AH01626: authorization result of Require all granted: granted
[Wed Feb 21 13:55:07.121390 2024] [authz_core:debug] [pid 7769:tid 7944] mod_authz_core.c(815): [client 10.133.0.30:64845] AH01626: authorization result of <RequireAny>: granted
[Wed Feb 21 13:55:07.121491 2024] [authz_core:debug] [pid 7769:tid 7944] mod_authz_core.c(815): [client 10.133.0.30:64845] AH01626: authorization result of Require all granted: granted
[Wed Feb 21 13:55:07.121514 2024] [authz_core:debug] [pid 7769:tid 7944] mod_authz_core.c(815): [client 10.133.0.30:64845] AH01626: authorization result of <RequireAny>: granted
[Wed Feb 21 13:55:07.121680 2024] [proxy:debug] [pid 7769:tid 7944] mod_proxy.c(1520): [client 10.133.0.30:64845] AH01143: Running scheme unix handler (attempt 0)
[Wed Feb 21 13:55:07.121703 2024] [proxy_ajp:debug] [pid 7769:tid 7944] mod_proxy_ajp.c(795): [client 10.133.0.30:64845] AH00894: declining URL fcgi://localhost/var/www/html/databases/index.php
[Wed Feb 21 13:55:07.121719 2024] [proxy_fcgi:debug] [pid 7769:tid 7944] mod_proxy_fcgi.c(1069): [client 10.133.0.30:64845] AH01076: url: fcgi://localhost/var/www/html/databases/index.php proxyname: (null) proxyport: 0
[Wed Feb 21 13:55:07.121736 2024] [proxy_fcgi:debug] [pid 7769:tid 7944] mod_proxy_fcgi.c(1078): [client 10.133.0.30:64845] AH01078: serving URL fcgi://localhost/var/www/html/databases/index.php
[Wed Feb 21 13:55:07.121758 2024] [proxy:debug] [pid 7769:tid 7944] proxy_util.c(2568): AH00942: FCGI: has acquired connection for (*:80)
[Wed Feb 21 13:55:07.121776 2024] [proxy:debug] [pid 7769:tid 7944] proxy_util.c(2626): [client 10.133.0.30:64845] AH00944: connecting fcgi://localhost/var/www/html/databases/index.php to localhost:8000
[Wed Feb 21 13:55:07.121792 2024] [proxy:debug] [pid 7769:tid 7944] proxy_util.c(2662): [client 10.133.0.30:64845] AH02545: fcgi: has determined UDS as /run/php-fpm/www.sock
[Wed Feb 21 13:55:07.122008 2024] [proxy:debug] [pid 7769:tid 7944] proxy_util.c(2852): [client 10.133.0.30:64845] AH00947: connected /var/www/html/databases/index.php to httpd-UDS:0
[Wed Feb 21 13:55:07.122082 2024] [proxy:debug] [pid 7769:tid 7944] proxy_util.c(3222): AH02823: FCGI: connection established with Unix domain socket /run/php-fpm/www.sock (*:80)
[Wed Feb 21 13:55:07.150902 2024] [proxy:debug] [pid 7769:tid 7944] proxy_util.c(2584): AH00943: FCGI: has released connection for (*:80)
[Wed Feb 21 13:55:07.151140 2024] [ssl:debug] [pid 7769:tid 7944] ssl_engine_io.c(1151): [client 10.133.0.30:64845] AH02001: Connection closed to child 81 with standard shutdown (server undcflwebdev0.und.edu:443)

Não existem armas definitivas óbvias, mas acho que o problema pode ser esta linha:

[Wed Feb 21 13:55:07.121703 2024] [proxy_ajp:debug] [pid 7769:tid 7944] mod_proxy_ajp.c(795): [client 10.133.0.30:64845] AH00894: declining URL fcgi://localhost/var/www/html/databases/index.php

Se bem entendi, FCGI é a interface entre Apache e PHP. Se a FCGI estiver recusando a conexão, o script PHP não será interpretado e tudo será interrompido.

Temos o SELinux instalado e ele costuma causar problemas, então desliguei-o temporariamente. Mas isso não ajudou - o problema ocorre mesmo quando o SELinux é colocado no modo permissivo. Então não acho que seja um problema do SELinux.

Todo o resto no servidor está funcionando bem. Tenho vários aplicativos PHP em suas próprias pastas que funcionam sem problemas. Então pensei que talvez fosse algo relacionado ao link simbólico. Excluí o link e o substituí por uma pasta comum chamada "bancos de dados" contendo um arquivo index.html que diz "Olá, mundo". Funcionou muito bem. Renomeei index.html para index.php e ele falhou imediatamente com as mesmas mensagens de erro acima. Por capricho, copiei o arquivo index.php para "test.php" e o acessei. E funcionou bem!

Enquanto isso, todos os outros aplicativos PHP na máquina continuam funcionando perfeitamente. Além disso, a instalação do Drupal no servidor de produção está funcionando perfeitamente, apesar de estar em um link simbólico. Pelo que sei, o problema ocorre apenas para o caminho exato /var/www/html/databases/index.php, independentemente de os bancos de dados serem uma pasta real ou um link simbólico. Literalmente, todos os outros arquivos PHP no servidor funcionam bem.

Eu pesquisei no Google. Não encontrei ninguém que tenha tido o mesmo problema. Encontrei algumas pessoas relatando o código de erro AH00894 em servidores com proxies reversos instalados. Isso me fez pensar, porque realmente tenho um proxy reverso configurado. Um dos outros aplicativos no servidor é antigo, desajeitado e irritantemente insubstituível. Ele não será executado em nada mais recente que o PHP 5.6. Então, eu tenho um contêiner docker em execução, fornecendo um ambiente PHP 5.6. O Apache está configurado para se comunicar com a instância do docker por meio de um proxy reverso, assim:

# Listen to all traffic on port 80.
<VirtualHost *:80>

   # Keep the original host name.
   ProxyPreserveHost On

   # Redirect all traffic for the /archon folder to :8080 instead.
   ProxyPass /archon http://localhost:8080/
   ProxyPassReverse /archon http://localhost:8080/

</VirtualHost>

E novamente em ssl.conf eu tenho os seguintes bits:

SSLProxyEngine On

ProxyPreserveHost On

# Prevent SSL offloading
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"

# Redirect all traffic for the /archon folder to :8080 instead.
ProxyPass /archon http://localhost:8080/
ProxyPassReverse /archon http://localhost:8080/

O aplicativo proxy funciona bem. Posso acessar https://dev.example.com/archon/ e ele carrega. Mas me perguntei se talvez o proxy esteja de alguma forma interferindo na instância drupal.

Então desativei todas as coisas do proxy. Comentei o virtualhost e todas as linhas de configuração do Proxy em ssl.conf e reiniciei o Apache. Verifiquei que o archon parou de funcionar conforme o esperado e tentei meu Drupal. Ele gerou exatamente o mesmo erro. Então ativei todo o proxy novamente.

Neste ponto, estou batendo a cabeça contra esse problema há dois dias. Se li os logs corretamente, o problema é que o FCGI está recusando a conexão. Mas não sei POR QUE está recusando. Por que todos os outros aplicativos PHP no servidor funcionam bem? O servidor de produção é configurado de forma idêntica ao servidor de desenvolvimento, mas a produção funciona e o desenvolvimento não. Por que? Todos os outros arquivos PHP no servidor funcionam perfeitamente. Por que? O que há nesse URL que morre consistentemente quando todo o resto funciona?

Eu poderia talvez renomear o arquivo index.php para outra coisa e então usar um arquivo .htaccess para identificar esse nome de arquivo como o índice da pasta. Isso pode ser uma solução alternativa. Mas é muito estranho e temo que renomear o arquivo principal do Drupal possa causar problemas inesperados. Não sei se algum código do Drupal tem esse nome de arquivo codificado em algum lugar.

Estou preso. Não sei mais o que tentar para descobrir o que diabos há de errado com essa maldita coisa. Os novos servidores devem entrar no ar na segunda-feira, dia 26. Meu tempo está acabando rapidamente e este é meu último bloqueador. Qualquer sugestão seria apreciada.

php
  • 1 respostas
  • 50 Views
Martin Hope
Thibault Richard
Asked: 2024-02-21 21:50:18 +0800 CST

Maneira correta de criar chapéus apparmor em arquivo separado

  • 5

Estou tentando reforçar a segurança da minha configuração LAMP

Na minha configuração, cada site consiste em:

  • Uma conta Unix
  • Um banco de dados MySQL acessível apenas a partir de uma conta MySQL
  • Um VirtualHost definido em um arquivo separado
  • Um pool php-fpm definido em um arquivo separado

Agora estou tentando reforçar a segurança usando apparmor.

Estou começando com o perfil para php-fpm.

Minha ideia é ter uma configuração geral do php-fpm e uma configuração específica para cada pool do php-fpm.

Pelo que entendi, a configuração geral é um perfil e a configuração específica deve ser definida como aa hat .

Eu gostaria de ter essa configuração específica do chapéu definida em um arquivo separado.

No modo reclamação tudo parece funcionar (pelo menos não tenho nada quando uso o comando aa-logprof )

Foi assim que eu fiz isso

Vamos considerar um site https://www.test.com com um usuário Linux "test" e um pool php-fpm "test.conf"

1° No pool php-fpm /etc/php/8.1/fpm/pool.d/test.conf eu adicionei isso para definir um chapéu chamado test

apparmor_hat = test

2° Defini minhas regras globais em /etc/apparmor.d/php-fpm . Esta é a configuração que fiz para habilitar os chapéus em arquivo separado

include if exists <php-fpm.d>
...
signal send peer=php-fpm//*,
signal send set=quit peer=php-fpm//**,
signal send set=kill peer=php-fpm//**,
signal send set=term peer=php-fpm//**,
...
change_profile -> php-fpm//**,

3° Meu chapéu de teste foi definido em /etc/apparmor.d/php-fpm.d/test assim

   ^test flags=(complain,attach_disconnected) {
    /var/run/php/php-fpm-test.sock rwlk,
    /var/log/php-fpm/test.access.log rw,
    ...
    deny /var/www/** r,
    owner /home/test/www/** rw,
  }

Quando tento passar para o modo forçado , parece que as regras que defini no perfil principal do apparmor /etc/apparmor.d/php-fpm NÃO são levadas em consideração pelo meu chapéu

Este é meu primeiro perfil de apparmor e fiz isso como entendi.

Não sei o que perdi. Perdi uma prática recomendada?

EDITAR

Descobri que posso colocar o perfil principal no modo forçado .

O problema que estou enfrentando é apenas quando coloco um chapéu no modo forçado e quando tento reiniciar o serviço php

Nesse caso, vejo a seguinte mensagem de erro

php8.1-fpm.service: Failed to kill control group /system.slice/php8.1-fpm.service, ignoring: Permission denied
php
  • 1 respostas
  • 63 Views
Martin Hope
Chronocide
Asked: 2024-02-01 06:01:17 +0800 CST

Como configuro o SE Linux para que o PHP possa se conectar ao Postgres por soquete

  • 5

Tenho uma aplicação PHP que se conecta a um banco de dados Postgresql. Isso funciona quando me conecto via rede, mas recebo uma violação do SELinux ao tentar conectar usando o soquete. Acredito que os contextos estão definidos corretamente e os sinalizadores corretos estão habilitados.

httpd_can_network_connect --> on
httpd_can_network_connect_db --> on

a mensagem de alerta para a falha é assim:

SELinux is preventing /usr/sbin/php-fpm from connectto access on the unix_stream_socket /run/postgresql/.s.PGSQL.5432.

*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that php-fpm should be allowed connectto access on the .s.PGSQL.5432 unix_stream_socket by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'php-fpm' --raw | audit2allow -M my-phpfpm
# semodule -X 300 -i my-phpfpm.pp


Additional Information:
Source Context                system_u:system_r:httpd_t:s0
Target Context                system_u:system_r:unconfined_service_t:s0
Target Objects                /run/postgresql/.s.PGSQL.5432 [ unix_stream_socket
                              ]
Source                        php-fpm
Source Path                   /usr/sbin/php-fpm
Port                          <Unknown>
Host                          localhost.localdomain
Source RPM Packages           php-fpm-8.2.13-1.el9.remi.x86_64
Target RPM Packages
SELinux Policy RPM            selinux-policy-targeted-38.1.23-1.el9.noarch
Local Policy RPM              selinux-policy-targeted-38.1.23-1.el9.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     localhost.localdomain
Platform                      Linux localhost.localdomain
                              5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC
                              Wed Nov 8 17:36:32 UTC 2023 x86_64 x86_64
Alert Count                   1080
First Seen                    2023-12-29 14:34:45 PST
Last Seen                     2024-01-31 12:15:18 PST
Local ID                      e3bcfa07-6867-47e3-bedf-4d8ca2d16443

Raw Audit Messages
type=AVC msg=audit(1706732118.737:4455): avc:  denied  { connectto } for  pid=516281 comm="php-fpm" path="/run/postgresql/.s.PGSQL.5432" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:unconfined_service_t:s0 tclass=unix_stream_socket permissive=0


type=SYSCALL msg=audit(1706732118.737:4455): arch=x86_64 syscall=connect success=no exit=EACCES a0=8 a1=561638666d58 a2=6e a3=7fa9f9d951a0 items=0 ppid=516267 pid=516281 auid=4294967295 uid=984 gid=984 euid=984 suid=984 fsuid=984 egid=984 sgid=984 fsgid=984 tty=(none) ses=4294967295 comm=php-fpm exe=/usr/sbin/php-fpm subj=system_u:system_r:httpd_t:s0 key=(null)

Hash: php-fpm,httpd_t,unconfined_service_t,unix_stream_socket,connectto

Uma coisa que parece estranha é a falta de um pacote RPM para o soquete postgres.

São fornecidas instruções para gerar um módulo de política local; mas não entendo exatamente o que esses comandos farão e hesito em executá-los.

ausearch -c 'php-fpm' --raw | audit2allow -M my-phpfpm
semodule -X 300 -i my-phpfpm.pp
php
  • 2 respostas
  • 73 Views
Martin Hope
Łukasz Korona
Asked: 2024-01-31 22:56:29 +0800 CST

Por que o Memcached está vazio

  • 5

Adicionei o memcached à pilha LAMP e ao Wordpress e tudo parece bem, exceto que a memória do memcached está vazia. Quando verifico com memcdump --servers=127.0.0.1 ele não retorna nada. Além disso, quando me conecto via telnet 127.0.0.1 11211 , parece estar em execução, mas vazio - os itens de estatísticas não retornam nada e

placas de estatísticas

STAT active_slabs 0
STAT total_malloced 0

O que estou perdendo aqui?

Abaixo estão todas as verificações que fiz

saída completa de estatísticas do memcached

stats
STAT pid 37127
STAT uptime 12198
STAT time 1706711922
STAT version 1.5.22
STAT libevent 2.1.11-stable
STAT pointer_size 64
STAT rusage_user 1.447142
STAT rusage_system 0.916591
STAT max_connections 1024
STAT curr_connections 1
STAT total_connections 14
STAT rejected_connections 13
STAT connection_structures 2
STAT reserved_fds 20
STAT cmd_get 1
STAT cmd_set 0
STAT cmd_flush 0
STAT cmd_touch 0
STAT cmd_meta 0
STAT get_hits 0
STAT get_misses 1
STAT get_expired 0
STAT get_flushed 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 11417
STAT bytes_written 6580
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT time_in_listen_disabled_us 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT slab_reassign_rescues 0
STAT slab_reassign_chunk_rescues 0
STAT slab_reassign_evictions_nomem 0
STAT slab_reassign_inline_reclaim 0
STAT slab_reassign_busy_items 0
STAT slab_reassign_busy_deletes 0
STAT slab_reassign_running 0
STAT slabs_moved 0
STAT lru_crawler_running 0
STAT lru_crawler_starts 5100
STAT lru_maintainer_juggles 12246
STAT malloc_fails 0
STAT log_worker_dropped 0
STAT log_worker_written 0
STAT log_watcher_skipped 0
STAT log_watcher_sent 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT slab_global_page_pool 0
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evicted_active 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
STAT moves_to_cold 0
STAT moves_to_warm 0
STAT moves_within_lru 0
STAT direct_reclaims 0
STAT lru_bumps_dropped 0
END

Estou executando PHP em php-fpm (v7.4) no Ubuntu 20.04 e Apache 2.4. Instalei o memcached (v1.5.22) via apt junto com o pacote php7.4-memcached e libmemcached-tools

netstat mostra que está escutando na porta 11211

tcp    0    0 127.0.0.1:11211  0.0.0.0:*  LISTEN 37127/memcached 

tudo roda em localhost, então mantive o padrão /etc/memcached.conf

# run as a daemon
-d 
# memory
-m 64
# connection port
-p 11211
# user
-u memcache
# listen
-l 127.0.0.1
# pidfile
-P /var/run/memcached/memcached.pid

o arquivo do processo existe

-rw-r--r-- 1 memcache memcache 6 Jan 31 12:15 /var/run/memcached/memcached.pid

e o processo é executado

ps -eaf | grep memcached
memcache   37127       1  0 12:15 ?        00:00:02 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -P /var/run/memcached/memcached.pid

o serviço está em execução (status do serviço memcached)

Loaded: loaded (/lib/systemd/system/memcached.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-01-31 12:15:26 CET; 3h 19min ago
       Docs: man:memcached(1)
   Main PID: 37127 (memcached)
      Tasks: 10 (limit: 5846)
     Memory: 2.1M
     CGroup: /system.slice/memcached.service
             └─37127 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -P /var/run/memcached/memcached.pid

Jan 31 12:15:26 www systemd[1]: Started memcached daemon.

A configuração do módulo php (/etc/php/7.4/mods-available/memcached.ini) não tem muito

memcached.ini
; priority=25
extension=memcached.so
; You need to install php-igbinary package to use igbinary serializer
; and php-msgpack to use msgpack serializer
memcached.serializer=php
php
  • 1 respostas
  • 35 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve