站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Gallery:安全性
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
= Gallery2的安全性 = 本文解释有关Gallery2安全性的各个方面,还会指导如何使你的服务器/托管账号以及Gallery2远离可能遭受的攻击,但不对Gallery2的权限系统多加描述。本文还专门解释以linux/unix为基础的服务器,但相关的大多数指导都可以直接转译给Windows所用。如果我们谈及权限,就忽略出现类似777的数字而只需关注read+write+execute… == 介绍 == Gallery2的安全离不开WEB服务器的安全。如果服务器/WEB服务器的安全性没有保障,那么Gallery2的安全性也就无从谈起了。 此文中我们涉及以下几个话题: * 确保除了你以外没有人可以读/写你的Gallery2文件 * 确保账户都具有适当的权限 * 如无必要,不要暴露更多的有关Gallery2/G2版本的信息 * 如何辨别出不安全的webhost * 与杂项安全有关的话题 == 有关联系方法 == Gallery项目对安全性问题态度极为认真。如果你发现了安全性方面的瑕疵,请不要发布公共BUG报告或在公共论坛里谈及。你可以通过Email的方式直接递交给我们的安全性问题处理小组(gallery.menalto.com)。请提供尽可能多的信息,包括你使用的Gallery版本以及对安全性瑕疵的描述。如果能提供服务器日志或情景重现的类似数据,那将对问题的澄清有质的影响。如果你在某安全性问题公示以前就提交给我们了,你就会得到认可并有资格获得[[Bounties#Security_Bounties|现金奖励]]! == 短小的查漏清单 == 如果你暂时没有那么多时间通读此文档,你可以查看以下所列最为重要的安全性问题。尽管如此,我们还是建议你稍后返回这里,将整个文档都看一下,以使你尽可能地保证Gallery的安全。 * '''config.php的文件系统权限''':请保证只有你和WEB服务器能够读(或写)config.php文件。使用FTP软件将config.php文件的权限设置为444(即所有人可读)。绝大多数的共享网络托管安装不允许权限设置超越“所有人可读”。在某些情况下,权限设置可以更为严格。详细信息请见后文。 * '''禁止查看Gallery代码''':如果在你的gallery2/文件夹下已有一个名为''.htaccess''的文件,就在它的顶部加入(复制粘贴即可)如下代码。相反,如果没有发现此文件,就用文本编辑器创建一个。你可能需要使用FTP来将其重命名为.htaccess,因为Windows不允许扩展名(即“.”)之前空空如也。以下的代码应作为该.htaccess文件的一部分: <Files ~ "\.(inc|class)$"> Deny from all </Files> :注: 有关.htaccess的知道仅对托管于Aapche服务器上的网站适用。同样地,如果你被允许访问该WEB服务器上的配置文件的话,你可以直接将这些改变应用于httpd.conf而无需是.htaccess。 * '''gallery2/文件夹的文件系统权限''':确保没有人可以写入gallery2/目录,WEB服务器用户也不可以。使用FTP软件将gallery2/目录的权限修改为555(所有人具有读和列表权限)。在某些情况下,权限设置可以更为严格。详细信息请见后文。 * '''存储文件夹位置''':存储文件夹(缺省为'g2data/')不能够为[[#web-accessible什么意思/文档根目录是什么?|web-accessible]],即它应当置于文档根目录之外。 == 初步了解你的WEB服务器 == 无论你是使用托管WEB服务器还是专用的WEB服务器,首先需要初步了解你的环境。我们会对以下设定感兴趣: * 网站中用以执行所有PHP脚本的帐户 * PHP open_basedir设定的(本地)值 * 服务器API,无论PHP是如何运行的,Apache / IIS / ... Module或(fast-)cgi 创建一个名为“info.php”的文件用来查找这些设定的值,该文件内容如下: <?php print "PHP runs under the user: <nowiki>[" . system('whoami') . "]<br></nowiki>"; phpinfo(); ?> 将其放在gallery2文件夹下,或是预备给上传gallery2用的文件夹。接着使用WEB浏览器浏览该文件。 === PHP是在你自己的帐户下运行还是在一个通用帐户下? === 一般来讲,WEB服务器中PHP脚本的运行有两种不同的方式。 * WEB服务器中所有的PHP脚本都在同一个帐户下运行。而在一个共享的网络托管计划中,所有域名/帐户下的PHP脚本都在同一个'''通用帐户(generic user)'''下运行。 * WEB服务器根据不同的帐户/域名而有所区别。意即在一个共享的虚拟主机上,你的PHP脚本是为“你的用户”所运行的(大多数情况下就是你的FTP帐户);而该主机上的其他网站则在其他帐户下运行。为了安全起见,这无疑是更好的方式! 如果你的PHP '''服务器API'''是'''Apache'''或'''IIS'''或Module / mod_php,那么此服务器上的所有PHP脚本都于一个通用帐户下运行。将PHP脚本作为WEB服务器模块并运行于不同的帐户下是不可能的。mod_php则意味着该WEB服务器上的所有脚本都运行于相同的通用帐户下。info.php极有可能在[]标记中显示不同于你的用户/帐户名称的其他通用名称。 如果你的PHP服务器API是'''php-cgi'''或'''php-fastcgi''',那么PHP脚本很有可能在你的帐户下运行。如果info.php页面在[]中显示你的用户/帐户名称的话,那很明显地是在你的帐户下运行。 注:可能在[]中没有任何东西,甚至有可能你会得到函数“system”被禁用的警告。 == 设置Gallery2文件和目录的读写权限 == 在此我们要确保: * 除了你没有人可以阅读你的config.php文件内容(安装密码存放之处),并且 * 没有人可以读/写你的g2data (存储)目录。 我们需要区分以下三种情况: === a) PHP为mod_php而open_basedir没有设置或不够严格 === 如果你的PHP运行为mod_php(所有脚本的通用用户),那么你的唯一希望就是PHP open_basedir(见info.php)设置的足够严格。PHP open_basedir应设置为除了你的g2data文件夹和gallery2文件夹没有其他帐户在此路径下。如果你的PHP服务器API是Apache而open_basedir为空(无值),那你就得跟你的主机供应商谈谈,因为这是一个很大的安全隐患。在此情况下,除非你有一个专用服务器否则无法保证Gallery2的安全。那么在这样的环境中会发生些什么呢? * 某个客户可以使用PHP读取你的config并获取密码来肆意而为。 * 如果你使config.php设置为可写,其他某个用户就有可能写入不可用的配置或是调用其他数据的配置,从而一定程度上对你造成损害。 * 某个客户可以使用PHP 读/写你的Gallery2存储目录(g2data) 在此种环境中你所能做的有: * 设置config.php为444 (所有人可读权限) * 为你的G2管理员帐户启用另外一套密码取代安装密码(G2安装时输入的密码) * 删除upgrade/文件夹,因为某人可以使用存储在config.php中的安装密码访问此文件夹 * 另见 [[Gallery:How_do_I_secure_Gallery2|如何保证Gallery2的安全]] === b) PHP为mod_php且open_basedir设置足够严格 === 尽管你的WEB服务器并非固若金汤,但严格设置的open_basedir聊胜于无。你需要保证config.php文件为全球/公共范围可读。Open_basedir将会确保仅你所在帐户下的PHP代码可以打开你的帐户下的文件。 * 将config.php的权限设置为444(所有者,组和世界/公共范围可读权限) * 将g2data的权限设置为777(所有人具有读/写/执行的权限)。递归地应用此权限设置(包括所有次级文件夹和文件等)。 另外一个办法就是请求管理员改变config.php文件和g2data目录(递归地包括下属文件夹)的所有者,这样通用WEB服务器用户就会享有这些文件了牡蛎了。(命令:chown -R username g2data,此命令只能被管理员执行)。那么为什么这样就可以提高安全性了呢?在此情形下,其他人无法再通过shell(telnet/ssh)读/写你的文件了。接着你可以设置权限为: * 设置config.php的权限为400(所有者可读,无其他权限) * 设置g2data的权限为700 (所有者可读/写/执行权限,无其他权限)。递归地应用此权限设置(包括所有次级文件夹和文件等)。 注: Open_basedir仅保证PHP下的安全性,不包括其他脚本语言。如果WEB服务器也允许Perl或其他脚本语言,那么你的Gallery2还无法保证绝对的安全—对于来自其他人或其他网页脚本的攻击。 === c) PHP为cgi并且所有脚本运行于你的帐户下 === 你很走运。如果PHP仅在你的用户帐户下运行,那我们就可以将其他用户的所有文件系统移除了。 * 将config.php的权限设置为400 (所有者/你的可读权限,其他任何人均无此权限)。 * 将g2data的权限设置为700 (所有者/你的读/写/执行权限,其他任何人均无此权限)。递归地应用此权限设置(包括所有次级文件夹和文件等)。 * 在G2的''site admin'' -> ''general''中,为新的目录设置权限为700,而新文件设置为600。 == 限制WEB服务器用户的权利 == 你应当明确,Gallery可能存在的易损性是不应扩大的。尽可能地限制运行WEB服务器/PHP脚本的用户的权限。比如,不将WEB服务器作为根目录运行。 用户应该仅享有以下权利 * 对g2data及下属文件夹的读/写/执行 * 对g2data及下属文件夹中文件的读/写/执行 * 对gallery2文件夹及下属文件夹的读/写/执行 * gallery2及下属文件夹中所有文件可读 * 二进制及二进制所在文件夹的读和执行(imagemagick,netpbm,ffmpeg,dcraw,unzip和zip...) * 同时你应当阻止所有对存储目录(缺省为'g2data/')的访问。添加以下内容到存储文件夹下名为.htaccess文件中: Deny From All == 请勿暴露有关Gallery2的信息 == Gallery2的编写是将安全性考虑在内的。尽管如此,安全性的薄弱环节还是存在于Gallery2中的(所有已知问题均被修复)。你应当尽量不让网站访问者知道你的Gallery2的版本。因为一旦攻击者知道你的Gallery2版本的话,他们就有可能钻空子。比如说,你在首页显示了完整的版本号,某个攻击者就会用GOOGLE查到一列易损的安装,其中包括有你使用的。 * 在你的WEB服务器配置中(Apache的httpd.conf/.htaccess),可以禁止所有对源代码文件和文件完整性checksum文件(MANIFEST)的访问。 <Files *.inc> Deny From All </Files> <Files *.class> Deny From All </Files> <Files MANIFEST> Deny From All </Files> * 移除你的网站上的目录列表。加入: <Directory YOUR WEBROOT PATH> Options -Indexes </Directory> 你可以打开modules/来测试是否暴露了。如果你可以列出所有已安装的模块,Apache就会列出目录。 * 将gallery2文件夹下的README.html删除 * 降低PHP错误报告级别,因为PHP Notices/Warnings等能够暴露确切的文件系统路径及其他信息。在php.ini(PHP配置文件)中,将error_reporting级别至少改为: error_reporting = E_ALL &~ (E_WARNING | E_NOTICE) 或者 error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR 请注意抑制的错误越多,对真正问题的诊断就越难。一旦你遇上问题,你应当将error_reporting修改为E_ALL。 == 如何辨认出不安全的Webhost == 一个共享的服务器,如果是在相同的通用帐户而不是特定帐户下运行所有的PHP脚本的话,其安全性就会被限制在一个很小的范围内。所有基于mod_php的webservers/webhosts都在此列。如果在你的info.php中没有看见php-cgi或php-fastcgi作为服务器API的话,那么你的webhost就在此列。 另外如果open_basedir过于公开或根本没有设置的话,我们建议还是不要在此服务器上使用Gallery2了。 '''现状分析''': 大部分网络托管计划均在上述行列之中。而我们听说类似Gallery2一夜之间被删除的例子几乎没有,或者可能的话也就是一年一次。所以,这并没有之前所说的那么不幸。因此在一个webhost中与恶意用户为伴的可能性小之又小。 此部分的目的在于让你明白你的webhost并非想象的那样安全。至少你应该要求你的webhost改变现状(一个请求并不过分,而且这是大势所趋,谁都希望有安全的网络托管环境)。如果你想要一个真正安全的环境,很多专业网络托管公司至少会为每个帐户严格配置open_basedir路径。而很小一部分低端中端的则会提供基于php-cgi的网络托管。 == 如何配置一个安全的WEB服务器 == 这个话题需要大量篇幅才能说清楚。而此部分只浅酌基础: * 如果你在使用一个专用服务器,你可以使用mod_php。请确保为WEB服务器的运行另开一个用户,并赋予最低限度的权限(前部分所述)。 * 如果你使用共享的网络托管,就不要使用mod_php。请使用php-fastcgi+suexec+apache2+chroot jails来为你的客户营造一个安全的环境。在这里,如果产生任何损害,则一个用户只会被自己的脚本损害,而不可能是其他人的脚本。与php-cgi不同,php-fastcgi的速度可以与mod_php媲美,而且对系统造成的负担不会比mod_php大。但是与mod_php相比,如果使用于共享的网络托管环境下,php-fastcgi的整个系统可能需要更多些的内存。 * 请勿定义一个crossdomain.xml。如果真的需要为跨站点flash访问提供服务的话,请务必严格限制crossdomain.xml。注意Macromedia/Adobe Flash的插件与version8有相关薄弱点。因此如果你需要crossdomain.xml,请在论坛中获取帮助来保护自己免受CSRF攻击。 == Multisite/嵌入的G2 == 保证Multisite/嵌入的G2的安全在某些情况下稍微复杂些。可能遇到的问题: * Multisite嵌入G2的PHP open_basedir没有包含Gallery2路径。 ** 解决办法:对open_basedir做修改使其包含此路径或者修改Gallery2的位置/路径。 * PHP在你的帐户下运行,而你从一个帐户/域执行的安装(multisite -> codebase, embedded G2 -> Gallery 2)。现在你从Multisite或嵌入的其他域/账户访问Gallery2。 ** 解决办法: *** Multisite:自代码库进行首次安装后,你就没必要再次通过代码库访问multisite了。尽管升级是通过multisite的,则只要运行chown -R multisite_accountName multisite_g2data (将name/g2data paths替换为正确值);也就是将g2data的所有者和multisite的config.php改变为multisite所有者。同样地,确保代码库足够公开以使得所有multisite用户可以阅读gallery2文件并读/执行gallery2文件夹。 *** 嵌入的G2:你需要确保用户(G2独立域,嵌入的G2域)具有上部分提及的必要权限。 == 备注 == * 相对其他应用程序/系统,请为Gallery2启用另一套密码。而相对于安装时输入的密码,请另为管理员用户帐户设置另一套密码 * 确保Gallery2的图片防火墙。如果g2data目录不放置在文档根目录之外(public_html,html, www,. folder)的话,图片权限就可以通过直接浏览g2data目录下的图片而被肆意动用 * 警告:如果你在''site admin'' -> ''general''中为本地上传路径列表添加了一个路径的话,那么你所有的具有“添加项目”权限的Gallery2用户就能通过''add items -> from local server''这条本地路径添加文件。 * 所有Gallery2站点管理员能在你的Gallery2安装中做任何操作,他们可以通过简单的点击删除所有相册和用户等。因此请确保你完全信任站点管理员组的用户。一般来说,我们建议不要向此组添加任何用户,并且我们还会建议你使用另外一个Gallery2用户帐户来做日常任务/浏览—这与linux/Windows的情况一样,管理员帐户一般不用来做日常工作。 == 常见问题 == === PHP safe_mode是什么? === 不要在意它的名字,PHP safe_mode并非为PHP脚本营造的安全环境。在安全环境中有时严格到禁用了很有用的功能,而PHP扩展及其他脚本语言却仍能在safe_mode 保护/限制下运行。关于PHP safe_mode已经说过很多了,长话短说,甚至PHP的编写者都认为safe_mode 是一个错误而PHP safe_mode将在PHP6中被移除,甚至不会作为可选项存在。 另见 [[Gallery:faq#Does_G2_work_with_Safe_Mode_PHP.3F|G2常见问题:G2适用于Safe_Mode吗?]] === 什么是PHP open_basedir? === 参见[http://www.php.net/manual/en/features.safe-mode.php#ini.open-basedir PHP open_basedir]。 如果设置足够严格的话,如果在此服务器上除了其他计算机语言而仅能使用PHP的话,如果客户不被准许ssh/telnet访问的话,open_basedir对同一webhost上的Gallery2安装来说是个不错的保护措施。 请参见[[Gallery:How_to_configure_open_basedir_for_G2|如何为G2配置open_basedir]]。 === 同一webhost上的其他用户如何能够损害我的Gallery2安装?=== * 如果没有足够的安全保障,恶意用户可以使用PHP读/写你的config.php/g2data目录 * 有些用户甚至并非蓄意如此的。某用户可能安装的带有安全易损性的PHP脚本都可能很要命了;而且这样的情况不仅仅对用户数据/网站造成损害,其影响还会波及到使用相同webhost的其他任何网站--除非web服务器的安全性有足够的保障。 * 其他编程语言也有可能作为攻击手段,而并非必须是PHP。任何该webhost可用的语言都可以成为安全性威胁。 * 如果用户具有telnet/ssh访问权限,则他们也能访问并操作你的数据/网站,除非你正确设置了权限或者web服务器的安全性有保障。 === Gallery2如何安装在SELinux服务器上? === 需要经过合理地配置SELinux才能与Gallery2兼容。参见[[Gallery:Installation_on_a_SELinux_Server|Gallery2在启用SELinux的服务器上的安装]]获取更详尽的信息。我们不推荐使用SELinux但也不反对使用它。我们目的是解释如何在SELinux服务器上安装Gallery2,仅此而已。 === Apache mod_security如何配置以兼容Gallery2? === mod_security默认情况下不与Gallery2兼容。如果要使用的话,就需要进行特别配置,参见[[Gallery:Known Issues|已知问题]]. === 能否合并使用symlinks和open_basedir? === 目前,你无法再Gallery2中同时使用symlinks和open_basedir。请参见:[[Gallery:How_to_configure_open_basedir_for_G2|如何为G2配置open_basedir]]. === 安装完成后,是否需要删除install/和upgrade/ 文件夹? === 没有必要将这些文件夹删除。但是即使删除,Gallery2仍能正常运行。某人仅需在gallery2文件夹中创建一个login.txt文件就可以访问安装程序了。一般情况下,这个“某人”也就是一个人而已。你无法在web浏览器中创建/编辑login.txt。你只能通过安装密码(存储于config.php中)访问升级程序。 === 数据库权限方面如何设置? === 确保只有你的数据库用户才具有访问数据库的权限。数据库用户需要相当多的权限,包括修改表格,放下表格,索引一类的也一样。因此,对此类用户权限的限制不应过于严格。 === web-accessible什么意思/文档根目录是什么? === 我们说一个文件或文档直接是'''网络可访的(web-accessible)''',意思就是其他人可以使用web浏览器或其他网页软件来访问你的文件和文档。举例:Gallery中gallery2/main.php文件就是web-accessible的,任何人都可以浏览它。 再举一个例子:Gallery存储文件夹(比如 'g2data/')可能含有安全性方面较敏感的数据。如果人们随便就可以浏览存储文件夹中的内容的话,安全性就根本没有保障了。因此,为了最大限度的安全保障,你就要确保存储文件夹无法通过web访问。 为了达到此目的,你可以将存储文件夹置于web的'''文档根目录'''''的上一级。web根目录就是存放所有网站文件和文件夹的文件系统文件夹。一般此根目录的名称为'htdocs','www'或'public_html'。其中的所有文件和文件夹都是web-accessible的。 举例:'/home/yourusername/public_html/'作为你的文档根目录。 '/home/yourusername/public_html/gallery/g2data/'在此根目录之下,那么它就是web-accessible的。 '/home/yourusername/g2data'位于文档根目录的上一级因此''不是''web-accessible的。刚才所述的存储文件夹摆放位置就是如此。 [[Category:Gallery 2:Installation]] [[Category:Gallery 2:Configuration]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)