AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[php](server)

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

Opcache.php 返回一个空白页面

  • 5

我们使用的是 PHP + FPM 8.2 + OPCache。以前我们使用https://www.repairrar.com/opcache.php来检查它的状态。但是今天它返回一个空页面。虽然它显示一个空页面,但我查看页面源代码发现它的内容大约有 3.3MB,但它们就是不显示在浏览器中。我尝试了 Chrome 和 FireFox,但显示的内容为空。

我还编写了一个小的 PHP 文件

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

当访问https://www.repairrar.com/opcache-get-status.php时,它显示 OpCache 已启用并正常运行:

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)
  }
}

下面是 php.ini 文件(我检查了更改历史记录,自 Opcache.php 返回可见内容以来它就没有改变过):

; 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 个回答
  • 71 Views
Martin Hope
Peter VARGA
Asked: 2024-08-06 21:28:29 +0800 CST

Apache/PHP 如果没有指定 index.php,则会下载

  • 4

我已经从 SLES 15 SP5 升级到 SLES 15 SP6。
每次 SP 升级都会给 Apache/PHP 带来问题。现在又出现了。
当前的问题是,当index.php未指定时,会下载文件。在 URL 中指定 PHP 脚本会执行 PHP 代码。

sub.foo.com/--> 下载index.php
sub.foo.com/index.php--> 正确执行index.php

index.php这意味着 Apache 和 PHP 可以正常工作,但是当未指定时,它不会以某种方式激活 PHP 处理程序。

Apache 日志文件中有这样的条目:
"GET / HTTP/1.1" 200 2537

httpd.conf有这个指令:
DirectoryIndex index.php index.html index.html.var

没有.htaccess文件。

升级之前一切都运行正常。升级后肯定修改了某些内容,从那时起我就遇到了这个问题。


PHP:8.3.9
阿帕奇:

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

对 php mail() 的调用未在 postfix 中排队

  • 5

我正在运行 CentOS7、PHP 8.0.30、postfix 2.10.1-9.el7 有时我们尝试通过 php mail() 函数发送的电子邮件不会发送,并且在启用 postfix 的 pickup、cleanup、qmgr、smtp 的详细日志记录后,我们注意到没有任何东西被拾取。

pickup unix n - n 60 1 pickup -v

电子邮件在 mail()(该调用记录在 syslog 中)和 postfix 之间丢失。

Sendmail 在 php.ini 中正确定义

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

我们的代码完全相同,在池中的另一台服务器上可以完美运行,但在这台服务器上却不行。有什么想法吗?

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

.htaccess 接受 URL 中的参数

  • 6

我有一个具有以下结构的 WordPress 页面website.com.au/pre-registration/parameter-value/,其中参数值最初是一个 GET 参数,但我被要求将其作为 URL 的一部分。

我如何让我的 .htaccess 明白他必须忽略最后一部分并引导用户website.com.au/pre-registration而不是返回 404?理想情况下,它仍将显示整个 URL,但仅加载website.com.au/pre-registration

我尝试了在网上找到的许多可能性,但都没有奏效。

我的 .htaccess 目前如下所示:

# 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 个回答
  • 41 Views
Martin Hope
cruunnerr
Asked: 2024-05-13 14:38:17 +0800 CST

postfix 错误处理以免丢失邮件

  • 5

我有一个带有表格的网站。当提交表单时,php 会向本地网关发送一封邮件。

php 代码如下所示:

$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>"; 
    } 

因此,当邮件成功发送后,mail.log 如下所示:

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

但是,由于技术问题,网关无法访问,mail.log 如下所示:

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)

PHP 只能判断邮件是否已被接受投递,而不能判断邮件是否已成功发送。所以在这两种情况下我都收到“消息已发送”......

所以我尝试找到一种方法,让 postfix 至少将邮件内容(带附件)本地保存在自己的机器(网络服务器)上,以防网关无法访问。因为否则邮件、表格内容将永远消失。

另一方面,当无法从网络服务器访问网关时(在 cronjobs 的帮助下),我已经提供了一种获取信息的方法。但这只会帮助我更快地注意到问题。

有任何想法吗?

谢谢你帮助我。

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

Apache PHP 8 不断被禁用

  • 5

我有一个运行 Apache2 版本 2.4.41 的 Ubuntu Linux 服务器 (20.04)

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

启用 PHP8 后/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

它像这样运行了几个月,现在不知何故 PHP 不断被禁用。当我的 PHP 应用程序突然停止工作时,我意识到了这一点,当我查看时,/etc/apache2/mods-enabled我发现 PHP8 的两个条目丢失了。如果我重新启用它,它会运行几天,然后同样的事情再次发生。

我在日志中看不到任何表明它已被禁用的内容,并且我(我希望)是唯一拥有机器根访问权限的人。

有谁知道我如何找出禁用此功能的原因以及原因?我可以启用某种日志记录来获取更多信息吗?

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

Apache:500 错误,PHP 仅在一个特定路径上失败

  • 6

我需要另一双眼睛来帮助调试问题。这将是一条很长的消息。我将提供大量背景信息,因为我不确定哪些细节可能很重要。

我们有两台服务器:开发服务器和生产服务器。现有服务器正在运行 RHEL7,并且由于生命周期已结束。我正在构建两个新的 RHEL9 VM 来取代它们。

服务器托管各种应用程序。它们彼此独立,并且每个都驻留在文档根目录之外的自己的子目录中。文档根目录位于/var/www/html。

给我带来麻烦的是全新、闪亮的 Drupal 10.2 安装。我使用 Composer 将其安装到 /var/www/drupal,然后在 /var/www/html/databases 创建了一个指向 /var/www/drupal/web 的符号链接。我必须稍微调整一下权限,以确保 Apache 用户可以执行所需的所有操作,但很快我就在开发和生产环境中安装了 Drupal 的功能。

然后,在我将自定义主题的副本克隆到主题文件夹后不久,开发人员就停止工作了。当我访问时,我收到以下错误消息:

The website encountered an unexpected error. Try again later.

ssl_access_log 显示此错误:

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

天啊,500 错误消息。该错误消息实际上可能意味着任何内容,因此根本没有任何意义。了不起。

我将 LogLevel 设置为调试,重现了问题并检查了 ssl_error_log,其中报告了以下内容:

[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)

没有任何明显的确凿证据,但我认为问题可能出在这一行:

[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

如果我理解正确的话,FCGI是Apache和PHP之间的接口。如果 FCGI 拒绝连接,则 PHP 脚本将不会被解释,一切都会停止。

我们安装了SELinux,它经常引起问题,所以我暂时将其关闭。但这并没有帮助——即使将 SELinux 置于宽容模式下也会出现问题。所以我不认为这是 SELinux 问题。

服务器上的其他一切都工作正常。我有多个 PHP 应用程序位于它们自己的文件夹中,可以顺利运行。所以我推测这可能与符号链接有关。我删除了该链接,并将其替换为一个名为“databases”的普通文件夹,其中包含一个名为“Hello world”的index.html 文件。效果很好。我将index.html 重命名为index.php,它立即失败,并显示与上面相同的错误消息。一时兴起,我将该 index.php 文件复制到“test.php”并访问它。而且效果很好!

与此同时,计算机上的所有其他 PHP 应用程序都可以继续顺利运行。此外,尽管处于符号链接中,但在生产服务器上安装的 Drupal 仍运行良好。据我所知,问题仅发生在确切路径 /var/www/html/databases/index.php 上,无论数据库是实际文件夹还是符号链接。从字面上看,服务器上的所有其他 PHP 文件都工作正常。

我做了一些谷歌搜索。我没有找到遇到完全相同问题的人。我确实发现有些人在安装了反向代理的服务器上报告了错误代码 AH00894。这让我犹豫了,因为我确实设置了反向代理。服务器上的其他应用程序之一是古老的、粗糙的并且令人烦恼的是不可替代的。它不会在 PHP 5.6 之后的任何版本中运行。所以我有一个运行的 docker 容器提供 PHP 5.6 环境。Apache 配置为通过反向代理与 docker 实例通信,因此:

# 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>

再次在 ssl.conf 中我有以下内容:

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/

代理应用程序运行良好。我可以访问https://dev.example.com/archon/它会加载。但我想知道代理是否会以某种方式干扰 drupal 实例。

所以我禁用了所有代理的东西。我注释掉了 ssl.conf 中的虚拟主机和所有代理配置行,然后重新启动了 Apache。我确认 archon 按预期停止工作,然后尝试了我的 Drupal。它产生了完全相同的错误。所以我重新打开了所有代理的东西。

至此,我已经为这个问题绞尽脑汁两天了。如果我正确读取日志,问题是 FCGI 拒绝连接。但不知道为什么拒绝。为什么服务器上的所有其他 PHP 应用程序都工作正常?生产服务器的配置与开发服务器相同,但生产可以运行,而开发则不能。为什么?服务器上的所有其他 PHP 文件都非常有用。为什么?当其他一切都正常时,这个 URL 却总是死掉,这是怎么回事?

我也许可以将index.php 文件重命名为其他文件,然后使用.htaccess 文件将该文件名标识为文件夹的索引。这可能是一个解决方法。但这非常尴尬,而且我担心重命名 Drupal 的核心文件会导致意想不到的问题。我不知道 Drupal 的代码是否在任何地方硬编码了该文件名。

我被困住了。我不知道还有什么办法可以弄清楚这个可怜的东西到底出了什么问题。新服务器预计于 26 日星期一上线。我的时间很快就用完了,这是我的最后一个障碍。任何建议,将不胜感激。

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

在单独的文件中创建 apparmor 帽子的正确方法

  • 5

我正在尝试重新加强 LAMP 配置的安全性

在我的配置中,每个网站包含:

  • 一个 Unix 帐户
  • 一个 MySQL 数据库只能通过一个 MySQL 帐户访问
  • 在单独的文件中定义一个 VirtualHost
  • 在单独的文件中定义一个 php-fpm 池

现在我正在尝试使用 apparmor 来重新加强安全性。

我从 php-fpm 的配置文件开始。

我的想法是为每个 php-fpm 池提供一个通用的 php-fpm 配置和一个特定的配置。

据我了解,通用配置是一个配置文件,具体配置应定义为 aa hat。

我想在单独的文件中定义这个特定的帽子配置。

在抱怨模式下,一切似乎都有效(至少当我使用命令aa-logprof时我什么也没有)

我就是这样做的

让我们考虑一个站点https://www.test.com,它有一个 Linux 用户“test”和一个 php-fpm 池“test.conf”

1° 在 php-fpm 池/etc/php/8.1/fpm/pool.d/test.conf中,我添加了这个来定义一个名为 test 的帽子

apparmor_hat = test

2° 我已将全局规则定义到/etc/apparmor.d/php-fpm中。这是我为在单独的文件中启用帽子而所做的配置

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° 我的测试帽已被定义到/etc/apparmor.d/php-fpm.d/test中,如下所示

   ^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,
  }

当我尝试传递到强制模式时,我的帽子似乎没有考虑我在主 apparmor配置文件/etc/apparmor.d/php-fpm中定义的规则

这是我的第一个 apparmor 个人资料,我已经按照我所理解的方式制作了它。

我不知道我错过了什么。我是否错过了最佳实践?

编辑

我发现我可以将主配置文件置于强制模式。

我遇到的问题仅是当我将帽子置于强制模式下并尝试重新启动 php 服务时

在这种情况下,我看到以下错误消息

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

如何配置 SE Linux 以便 PHP 可以通过套接字连接到 Postgres

  • 5

我有一个连接到 Postgresql 数据库的 PHP 应用程序。当我通过网络连接时,这是有效的,但在尝试使用套接字连接时,我遇到了 SELinux 违规。我相信上下文设置正确并且启用了正确的标志。

httpd_can_network_connect --> on
httpd_can_network_connect_db --> on

失败的 sealert 消息如下所示:

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

一件看起来很奇怪的事情是缺少 postgres 套接字的 RPM 包。

提供了生成本地策略模块的说明;但我不明白这些命令到底会做什么,并且犹豫是否要运行它们。

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

为什么Memcached是空的

  • 5

我已将 memcached 添加到 LAMP 堆栈和 Wordpress,除了 memcached 内存为空之外,一切似乎都很好。当我检查memcdump --servers=127.0.0.1时,它什么也没返回。另外,当我通过telnet 127.0.0.1 11211连接时,它似乎正在运行但为空 -统计项目什么也不返回,

统计板

STAT active_slabs 0
STAT total_malloced 0

我在这里缺少什么?

以下是我所做的所有检查

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

我在 Ubuntu 20.04 和 Apache 2.4 上的 php-fpm (v7.4) 上运行 PHP。我已经通过 apt 安装了memcached (v1.5.22)以及php7.4-memcached包和libmemcached-tools

netstat 显示它正在侦听端口 11211

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

一切都在本地主机上运行,​​所以我保留了默认的 /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

进程文件存在

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

并且进程运行

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

服务正在运行(服务 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.

php 模块配置(/etc/php/7.4/mods-available/memcached.ini)没有太多

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 个回答
  • 35 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve