Nginx下dedecms安全设置

目录权限设置

织梦可读写、不可执行权限,禁止运行php程序目录:

  • templets
  • uploads
  • data
  • images
  • a

具体目录,可以通过后台一键更新时,寻找需要写入权限的目录

思路:
web服务器(AMH)运行的用户应该是www,那么网站的所有者就应该不能设置为www,而应该设置为不同的用户,这里设置为ftpuser用户。同时www、ftpuser用户应该为同一组,这里设置同为www组。

1、那么我们将网站目录的所有者设置为ftpuser,用户组设置为www,目录权限设置为为750,文件权限设置为640。这里以AMH控制面板为例:

1
2
3
4
cd /home/wwwroot/$web_site
chown -R ftpuser.www web
find web -type d -exec chmod 750 {} \;
find web -not -type d -exec chmod 640 {} \;

2、针对需要有读写权限的目录,templets、uploads、data、images、a等

1
2
cd web
chmod -R 770 templets uploads data images a

禁止执行PHP文件

针对有读写权限的目录,禁止运行PHP

1
2
3
4
5
6
vi /usr/local/nginx/conf/vhost/$web_site.conf
#追加如下
location ~* ^/(templets|uploads|data|images|a)/.*\.(php|php5)$
{
deny all;
}

Shell增加变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
#dede_safe.sh
#$1指网站目录
cd /home/wwwroot/$1
chown -R ftpuser.www web
find web -type d -exec chmod 750 {} \;
find web -type f -exec chmod 640 {} \;
#$2指有读写权限的目录名称(目录名称之间用空格隔开)
cd web
chmod -R 770 $2
#$3指有读写权限的目录名称(目录名称之间用|隔开)
cd /usr/local/nginx/conf/vhost/
sed -i '/php\$/i\\ \tlocation ~* ^/('"$3"')/.*\.(php|php5)$\n\t{\n\t\tdeny all;\n\t}\n' "$1".conf sed -i '/php\$/i\\ \tlocation ~* ^/('"$3"')/.*\.(php|php5)$\n\t{\n\t\tdeny all;\n\t}\n' "$1".conf

如何来调用:

1
./dede_safe.sh "www.wangyi.com" "templets uploads" "templets|uploads"

在sed中使用变量

通常,我们使用sed进行变量替换的时候,替换和被替换变量都是hard-coded的。例如:

sed -n ‘/comm/p’ /tmp/test.log

如果我们用一变量var,它的值根据上下文变化

$ var=”comm”,定义了变量,那么我们在sed的使用中这样使用变量

$ sed -n ‘/’”$var”‘/p’ /tmp/test.log

注意,是用单引号包含双引号来引用变量。