我们是一家相当小的公司(3-4 名程序员和 3-4 名网站设计师),开发单一用途的 PHP 网络应用程序,该应用程序为大约 100 多个网站提供功能。我们已经在单独的开发和生产环境中运行了几年,并且运行良好。总是有足够多的独立功能需要开发,程序员从来没有真正发生冲突,而且没有源代码控制也更方便工作;即使它有数据丢失的风险,我们也有相当一部分文件在不经意间丢失。
另一个考虑是我们的设计师不精通技术(我向他们介绍了 html 标记,而不是使用所见即所得)。这是在转向版本控制方面犹豫不决的原因之一。
然而,现在我们已经达到了 100 多个站点并且开发团队也在不断壮大,我正在尝试标准化我们的程序,就程序员而言,源代码控制似乎是一个合乎逻辑的步骤。我希望这也能加快我们的补丁部署。
不幸的是,我在设置源代码控制系统方面的经验非常有限。我很想从有类似设置或有转换经验的人那里听到什么:
1) 您是否对所有内容(站点、css、html 模板和应用程序代码)进行版本控制,从而迫使设计人员学习版本控制?或者只是开发应用程序代码的开发人员?
2) 最初设置源代码管理时需要注意哪些陷阱?
3) 部署 dev => 用于源代码控制的生产技巧。
感谢所有的洞察力。
编辑1:当。到目前为止,每个人都建议控制一切。那会让我早早掉头发。在不久的将来,这可能会引发一个新问题。感谢您到目前为止的建议,继续加油!
编辑 2:很多好的答案,我们将研究各种版本控制系统。谢谢大家的回复!
我在centos 5.6上运行apache,每当我尝试在任何目录中加载php脚本时,除了/var/www/html(apache默认根目录),它都会给我一个权限被拒绝的错误。
但是,当我根据默认目录 (/var/www/html) 检查我的新根目录 (/var/www-dev) 的权限时,它们完全匹配。都说:root:root 755
我什至尝试将所有权更改为 apache:apache,但仍然出现相同的错误
但是当我将 apache 配置改回它的默认根目录(/var/www/html)时,一切正常。
难道我做错了什么?
这些是我正在更改的设置:
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
注意:每次更改 apache 配置和权限时,我都会重新启动 apache。
同样:我还启用了 REMI 和 EPEL
我在一个学区工作。我负责为学生构建存储服务器。一个让他们在学校和家里工作的地方。
我的挑战是让它在家工作。在学校,他们登录、验证并获得映射到服务器上的文件夹的驱动器 ( S:\fileserver\studentname)。
我的问题是我怎样才能让学生在家中使用它?
服务器正在运行 Windows Server 2008 R2。我让 PHP、Apache 和 MySQL 协同工作。我的想法是编写一个脚本,该脚本将“爬行”包含所有学生文件夹的目录,然后在 MySQL 数据库中创建每个文件和文件夹的实例。创建一个使用 LDAP 进行身份验证的登录页面,一旦他们从家里登录到服务器,他们就会得到一个页面,其中包含与他们的用户名相关联的文件夹。
有没有人把这样的东西放在一起??
我对 Web 开发比较陌生,所以请耐心等待。
我主要是 iPhone 开发人员,但最近使用共享主机为其他人创建了一个站点。我可以在该站点上用 PHP 写入文件,而无需考虑权限。
我正在为我正在制作的新应用程序部署 Web 服务,但进展并不顺利。这里最重要的区别是我使用的是其他人的服务器,并且只有 FTP/DB 访问权限。
基本上,我有很多 PHP 文件构成了我的 CMS,如下所示:
mysite.com/admin/manage_news.php
mysite.com/admin/manage_events.php
Run Code Online (Sandbox Code Playgroud)
然后这些脚本编辑数据库或文件。他们可以很好地与数据库交互,但是,我的脚本无法写入文件系统。例如,他们可能会尝试写入以下文件:
mysite.com/data/img/event_1.png
mysite.com/data/somefile.txt
Run Code Online (Sandbox Code Playgroud)
这在我的 MAMP 安装(本地)上运行良好,但是一旦部署到服务器,每次尝试写入时 PHP 都会出现错误......
无法打开文件“../data/img/someimage.png”进行写入。
所以我给运行服务器的人发了电子邮件,他回来说:
它在公共许可下工作吗?(777)
而且,确实如此 - 但我对使用公共权限非常谨慎,因此立即再次禁用它。我给他发邮件说“我怎样才能让我的 PHP 脚本使用标准用户权限来编写”,他说:
把它公开,就没事了
我认为这是域解析中某处的 ip 冲突,但我并不担心。
然后我给他发电子邮件说“这肯定是不安全的”或类似的话,他回复如下:
现实情况是,有数百万个网站,包括我管理的几个网站,它们在各种文件夹中都有 777 个,这只是一种生活方式。
谁能给我一些我可以给他的解决方案的想法?或者我可以做些什么来避免使用 777?我真的不喜欢我的网站/服务上的任何文件夹都可以公开写入的想法。
我非常感谢您的建议,因为我对 Web 服务器知之甚少。
我编写了一个脚本来在 Nginx 上创建新的虚拟主机。该脚本创建 Ningx vhost 配置文件、vhost 用户和目录、php-fpm 池文件。
在脚本的末尾,我想在重新启动 php-fpm 之前检查配置是否正常。对于 Apache,我可以apachectl graceful,但是可以用 做类似的事情php5-fpm -t吗?
PHP 是否在每次请求时读取 php.ini 或者我是否必须重新启动 Apache 才能让 php 了解 php.ini 上的更改?
我习惯于从 Apache 为站点提供服务,但现在我不得不使用 IIS 服务器。
我的许多 PHP 页面返回错误 500,我无法调试,因为 IIS 正在抑制错误消息。我已经尝试ini_set('display_errors',1);过代码,但无济于事。
错误显示在某些站点上,但不是我想要调试的特定站点,因此我认为它不是全局 PHP 设置,而是与该站点的站点设置有关。
我找不到关于如何启用显示 PHP 错误的明确答案。
我找到了这个链接,但不确定在哪里可以找到“ system.webServer->httpErrors ”。
如何在 IIS 下启用 PHP 中的显示错误?
当我尝试访问我的服务器时,我收到 504 网关超时。
一个小的检查没有在 php5-fpm 日志上找到任何日志,但为了确保,我尝试重新启动它。
当我尝试重新启动它时:
sudo service php5-fpm restart
Run Code Online (Sandbox Code Playgroud)
我明白了[fail],但是当我这样做的时候
sudo service php5-fpm stop
sudo service php5-fpm start
Run Code Online (Sandbox Code Playgroud)
我没有错误。
如果没有日志,我该如何调查?我能做什么?
编辑 #2 2015 年 7 月 23 日:寻找一个新的答案,以识别以下设置中遗漏的重要安全项目,或者可以让我们有理由相信一切都已涵盖。
编辑 #3 2015 年 7 月 29 日:我特别在寻找可能的错误配置,例如无意中允许可能被利用来规避安全限制的东西,或者更糟的是却留下了一些大的漏洞。
这是多站点/共享主机设置,我们希望使用共享 Apache 实例(即在一个用户帐户下运行),但 PHP/CGI 以每个网站的用户身份运行,以确保没有站点可以访问另一个站点的文件,我们希望确保没有遗漏任何内容(例如,如果我们不知道符号链接攻击预防)。
这是我到目前为止所拥有的:
Options IncludesNOEXEC以防止 CGI 在您不希望它运行时能够运行(尽管如果使用 suexec,这应该不是什么大问题)。AllowOverride/配置AllowOverrideList为仅允许黑客无法利用的任何指令。我认为如果上述项目做得正确,这就不那么重要了。 如果 MPM ITK 不是那么慢并且不是以 root 身份运行,我会选择它,但我们特别想使用共享的 Apache,但要确保它安全地完成。
我找到了http://httpd.apache.org/docs/2.4/misc/security_tips.html,但它在这个主题上并不全面。
如果有帮助的话,我们计划将 CloudLinux 与 CageFS 和 mod_lsapi 一起使用。
还有什么需要确保做或知道的吗?
编辑 2015 年 7 月 20 日:人们提交了一些很好的替代解决方案,这些解决方案通常很有价值,但请注意,此问题仅针对共享 Apache …
我在 Ubuntu 10.04 上手动安装了 php 5.4。旧版本是 5.3.2。现在,如果我检查 php 版本,它会显示 5.4:
max@ubuntu:/etc/php5$ php -v
PHP 5.4.0 (cli) (built: Jul 21 2015 14:04:16)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
Run Code Online (Sandbox Code Playgroud)
但是如果我在 /var/www/ 中加载 index.php 文件,apache 仍然显示 php 版本是 5.3.2。
如何让apache识别新的php 5.4版本?
php ×10
apache-2.2 ×5
php-fpm ×2
apache-2.4 ×1
bash ×1
centos ×1
iis ×1
linux ×1
permissions ×1
php.ini ×1
scripting ×1
virtualhost ×1
vps ×1