服务器、FTP、CmsTop后台、数据库等所有密码,请设置强有力密码,简单有效降低整体风险的安全漏洞,以下是关于一些强密码的建议:
§ 包括数字,符号,大小写字母组合
§ 密码长度应在12至14个字符,如果允许,可以更长。
§ 任何避免重复的密码,避免基于个人资料信息密码,如生日,姓名等。
§ 定时更换密码的习惯
尽管我们一再强调密码复杂度的重要性,还依然有许多弱密码的存在。
所以伟大的webmaster一定要在日常工作中给网站工作人员加强与灌输安全管理意识。
互联网上无时不刻都有一些人四处开着扫描器进行弱密码扫描试探,SSH的22端口也不例外,在服务器上执行两条指令可查看所有登录成功与失败的日志:
# 查看成功登录的日志,空格翻页,q退出
shell> last | less
# 查看登录失败的日志
shell> lastb | less
看下图血淋淋的例子,所以在安装操作系统系统并设置好密码后,最好修改SSH默认端口
(1) 修改SSH服务端口
修改SSH配置文件,将其监听端口更改为大于10000的值,发挥您的想象力:
shell> vi /etc/ssh/sshd_config
# 指定端口号
Port 22345
修改iptables软件防火墙把默认的22端口改为刚才指定的端口:
# 也可以使用 setup来进行配置iptables软件防火墙
shell> vi /etc/sysconfig/iptables
# 重启iptables,或者使用 service iptables restart
shell> /etc/init.d/iptables restart
注意:关于SSH, FTP这些端口的修改,一定要在修改后立即进行连接测试,以防由于误操作,断开了当前连接而无法再次连接主机。
(2) 禁止root账户远程登录
通过修改默认端口基本上可以阻挡99%恶意扫描信息(根据个人观察),紧接着要做的就是禁止root远程直接登录。因为通过分析扫描日志,你会发现root账户试探的次数一直是永居榜首:
shell> vi /etc/ssh/sshd_config
# 禁止root账户登录
PermitRootLogin no
然后创建个普通账户,当我们需要远程连接的时候,先通过普通账户登录,再su -到root。普通账户的用户名需要你费心思创造个奇葩的,想到admin这样的用户名请先去反思:
shell> useradd yaoniming3000
shell> passwd yaoniming3000
使用普通账户登录服务器后执行su –切换
# 注意su后面有个减号,是同时切换环境变量的意思
shell> su –
同样,修改完毕,还是立即进行连接测试,以防无法连接主机
(3) 限制服务器IP或VPN登入
如果有条件,强烈建议配置服务器的远程登录权限只能通过特定IP段或VPN方可登入。
(1) 按需加载 PHP 解析
具体作法是在 httpd.conf 主配置中不加载 PHP解析,而把 AddType 配置项放到每个虚拟主机配置文件中。例如:
shell> vi /etc/httpd/conf.d/php.conf # 取消默认PHP解析,在需要解析PHP虚拟主机中加入:
AddHandler php5-script .php
AddType text/html .php
CmsTop默认的二级域名虚拟主机中,静态域名一定不允许进行PHP解析,它们包含:
www.domain.com
img.domain.com
upload.domain.com
以及其他所有的静态发布点,客户自行做二次开发时也需遵守此项约定。Nginx依此原则进行配置。
(2) 禁用PHP敏感函数
很多木马程序和服务器攻击都是利用PHP内置的敏感函数,因此需要在配置文件中禁用这些敏感函数,以下列出一些函数,可以根据实际情况配置:
shell> vi /etc/php.ini
disable_functions =
exec,shell_exec,system,popen,escapeshellcmd,escapeshellarg,gzuncompress,proc_open,proc_get_status,show_source,gzinflate,phpinfo
重启Apache方生效。
(3) 限制PHP 脚本的执行目录
如果网站不幸被植入了木马,通过限制PHP脚本的执行目录,可以禁止木马程序浏览操作系统的系统文件,进而产生更大的破坏,一共有两步操作:
shell> vi /etc/php.ini
open_basedir = /data/www/:/tmp/
如果是Apache,还可以限定每个虚拟主机的执行目录
……
php_admin_value open_basedir "/data/www:/tmp"
注意以上红色部分有差异,并且/tmp目录是必须要给的。
重启 Apache 生效。
(4) 开启动态虚拟主机的访问日志
一定要开启所有可执行PHP脚本虚拟主机的访问日志,以便有迹可循:
……
CustomLog logs/admin.domain.com-access_log
(5) 开启PHP日志文件
在关闭display_errors后建议把错误信息记录下来,便于查找服务器运行的原因:
shell> vi /etc/php.ini
log_errors = On
error_log = /var/log/php/php_error.log # 注意日志目录需要Apache写权限
这个日志并不会像Apache一样轮滚,需要手动清理或写截断脚本。
(1) 数据目录和数据文件的安全性
设置MySQL数据目录为700,即只有启动数据库的用户可以读写数据库文件,保证了本地数据文件的安全。
shell> chmod 700 /www/mysql
设置MySQL日志目录为770,即只有数据库用户和组成员可以查看
shell> chmod 770 /var/log/mysql
(2) 本地日志文件安全性
有些用户在本地登陆或备份数据库的时候为了图方便,有时会在命令行参数里直接带了数据库的密码,如:
shell> mysql -uroot –ptest
shell> mysqldump -uroot -ptest test > test.sql
这些命令会被shell记录在历史文件里,比如bash会写入用户目录的.bash_history文件,如果这些文件不慎被读,那么数据库的密码就会泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。
另外用户本地登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。如果数据库用户用SQL语句修改了数据库密码,也会因.mysql_history文件而泄漏。所以必要时我们可以这样做:
shell>rm ~/.bash_history ~/.mysql_history
shell>ln -s /dev/null ~/.bash_history
shell>ln -s /dev/null ~/.mysql_history
(3) 数据库账户的配置
请不要直接使用数据库root账户来进行CmsTop数据库的管理,并配置数据库root账户只允许本地连接数据库。
针对每个数据库设置不同的用户、密码、连接限制权限,如果您不熟悉SQL可借助phpMyAdmin图形化web界面来进行配置。
mysql> select user,host from mysql.user;
+--------------+------------------+
| user | host |
+--------------+------------------+
| cmstop | 192.168% |
| cmstop | localhost |
| root | localhost |
(4) 数据库的外网访问
数据库一般不需要通过外网访问,所以也不需要配置外网IP,开放外网端口,当数据库与应用分开时,应该通过内网IP来进行连接。
(5) phpMyAdmin的访问控制
使用phpMyAdmin来进行数据库管理,不要为了图方便,将该目录放置到CmsTop的系统目录中运行。
可以单独配置一个域名来进行访问,并且不要进行公网DNS解析,让外网直接访问。
(1) authkey 加密密钥修改
该密钥用于Cookie数据加密,为了保证用户数据安全,请部署完毕后立即进行修改:
shell> vi cmstop/config/config.php
authkey => # 请修改长度超过40并尽可能复杂的字符串
(2) 修改默认配置前缀:_cmstop
shell> vi cmstop/config/cache.php
shell> vi cmstop/config/cookie.php
shell> vi cmstop/public/img/js/config.js
(3) 个性化后台域名
请不要使用如admin,back等易于猜测的后台域名,同时我们强烈建议后台域名不要通过公网DNS解析,最好手动绑hosts文件访问。
如果有条件的话,后台更应该放置在VPN以及内网下访问。
shell> vi cmstop/config/define.php
define('ADMIN_URL', 'http://admin.domain.com/');
同时需要对应修改您的虚拟主机域名配置。
目录权限的配置非常重要,80%的网站系统入侵后成功挂马,基本上是权限设置不正确引起的。CmsTop系统目录权限配置的原则为:
这样即使黑客侵入了网站目录,也不能轻易让木马在可执行PHP脚本的目录下运行。
CmsTop需要配置可写的子目录为(截至20130830):
cmstop/data
cmstop/public/upload
cmstop/public/www
cmstop/public/img/apps/special/templates
cmstop/public/img/apps/special/scheme
上述目录都是禁止执行PHP的。
(1) 目录权限配置方法
# 首先修改整个系统目录的属主与属组,很多大哥喜欢用apache:apache来修改,这就意味着Apache对任意目录和文件均有写权限,这是非常不明智的。
# root可以修改为FTP或SFTP账户的用户名,这样可以保证FTP账户有写权限
shell> cd cmstop/
shell> chown –R root:apache .
# 其次对整个目录配置成目录755,文件644权限
shell> find . -type d | xargs chmod 755
shell> find . -type f | xargs chmod 644
# 最后再对需要可写的目录设置为可写
shell> chmod -R 777 data/ public/upload/ public/www/ public/img/apps/special/templates/ public/img/apps/special/scheme/
(2) 模版目录
虽然CmsTop后台提供了在线修改模版的功能,提供了一定的方便,但是一旦黑客通过其他途径拿到了后台帐号密码,并进入了后台,就可以在线修改模版并植入木马程序。
为了安全起见,我们强烈的建议用户不允许在线修改模版,因为你方便,黑客们也喜欢。
通过FTP或SFTP软件来进行模版修改,同时开启FTP与SFTP的操作日志。
(3) 定时检查日志与会员登录日志
作为网站webmaster,养成定时查看日志的习惯才是好同志。
通过开启CmsTop后台的操作日志,并定时查看是否有非法登入后台的管理员账户,是否有非法访问后台地址的行为。
(4) 检查后台robots.txt文件
如果后台可以通过外网直接访问,请注意检查后台访问目录的robots.txt文件,防止搜索引擎抓取,某天您发现百度能直接搜索到网站后台地址,这是很尴尬的事情啊。
shell> vi cmstop/public/admin/robots.txt
User-agent: *
Disallow: /
CmsTop使用过程中,如发现已知的安全漏洞, 官方会在第一时间修复漏洞并提供补丁包,并通知我们的客户及时打上补丁,避免再次入侵,造成更大损失。
如果您在使用过程中发现有入侵现象,请及时与我们联系,我们会安排工程师进行网站扫描与清理工作。
如果您在使用过程中自行发现了隐藏的程序漏洞,也请及时与我们联系,我们会慷慨的赠予礼品表示感谢。
如果网站因为某些原因被入侵或被挂马,可以通过以下简易手段进行排查,快速解决问题,另外也请及时联系我们的技术支持人员,进行排查。
(1) 模版文件检查
一般模版文件植入木马,都是通过访问动态脚本加载模版运行,一般都要接收外部参数,通过以下三句指令进行基本的检查:
shell> grep –rl “_REQUEST”templates/
shell> grep –rl “_POST”templates/
shell> grep –rl “preg_replace”templates/
(2) 可执行PHP目录检查
可执行PHP目录有public/app,public/mobile,public/wap等,同样通过以上指令进行检查,搜索的是木马的特征码。鉴于木马的变种实在是太多,就不详细举例了:
shell> grep –rl “特征” public/app
…
(3) 定期检查访问日志文件
通常入侵会来自于前台的动态域名,可通过以下指令对访问日志的URL进行分组排序并分析:
#查看访问次数最多的url
cat /var/log/httpd/app.domain-access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less
如果您有多台Web服务器,则需要分别查看。
CmsTop默认提供了备份脚本,每天凌晨对网站程序和模版以及数据库进行备份,脚本文件路径请与CmsTop技术支持联系。
网站的附件由于可能容量较大,需要客户手动备份或通过其他硬件设备支持。
webmaster需要定时查看备份脚本是否还在正常运行。以防出现故障后无法回复。
如果您的服务器运行了不止CmsTop一个产品,还有如DiscuzX、DedeCMS等开源产品,请及时关注这些产品的安全信息,并做好补丁工作。
另外如果您的服务器使用Apache,可以参考1.3.3进行虚拟主机的PHP执行限制,可以有效的防范跨站攻击。
猛击以下地址可查阅已知产品的漏洞: