标签: php

如何为多个用户和多个网站设置安全权限?

在带有 的 Gentoo 3.2.12 服务器上apache2+php,有几个网站在运行:

/www
    /website1
    /website2
    ...etc
Run Code Online (Sandbox Code Playgroud)

apache用户应具有只读到所有的网站访问。每个网站里面还有几个文件夹apache应该具有读写访问权限(上传文件夹等)。

有几个人在这些网站上工作。每个人都应该拥有对他们工作的网站的读写访问权限,但其他人则没有。此外,他们应该能够设置权限(在他们的网站内),以便apache可以写入某些文件夹(好吧,如果他们创建新的上传文件夹或其他内容)。

其他用户根本不应该有访问权限/www

这可以做到吗?如何做到?

(PS。另外...因为这些人可以上传 PHP 脚本,然后在 Apache 的上下文中执行,我猜他们也可以间接访问其他网站...是否也可以保护它?我不能想办法,但谁知道...)

security permissions gentoo php apache-httpd

5
推荐指数
1
解决办法
2402
查看次数

以root用户身份从php执行shell脚本?

需要从 PHP 执行以下行:

$res = shell_exec('sudo sh /home/nicklas/cronjobs/make_account.sh 用户名密码');

问题是执行时什么也没有发生。如果我尝试 echo $res ,它会出现空白。我也试过使用 system() ,结果相同。我猜它不起作用,因为我需要以 root 访问权限运行脚本,而 www-data 用户默认情况下没有。我将以下行添加到 /etc/sudoers 以希望获得访问权限:

www-data ALL=(ALL:ALL) NOPASSWD:/home/nicklas/cronjobs/make_account.sh

但没有成功。我试过在两者之间重新启动 apache,没有任何改变。

我错过了什么吗?

shell scripting sudo php apache-httpd

5
推荐指数
2
解决办法
3万
查看次数

段错误是否意味着内存不佳

这是一个全新的服务器,具有全新的安装和全新的 Apache/PHP 编译,没有任何异常。只是一个托管的 WordPress 网站,我得到以下信息。

这是否意味着内存不好?如果是这样,我如何在不取下盒子的情况下对其进行测试。

尽管使 php.ini 设置不受限制,但我注意到 PHP 存在一些奇怪的内存问题。

conftest[31039]: segfault at 1 ip 0000000000405088 sp 00007fff92152090 error 4 in conftest[400000+a4000]
    conftest[26375]: segfault at 1 ip 0000000000405088 sp 00007fffa5b0b450 error 4 in conftest[400000+a4000]
    php[10669]: segfault at aec69ff1 ip 0000000000759ac1 sp 00007fff39245950 error 4 in php[400000+6dd000]
    php[14634]: segfault at 0 ip 000000000073ea24 sp 00007ffffaa24c60 error 4 in php[400000+6dd000]
    php[17315]: segfault at 9e979531 ip 0000000000759ac1 sp 00007fff877ba610 error 4 in php[400000+6dd000]
    php[2804]: segfault at 108afe2a1 ip 0000000000759ac1 sp 00007fff53cb5210 error …
Run Code Online (Sandbox Code Playgroud)

memory hardware centos segmentation-fault php

5
推荐指数
1
解决办法
5933
查看次数

是否有(相对)安全的方式从 Web 运行 CLI 命令?

自从我开始编写 LAMP 应用程序以来,我想为我的盒子开发一个管理控制面板。(出于娱乐和教育目的,否则我会使用市场上已有的东西)

但总是阻止我的是我总是听说 exec() 函数(我知道实现这一目标的唯一方法)是邪恶的......你知道:“不要使用它们”,“这是糟糕的编码”等。

为此,我从未听说过更安全的替代方案,所以我的问题是:

有没有?

在具有密码保护的文档根目录的专用 Web 服务器中运行该应用程序还不够吗?

嗯,这是我的疑问。

command-line php

5
推荐指数
1
解决办法
1625
查看次数

Apache 不读取对 PHP 文件的更改

我正在使用 Apache 和 PHP 在 CentOS6 服务器上进行开发。当我对 PHP 文件进行更改(并保存)时,似乎 apache 没有读取更改后的文件 - 它仍在处理我的旧 .php 文件。5-10 分钟后,它将开始使用新文件。

有人能告诉我如何强制 Apache 立即获取更改的 .php 文件吗?


更新:我将文件移到 apache 服务器上,但问题仍然存在(这不是 NFS 问题)。因此,似乎 Apache 只是在几分钟内没有读取更改后的文件 困惑...

mount php apache-httpd

5
推荐指数
1
解决办法
2万
查看次数

Linux 服务器被黑

我收到了来自 Google 的电子邮件,说我的网站被黑了。这是电子邮件。

尊敬的 domain.com 网站所有者或网站管理员(我也收到了这封电子邮件,用于我的其他域),我们最近发现您网站上的某些页面看起来可能是网络钓鱼攻击,其中鼓励用户放弃登录等敏感信息凭证或银行信息。我们已从 Google.com 搜索结果中删除了可疑网址,并开始向在某些从 Google 接收反网络钓鱼数据的浏览器中访问这些网址的用户显示警告页面。

因此,我检查了 Web 文件夹,发现在其中包含许多文件夹的新文件夹中。

这是文件夹

在此处输入图片说明

我已经全部删除了。还有什么我应该做的吗?网站是 Magento、Wordpress 和 HTML 网站。服务器是带有 Plesk 12 的 CentOS。

security php webserver plesk

5
推荐指数
1
解决办法
766
查看次数

无法连接到 MySQL:没有这样的文件或目录

我写了这个docker-compose 项目。该泊坞窗,compose.yml如下所示:

version: '3.1'

services:
  db:
    image: mysql
    restart: always
    environment:
      - MYSQL_DATABASE=mgsv
      - MYSQL_USER=mgsv_user
      - MYSQL_PASSWORD=mgsvpass
      - MYSQL_ROOT_PASSWORD=mysql123
    volumes:
      - ./mysql:/docker-entrypoint-initdb.d

  www:
    build: ./mGSV 
    restart: always
    ports:
      - 8080:80
Run Code Online (Sandbox Code Playgroud)

index.php文件 看起来是这样的:

<?php
echo "Hello World!";
//mysqli_connect("localhost","my_user","my_password","my_db");
$con = mysqli_connect("localhost","mgsv_user","mgsvpass","mgsv");

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
  else {
     echo "done";
  }
?>
Run Code Online (Sandbox Code Playgroud)

Dockerfile基于一个 PHP 容器,看起来像这样。

FROM php:5-apache

RUN apt-get update  && apt-get install …
Run Code Online (Sandbox Code Playgroud)

php mysql docker

5
推荐指数
1
解决办法
2万
查看次数

一个 chroot/isolated SFTP 用户仍然可以使用 PHP 访问整个文件系统

我想在我的服务器上为我的朋友提供一个独立的网络托管空间。我做了:

useradd friend 
groupadd sftpusers
mkdir /sftp
mkdir /sftp/friend     
mkdir /sftp/friend/home
mkdir /sftp/friend/www 
usermod -aG sftpusers friend
chown friend:sftpusers /sftp/friend/home/
chown friend:sftpusers /sftp/friend/www/
usermod -d /sftp/friend/home friend 
Run Code Online (Sandbox Code Playgroud)

我将此添加到sshd_config

Subsystem sftp internal-sftp -d /home
Match Group sftpusers
ChrootDirectory /sftp/%u
Run Code Online (Sandbox Code Playgroud)

这对 Apache 配置:

<VirtualHost *:80>
  ServerName friend.example.com
  DocumentRoot /sftp/friend/www
  <Directory />
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

它有效:friend可以在 jailroot 环境中访问 SFTP 并且他不能/sftp/friend从 SFTP退出。这很好。

但我注意到他仍然可以使用 PHP 查看文件系统中的其他文件:如果他创建了一个index.php包含:

<?php …
Run Code Online (Sandbox Code Playgroud)

chroot sftp php apache-httpd

5
推荐指数
1
解决办法
145
查看次数

Apache + php-fpm:每个池、每个用户项目的适当权限?

使用不同用户(每个项目一个用户)设置 Apache 虚拟主机和 PHP-FPM 池的正确方法是什么?

\n
    \n
  • 每个用户/项目在文件访问方面彼此独立
  • \n
  • 使用普通 Apache / 的项目www-data,无法访问池化项目?
  • \n
\n

我有一个将 Apache 与虚拟主机一起使用的设置,并且我想为每个虚拟主机设置自己的php-fpm池:

\n
    \n
  • 阿帕奇虚拟主机site1.conf
  • \n
\n
<VirtualHost *:443>\n        DocumentRoot /var/www/site1/public\n\n        <Directory /var/www/site1/public>\n            Options Indexes FollowSymLinks\n            AllowOverride All\n            Require all granted\n        </Directory>\n\n    <FilesMatch \\.php$>\n        # 2.4.10+ can proxy to unix socket\n        SetHandler "proxy:unix:/run/php/php-fpm.site1.sock|fcgi://localhost/"\n    </FilesMatch>\n\n</VirtualHost>\n\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • PHP 池site1
  • \n
\n
[site1]\nuser = site1\ngroup = site1\nlisten.owner = site1\nlisten.group = www-data\nlisten.mode = 0660\n\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • 目录起始于/var/www/site1: …

php apache-httpd apache-virtualhost

5
推荐指数
1
解决办法
5053
查看次数

在 docker 容器内升级 PHP

所以我有一个运行 PHP 7.2.34 服务的 docker 容器,如下所示:-

docker-compose.yml

version: '3'
services:

 #PHP Service
 app:
  build:
   context: .
   dockerfile: Dockerfile
  image: digitalocean.com/php
  container_name: app
  ...
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM php:7.2-fpm
...
Run Code Online (Sandbox Code Playgroud)

我没有重新启动 Nginx,而是简单地重新启动容器,例如:-

docker stop app db webserver
docker rm app db webserver
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

我想升级到 PHP 7.4+ 甚至 8。我尝试简单地替换FROM php:7.2-fpmFROM php:7.4-fpmphpinfo()报告 PHP 版本没有变化?是否:image: digitalocean.com/php升级时有什么意义吗?

php docker

5
推荐指数
1
解决办法
2万
查看次数