雨農 發表於 2023-10-17 00:00:00

DedeCMS站点高级安全策略(Linux篇)

<p>
        <span style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>更改纪录:</span></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        2012-06-06:增加Nginx服务器的配置</p>
<hr style='margin: 0px; padding: 0px; font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        在Linux环境下搭建安装DedeCMS本篇不再具体说明,大家可以点击文档《Linux下安装DedeCMS及安全设置》来查看安装和基本安全配置部分的内容。</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        本篇将在之前的基础上进一步来对Linux下的DedeCMS进行安全配置,以保证我们的站点能够更加安全的运行在服务器上。</p>
<p>
        <strong style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>1.安装Apache文件访问权限模块</strong></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        为了保证每个虚拟站点都能够拥有自己独立的文件访问权限,我们需要安装Apache安全权限分离模块,在终端中输入:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo apt-get install apache2-mpm-itk</p>
<p>
        <strong style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>2.添加管理后台站点控制帐号</strong></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        接下来我们需要再添加一个后台站点的Apache运行帐号,在终端中输入:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo useradd -g www-data -d /dev/null -s /usr/sbin/nologin www-admin</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        这样我们就添加了一个www-admin帐号,专门用于控制后台站点的文件访问权限。</p>
<p>
        <strong style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>3.将后台管理目录移出,并且创建独立站点</strong></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        默认安装后,后台的管理目录是在站点更目录下的/dede,为了安全起见我们需要将这个目录移出,但为了能够正常管理站点,我们需要将这个后台目录创建独立站点。</p>
<p>
        <strong style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>3.1.移动后台管理目录</strong></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        我们先创建一个目录,这个目录专门用于存放后台站点文件,在终端中输入:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo mkdir /var/dedecms-admin</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        然后将织梦后台移动到这个文件夹中,输入:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo mv /var/dedecms/dede/* /var/dedecms-admin/</p>
<p>
        <strong style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>3.2.创建虚拟站点</strong></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        我们需要创建一个新的站点用于显示后台,我们可以在/etc/apache2/site-enabled/目录中创建一个文件名为:default-admin的文件,内容如下:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        &lt;VirtualHost *:80&gt;</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        ServerName admin.dede.com</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        ServerAdmin webmaster@localhost</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        DocumentRoot /var/dedecms-admin</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        AssignUserId www-admin www-data</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        &lt;Directory /&gt;</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        Options FollowSymLinks</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        AllowOverride None</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        &lt;/Directory&gt;</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        &lt;Directory /var/dedecms-admin/&gt;</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        Options Indexes FollowSymLinks MultiViews</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        AllowOverride None</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        Order allow,deny</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        allow from all</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        &lt;/Directory&gt;</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        &lt;/VirtualHost&gt;</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        创建完成后我们重新启动服务器,在终端输入:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo service apache2 restart</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        这里我们给后台站点域名设置为admin.dedecms.com用户可以根据自己情况设定更为复杂的域名形式,例如:dedesiteadmin2008.dede.com</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        然后在系统host纪录中添加一条指向站点域名对应ip的纪录,保证其能够正常访问。</p>
<p>
        <strong style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>3.3.给管理站点目录设定权限控制帐户</strong></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        为了保证后台文件访问的安全,我们也需要给它设定文件访问权限,在终端中输入:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo chown www-admin.www-data /var/dedecms-admin/</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        这样就给这个目录指定了www-admin的访问帐号。</p>
<p>
        <strong style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>3.4.调整后台文件配置,保证后台正常访问</strong></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        由于我们直接移动了管理后台文件目录,所以我们访问admin.dede.com会出现报错,这时候我们需要对系统中的目录配置进行调整。</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        (1)找到/var/dedecms-admin/config.php,将第12行</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        require_once(DEDEADMIN.'/../include/common.inc.php');</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        改为</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        require_once(DEDEADMIN.'/../dedecms/include/common.inc.php');</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        然后在这段代码下面加上:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        $cfg_plus_dir = $cfg_phpurl = $cfg_basehost."/".$cfg_plus_dir;</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        (2)找到/var/dedecms-admin/login.php,将11行</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        require_once(dirname(__FILE__).'/../include/common.inc.php');</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        改为</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        require_once(dirname(__FILE__).'/../dedecms/include/common.inc.php');</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        (3)找到/var/dedecms/data/safe/inc_safe_config.php,第2行,改为</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        $safe_gdopen = '1,2,3,4,5,7';</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        (4)找到/var/dedecms-admin/exit.php,第11行</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        require_once(dirname(__FILE__).'/../include/common.inc.php');</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        改为</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        require_once(dirname(__FILE__).'/../dedecms/include/common.inc.php');</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        (5)复制include中的相关文件</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        我们需要将include文件夹下的一些文件拷贝到管理后台站点中以保证后台正常使用:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        mkdir /var/dedecms-admin/include/dialog</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo cp -R /var/dedecms/include/dialog/* /var/dedecms-admin/include/dialog</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        mkdir /var/dedecms-admin/include/js</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo cp -R /var/dedecms/include/js/* /var/dedecms-admin/include/js</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo mkdir /var/dedecms-admin/include/ckeditor</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo cp -R /var/dedecms/include/ckeditor/* /var/dedecms-admin/include/ckeditor</p>
<p>
        <strong style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>4.重新分配前台Apache用户权限</strong></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        设定完成后我们需要给前台站点重新指派权限,在终端输入:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo chown -R www-admin.www-data /var/dedecms/</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        这样就把前台用户设定为了www-admin,然后再执行:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo chmod -R 755 /var/dedecms/</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        这样设置后后台管理就具有了站点操作权限,但前台浏览用户没有修改文件的权限了。</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        但这里前台uploads需要有可上传的权限,所以还需要执行:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        sudo chmod -R 777 uploads/</p>
<p>
        <strong style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>5.完成安全配置</strong></p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
        这样一来我们就完成了系统的安全设置,做到了前后台的权限分离,当然您也需要配置下php.ini禁用掉某些函数,配合系统做好各个方面的安全设置。</p>
<div style='margin: 0px; padding: 0px; outline: none; line-height: 25.2px; font-size: 14px; font-family: tahoma, arial, "Microsoft YaHei"; text-align: center;'>
        <p>
                <img style="max-width:100%!important;height:auto!important;"title="DedeCMS站点高级安全策略(Linux篇)" alt="DedeCMS站点高级安全策略(Linux篇)" src="https://zhuji.jb51.net/uploads/img/202305/e3ce94e3568a9e157db92293dddb8657.jpg"></p>
        <p>
                 </p>
        <div>
                <p>
                         </p>
                <p>
                         </p>
                <div>
                        <p>
                                如果您需要了解Windows Server 2012下如何搭建配置DedeCMS环境,可以查看:《Windows Server 2012 搭建PHP+MySQL环境安装DedeCMS系统》</p>
                        <p>
                                 </p>
                        <div>
                                <p>
                                         </p>
                                <p>
                                         </p>
                                <p>
                                        6.Nginx设置</p>
                                <div>
                                        <p>
                                                由于Nginx轻便容易维护,很多站长也会选择Nginx作为站点服务器,设置思路同上文类似,但有稍许的不同,下面我们就来单独对其进行介绍。</p>
                                        <p>
                                                 </p>
                                        <p>
                                                6.1.安装Nginx以及php5-fpm</p>
                                        <p>
                                                终端中输入:sudo apt-get install nginx</p>
                                        <p>
                                                以及:sudo apt-get install php5-fpm</p>
                                        <p>
                                                (如果已经安装了Apache的用户需要停止Apache,以免同Nginx冲突,可以使用命令行:sudo service apache2 stop)</p>
                                        <p>
                                                6.2.添加站点</p>
                                        <p>
                                                同样我们需要添加两个站点,一个前台“www.dede.com”一个后台“admin.dede.com”,基本配置如下:</p>
                                        <p>
                                                www.dede.com站点:</p>
                                        <p>
                                                server {</p>
                                        <p>
                                                root /var/dedecms;</p>
                                        <p>
                                                index index.html index.htm index.php;</p>
                                        <p>
                                                server_name www.dede.com;</p>
                                        <p>
                                                ...</p>
                                        <p>
                                                location ~ .php$ {</p>
                                        <p>
                                                fastcgi_pass 127.0.0.1:9000;</p>
                                        <p>
                                                fastcgi_param script_FILENAME /var/dedecms$fastcgi_script_name;</p>
                                        <p>
                                                fastcgi_index index.php;</p>
                                        <p>
                                                include fastcgi_params;</p>
                                        <p>
                                                }</p>
                                        <p>
                                                }</p>
                                        <p>
                                                admin.dede.com站点配置:</p>
                                        <p>
                                                server {</p>
                                        <p>
                                                root /var/dedecms-admin;</p>
                                        <p>
                                                index index.html index.htm index.php;</p>
                                        <p>
                                                server_name admin.dede.com;</p>
                                        <p>
                                                ...</p>
                                        <p>
                                                location ~ .php$ {</p>
                                        <p>
                                                fastcgi_pass 127.0.0.1:9001;</p>
                                        <p>
                                                fastcgi_param script_FILENAME /var/dedecms-admin$fastcgi_script_name;</p>
                                        <p>
                                                fastcgi_index index.php;</p>
                                        <p>
                                                include fastcgi_params;</p>
                                        <p>
                                                }</p>
                                        <p>
                                                }</p>
                                        <p>
                                                这里主要是admin的站点采用的9001端口,以及站点目录重新做了调整。</p>
                                        <p>
                                                6.3.指派站点文件访问控制权限</p>
                                        <p>
                                                同apache的apache2-mpm-itk不同,php5-fpm默认就可以进行权限控制。</p>
                                        <p>
                                                在文件/etc/php5/fpm/pool.d/www.conf中则是默认采用了“www-data”作为站点的控制用户,所以为了后台具有对应的操作权限,我们需要添加一个专门的控制权限。</p>
                                        <p>
                                                cd /etc/php5/fpm</p>
                                        <p>
                                                cp www.conf admin.conf</p>
                                        <p>
                                                修改admin.conf文件</p>
                                        <p>
                                                其中我们只要将:</p>
                                        <p>
                                                user = www-admin</p>
                                        <p>
                                                group = www-data</p>
                                        <p>
                                                listen = 127.0.0.1:9001</p>
                                        <p>
                                                这几个地方做一个更改即可。</p>
                                        <p>
                                                完成后重启下服务</p>
                                        <p>
                                                sudo service php5-fpm restart</p>
                                        <p>
                                                sudo service nginx restart</p>
                                        <p>
                                                6.4.nginx下取消目录执行的权限</p>
                                        <p>
                                                在《Linux下安装DedeCMS及安全设置》 中介绍了apache下如何取消目录执行权限,nginx也是类似,但配置方法稍有不同:</p>
                                        <p>
                                                server {</p>
                                        <p>
                                                ...</p>
                                        <p>
                                                location ~* ^/uploads/.*.(php|php5)$</p>
                                        <p>
                                                {</p>
                                        <p>
                                                deny all;</p>
                                        <p>
                                                }</p>
                                        <p>
                                                }</p>
                                        <p>
                                                按照这个方法,将其他目录也同样设置即可。</p>
                                </div>
                        </div>
                </div>
        </div>
</div>
<p>
         </p>
頁: [1]
查看完整版本: DedeCMS站点高级安全策略(Linux篇)