Linux下Dede程序系统安全防护

目 录

第1章 概述
1.1 目的
1.2 适用范围
1.3 适用版本
第2章 DEDE程序目录权限
2.1 设置DEDE程序文件权限
第3章 设置DEDE目录PHP执行权限
3.1 APACHE下设置DEDE系统可写目录无PHP执行权限
3.2 NGINX下设置DEDE系统可写目录无PHP执行权限
第4章 迁移DEDE风险目录
4.1 迁移DATA目录迁移到WEB以外目录
4.2 后台管理目录移出,并且创建独立站点
第5章 PHP.INI禁用掉某些风险函数
5.1 PHP.INI中DISABLE_FUNCTIONS禁止风险函数
5.2 PHP.INI中OPEN_BASEDIR控制PHP执行路径
第6章 MYSQL账号
6.1 使用独立MYSQL用户权限
第7章 其它需注意问题
7.1 其它需注意问题

第1章 概述
1.1 目的
Dede是一个非常好的CMS程序,简单容易用,造福了许许多多中小站长。Dede的安全问题一直使人质疑,本文档主要讲述Dede网站如何防止被挂黑链或木马,防止系统被入侵。
1.2 适用范围
本文档使用者包括:服务器系统管理员、Linux工程师、网络安全从业人员。
1.3 适用版本
Linux系列服务器;

第2章 Dede程序目录权限
2.1 设置Dede程序文件权限
2.1.1 Linux的安全权限基本概念
读权限R。简单的说就是打开文件查看内容的权限,在web服务器中,若文件没有打开权限,则web服务器则视为该文件不存在,发送404 file not
found错误,用数字4表示。
写权限W。一个文件若没有写的权限,那么该文件则无法更改,文件夹若没有写权限,则该文件夹下无法创建新文件,用数字2表示。
执行权限X。程序文件若要执行,必须有执行权限,否则无法执行。打开一个文件夹也是执行,所以文件夹若没有执行权限,则无法被打开。用数字1表示。
很多人发现Linux系统按照Dede论坛的安全设置后,登陆后台一片空白,或者访问主站也是一片空白,因为你没有给文件X的权限,所以没法执行。Linux后台会有3个组,其中一个是用户组,只要给用户组执行的权限就可以后台打开了,其它2个组不要给执行权限,因为没有必要在浏览器中给php文件的执行权限,但是一般的html文件需要给执行权限的,因为需要访问的,但是不要给写入的权限。
include、member、plus、后台管理目录 设置为可执行脚本,可读,但不可写入。这几个目录一般都没问题,我就不讲了。我主要讲讲“data、templets、uploads、a或5.3的html目录, 设置可读写,不可执行的权限”在Linux环境下如何设置。
所以data的权限可以这样设置:
q1

所有的php文件可以这样设置:

q2

这样除了你可以在后台访问data外,其它人是不可以打开data的,另外php文件一定不要给写或执行的权限。
至于a或者你的栏目目录的权限可以这样设置:

q3

这样它有执行的权限,就可以正常访问,但是不要给它写入的权限。

第3章 设置Dede目录PHP执行权限
3.1 Apache下设置Dede系统可写目录无PHP执行权限
我们可以给DedeCMS几个目录关闭可执行权限,这里的可执行是指在Apache中无法运行php脚本,那我们则可以在Apache目录配置中做如下的设置(虚拟机可设置.htaccess)

php_admin_flag engine off

php_admin_flag engine off

php_admin_flag engine off

php_admin_flag engine off

php_admin_flag engine off
因为我们这里是PHP5,所以可以按照上面的方法设置。如果是老版本的PHP,那就只能通过:
<Directory “/var/dedecms/uploads/”>

Order allow,deny
Deny from all

来设定。

3.2 nginx下设置Dede系统可写目录无PHP执行权限
配置方法:
server {

location ~* ^/uploads/.*.(php|php5)$
{
deny all;
}
}
第4章 迁移Dede风险目录
4.1 迁移data目录迁移到web以外目录
data目录是系统缓存和配置文件的目录,一般都有可以读写的权限,只要是能够写入的目录都可能存在安全隐患,很多站长甚至给予这个目录可执行的权限,更是非常危险,所以我们建议将这个data目录搬移出Web可访问目录之外。本篇将介绍如何将data目录搬移出Web访问目录。
1.将data目录转移到非Web目录
我们这里举例“D:\dedecms\v57”为我们系统的根目录,我们需要将目录下的data文件夹(如图1)迁移要上一级目录(非Web目录),简单的办法直接剪切或者拷贝即可。Dede教程-598080707.NET

q4

我们移动上一级目录中,注意观察文件路径。

q5

2.修改DEDEDATA目录的配置常量
找到系统目录下/include/common.inc.php文件,修改DEDEDATA常量为你的系统目录。

q6

3.配置tplcache缓存文件目录
进入系统后台,在配置中修改tplcache目录为你想对目录。

q7

好了,这样我们就将data目录顺利迁移出去了。
4.2 后台管理目录移出,并且创建独立站点
4.2.1 远程连接的安全性配置
默认安装后,后台的管理目录是在站点更目录下的/dede,为了安全起见我们需要将这个目录移出或者改名,但为了能够正常管理站点,我们需要将这个后台目录创建独立站点。

1. 移动后台管理目录
我们先创建一个目录,这个目录专门用于存放后台站点文件,在终端中输入:
sudo mkdir /var/dedecms-admin
然后将织梦后台移动到这个文件夹中,输入:
sudo mv /var/dedecms/dede/* /var/dedecms-admin/

2. 创建虚拟站点
我们需要创建一个新的站点用于显示后台,我们可以在/etc/apache2/site-enabled/目录中创建一个文件名为:default-admin的文件,内容如下:

ServerName admin.dede.com
ServerAdmin webmaster@localhost
DocumentRoot /var/dedecms-admin
AssignUserId www-admin www-data

Options FollowSymLinks
AllowOverride None

Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

创建完成后我们重新启动服务器,在终端输入:
sudo service apache2 restart
这里我们给后台站点域名设置为admin.dedecms.com用户可以根据自己情况设定更为复杂的域名形式,例如:dedesiteadmin2008.dede.com
然后在系统host纪录中添加一条指向站点域名对应ip的纪录,保证其能够正常访问。

3. 给管理站点目录设定权限控制帐户
为了保证后台文件访问的安全,我们也需要给它设定文件访问权限,在终端中输入:
sudo chown www-admin.www-data /var/dedecms-admin/
这样就给这个目录指定了www-admin的访问帐号。

4. 调整后台文件配置,保证后台正常访问
由于我们直接移动了管理后台文件目录,所以我们访问admin.dede.com会出现报错,这时候我们需要对系统中的目录配置进行调整。

(1)找到/var/dedecms-admin/config.php,将第12行
require_once(DEDEADMIN.’/../include/common.inc.php’);
改为
require_once(DEDEADMIN.’/../dedecms/include/common.inc.php’);
然后在这段代码下面加上:
$cfg_plus_dir = $cfg_phpurl = $cfg_basehost.”/”.$cfg_plus_dir;

(2)找到/var/dedecms-admin/login.php,将11行
require_once(dirname(__FILE__).’/../include/common.inc.php’);
改为
require_once(dirname(__FILE__).’/../dedecms/include/common.inc.php’);

(3)找到/var/dedecms/data/safe/inc_safe_config.php,第2行,改为
$safe_gdopen = ‘1,2,3,4,5,7’;

(4)找到/var/dedecms-admin/exit.php,第11行
require_once(dirname(__FILE__).’/../include/common.inc.php’);
改为
require_once(dirname(__FILE__).’/../dedecms/include/common.inc.php’);

(5)复制include中的相关文件
我们需要将include文件夹下的一些文件拷贝到管理后台站点中以保证后台正常使用:
mkdir /var/dedecms-admin/include/dialog
sudo cp -R /var/dedecms/include/dialog/* /var/dedecms-admin/include/dialog
mkdir /var/dedecms-admin/include/js
sudo cp -R /var/dedecms/include/js/* /var/dedecms-admin/include/js
sudo mkdir /var/dedecms-admin/include/ckeditor
sudo cp -R /var/dedecms/include/ckeditor/* /var/dedecms-admin/include/ckeditor

4.重新分配前台Apache用户权限
设定完成后我们需要给前台站点重新指派权限,在终端输入:
sudo chown -R www-admin.www-data /var/dedecms/
这样就把前台用户设定为了www-admin,然后再执行:
sudo chmod -R 755 /var/dedecms/
这样设置后后台管理就具有了站点操作权限,但前台浏览用户没有修改文件的权限了。
但这里前台uploads需要有可上传的权限,所以还需要执行:
sudo chmod -R 777 uploads/

5.完成安全配置
这样一来我们就完成了系统的安全设置,做到了前后台的权限分离

第5章 PHP.ini禁用掉某些风险函数
5.1 PHP.ini中disable_functions禁止风险函数
在PHP.ini中找到disable_functions等号后添加上以下风险函数:
phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,get_current_user,leak,putenv,popen,opendir,escapeshellarg,escapeshellcmd,proc_close,show_source,get_cfg_var
5.2 PHP.ini中open_basedir控制PHP执行路径
在PHP.ini中找到open_basedir 等号后添加上PHP可执行的路径:
open_basedir = /data/www/dedecms:/tmp:/data/www/www.test.com

第6章 MySQL账号
6.1 使用独立MySQL用户权限
Dede使用MySQL,不要为了方便,直接使用MySQL root用户的权限,应独立设置MySQL用户帐号,许可权限为:SELECT, INSERT , UPDATE , DELETECREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES由于DEDE并没有任何地方使用存储过程,因此务必禁用 FILE、EXECUTE 等执行存储过程或文件操作的权限。
第7章 其它需注意问题
7.1 其它需注意问题
1.保持Dede更新,及时打补丁。
2.安装好Dede后及时把install文件夹删除。
3.后台管理目录改名,最好是改成MD5形式的,最好复杂点。
4.DedeCms 万能安全防护代码
需要的手工在config_base.php里加上
打开config_base.php 找到
//禁止用户提交某些特殊变量
$ckvs = Array(‘_GET’,’_POST’,’_COOKIE’,’_FILES’);
foreach($ckvs as $ckv){
if(is_array($$ckv)){
foreach($$ckv AS $key => $value)
if(eregi(“^(cfg_|globals)”,$key)) unset(${$ckv}[$key]);
}
}

改为下面代码
复制代码
//把get、post、cookie里的<? 替换成 <? $ckvs = Array(‘_GET’,’_POST’,’_COOKIE’); foreach($ckvs as $ckv){ if(is_array($$ckv)){ foreach($$ckv AS $key => $value)
if(!empty($value)){
${$ckv}[$key] = str_replace(‘<‘.’?’,’&’.’lt;’.’?’,$value); ${$ckv}[$key] = str_replace(‘?’.’>’,’?’.’&’.’gt;’,${$ckv}[$key]);
}
if(eregi(“^cfg_|globals”,$key)) unset(${$ckv}[$key]);
}
}
//检测上传的文件中是否有PHP代码,有直接退出处理
if (is_array($_FILES)) {
foreach($_FILES AS $name => $value){
${$name} = $value[‘tmp_name’];
$fp = @fopen(${$name},’r’);
$fstr = @fread($fp,filesize(${$name}));
@fclose($fp);
if($fstr!=” && ereg(“<\?”,$fstr)){
echo “你上传的文件中含有危险内容,程序终止处理!”;
exit();
}
}
}

这样处理之后,安全上理论上可中做到一劳永逸,但缺点是使用此功能后,不能在线上传PHP文件,如果你的站点同时支持asp、aspx等,在此基础上修改一下上述代码即可

5.如果是使用HTML可以把plus下的相应文件和根目录下的index.php删除。
6.不用留言本的可以把如:www.xxxxxx.com/plus下的guestbook删除。
7.不用会员的可以把member删除。
8.www.xxxxxx.com后台的文件管理(管理目录下file_manage_xxx.php),不用的可以做掉,这个不是很安全,至少进了后台上传小马很方便。
9.下载发布功能(管理目录下soft__xxx_xxx.php),不用的话可以做掉,这个也比较容易上传小马。
最安全地方式:本地发布html,然后上传到空间。不包含任何动态内容,理论上最安全。

Linux下Dede程序系统安全防护  文档下载  http://pan.baidu.com/s/1jGqsWNO

 

转载请注明:安全主题 » Linux下Dede程序系统安全防护

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址