=Start=
缘由:
这个博客是在2014年6月份左右开始搭建的,当时因为比较熟悉Ubuntu环境,且对LNMP的编译安装配置也不是太清楚,所以选了Ubuntu系统用的LNMP一键安装包搭建的环境。在维护这个博客期间,我学习到了很多知识,也保持了一个较高的更新频率,但是后来工作忙起来了之后就没什么时间在博客上写东西了(并不是太忙而没时间,也不是太懒而不记录……)。前段时间工作没那么忙了之后就想着把博客再好好整理一下,包括后端的系统环境等等。
因为自己做的是安全相关工作,所以在搭建博客的时候也比较注意安全这方面的问题,也做了不少防护措施来避免VPS/博客被轻易黑掉。但近2年出了不少比较大的安全事件,比如:脏牛漏洞、ImageMagick漏洞、……、还有一些WordPress的漏洞,不禁感慨,在安全的世界里漏洞是始终存在的,防不胜防,说不定之前有哪一点没做好或是补丁防护晚了些,然后博客就被上传了个webshell,然后利用最近出来的一个0day漏洞,服务器就被拿下了。更别谈之前很长的一段时间博客根本就没有什么防护手段和措施,所以现在就连我自己都说不准VPS/博客是否是安全的。
再加上现在用的Ubuntu系统比较老了,工作方面主要用的是CentOS,所以就考虑在DigitalOcean上新建一个CentOS的droplet再搭一个环境,把之前的博客和相关服务都迁移过去。下面就主要记录迁移博客和服务的相关过程。
正文:
参考解答:
1.新建主机&初始化主机
先在DigitalOcean的后台页面上新建一个droplet,然后使用之前写的CentOS系统初始化脚本(centos_init.sh)进行主机初始化操作。
2.原始主机的本地&远程备份
- crontab以及涉及到的相关代码/配置文件
- 迁移 www 目录和相关日志;
- 一些主要的系统设置;[MySQL、PHP、Nginx、php-fpm、rsyslog、/etc目录、]
# scp -r -C -P $port -i ./id_rsa.security root @crazyof .me:/root/ /home/crazy |
3.在新建主机上搭建相关环境
- 如何更好的手工编译安装Nginx
https://ixyzero.com/blog/archives/3077.html - 在 CentOS 7 上安装 Percona 作为 MySQL 的替代者
https://ixyzero.com/blog/archives/2684.html - 在 CentOS 7 上安装 PHP 7
https://blog.remirepo.net/post/2016/02/14/Install-PHP-7-on-CentOS-RHEL-Fedora - 为 WordPress 编译安装 PHP 7.0.3 亲测全攻略
https://www.bokeyy.com/post/build-php-7-0-3-for-wordpress.html
4.WordPress博客迁移
WordPress内容导出
方法一:
WordPress后台自带导出工具
方法二:
命令行下可使用 wp-cli 进行快速导出
http://wp-cli.org/commands/export/
WordPress内容迁移
方法一:
WordPress后台自带导入工具(只适合内容比较少的情况,比如:XML文件大小不超过2MB)
方法二:
命令行下可使用 wp-cli 进行快速导入
http://wp-cli.org/commands/import/
方法三:
使用工具将大XML文件切分成多个小的XML文件分多次导入。
WordPress主题功能/样式修改
# wp-config.php (WordPress全局安全功能增强 FORCE_SSL_ADMIN / DISALLOW_FILE_EDIT / DISALLOW_FILE_MODS) # content.php (添加「显示摘要」这个功能) # footer.php (添加「页脚显示内容」这个功能)(cnzz/百度统计) # header.php (添加「返回至顶部」这个功能)(div.go-top) # single.php (添加「原创文章声明」这个功能) # functions.php (添加一些安全功能) # style.css (个性化设置) |
WordPress站点URL修改
方法一:直接修改WordPress数据库表的对应字段
use wordpress; desc wp_options; select count(*) from wp_options; select * from wp_options where option_name IN( 'siteurl' , 'home' ); |
方法二:修改 wp-config.php 文件内容以间接达到目标
|
方法三:修改所使用主题中的 functions.php 文件内容
|
WordPress全站HTTPS
申请StartSSL或Let’sEncrypt的HTTPS证书,在Nginx上进行配置。
5.crontab定时任务迁移
# crontab -l | tee cron_list_${USER}.txt $ crontab -l | tee cron_list_${USER}.txt |
6.防护、扫描、告警操作
- SSH禁止root登录、仅限密钥登录、增加防爆破机制、增加登录提醒机制
- MySQL删除无用账户密码、限制root外联、为各服务单独创建用户/数据库
- Redis等NoSQL增加密码验证、限制可连接IP范围
- Nginx以低权限用户启动,并添加一些规则,防范敏感文件泄露
- Web目录增加Inotify监控,防范webshell上传
- WordPress增加一些安全策略
- 替换原有Bash,增加命令记录、提权检测、反弹shell操作检测
- 增加日志分析的定时任务,并将分析结果和可疑情况以邮件的形式发给自己
参考链接:
=END=
《 “迁移WordPress至新主机的相关步骤” 》 有 15 条评论
wordpress更换域名的几个步骤
http://www.2zzt.com/jcandcj/5883.html
https://codex.wordpress.org/Moving_WordPress
如何完美更换WordPress网站的域名
http://wpchina.org/how-to-change-wordpress-domain-prefectly-1528/
如何手动备份WordPress数据库
http://wpchina.org/how-to-backup-wordpress-database-manually-1437/
WordPress博客网站搬家和换域名方法
https://blog.fazero.me/2015/07/11/WordPress%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99%E6%90%AC%E5%AE%B6%E5%92%8C%E6%8D%A2%E5%9F%9F%E5%90%8D%E6%96%B9%E6%B3%95/
WordPress更换域名详细攻略
https://www.liaosam.com/how-wordpress-changes-domain.html
WordPress搬家更换域名,实现301完美重定向!
http://www.ha97.com/2511.html
`
情况分类:
换空间 + 换域名
0.开始之前,请先做好网站的备份,备份好网站数据库和网站文件。尤其是数据库,一定要做好备份,以防操作过程中出现错误,我们可以使用备份的数据库重新进行操作。然后注意更新 wp-config.php 文件中的配置。
1.将新域名做好解析和绑定操作。
2.更新数据库中的域名。
3.全站301重定向。
换域名
0.开始之前,请先做好网站的备份,备份好网站数据库和网站文件。尤其是数据库,一定要做好备份,以防操作过程中出现错误,我们可以使用备份的数据库重新进行操作。[可选]
1.将新域名做好解析和绑定操作。
2.更新数据库中的域名。
3.全站301重定向。
`
DigitalOcean除了在刚开始的时候有些优惠,后来基本上就没什么折扣了,5美元一个月的虽然不算太贵,不过只有512MB的内存,考虑切换到Linode上的5美元套餐了,起码机器性能会好点,不至于MySQL经常挂掉。。。
https://www.linode.com/?r=fe5819c58f2f569dff908597542fbbf526d86c14
Linode测速链接
https://www.linode.com/speedtest
多地点ping(测试的情况来看日本节点的机器会比较好,不过貌似被封的也厉害,可以实际使用试试再做决定)
http://ping.chinaz.com/speedtest.tokyo2.linode.com
WordPress 安全加固工具
https://github.com/elcodigok/wphardening
如何解决WordPress无法上传media的错误?
https://www.tipsandtricks-hq.com/how-to-fix-the-unable-to-create-directory-error-in-wordpress-5264
https://stackoverflow.com/questions/30188630/unable-to-create-directory-in-wp-content-uploads-in-wordpress
`
#给uploads目录添加web用户的「写」权限
sudo chown -R nginx:nginx /path/to/wordpress/wp-content/uploads
`
修复升级了一半的WordPress
https://blog.swineson.me/fix-wordpress-broken-in-update-progress/
https://wordpress.stackexchange.com/questions/224989/get-rid-of-another-update-is-currently-in-progress
https://github.com/wp-cli/wp-cli
https://developer.wordpress.org/cli/commands/export/
https://developer.wordpress.org/cli/commands/import/
`
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar –info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp export –help
wp import –help
wp export –path=/path/to/wordpress
`
1. CentOS 7 上安装 PHP7的方法
`
function install_php7() {
# check php’s version before install
# php -v
# install some tools
sudo yum install -y epel-release
sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install -y yum-utils
# enable remi-php73 repo
sudo yum-config-manager –enable remi-php73
# yum search php73 | more
# sudo yum search php73 | egrep ‘fpm|gd|mysql|memcache’
sudo yum install -y php73 php73-php-fpm php73-php-gd php73-php-json php73-php-mbstring php73-php-mysqlnd php73-php-xml php73-php-xmlrpc php73-php-opcache php73-php-soap php73-php-mcrypt php73-php-bcmath php73-php-cli php73-php-common php73-php-devel php73-php-dba php73-php-curl php73-php-snmp php73-php-imap php73-php-ldap php73-php-pecl-memcache php73-php-pecl-memcached php73-php-pecl-mysql php73-php-pecl-mysql-xdevapi
# check php’s version after install
php73 -v
# enable first, then start
sudo systemctl enable php73-php-fpm
sudo systemctl start php73-php-fpm
}
`
2. 对应的 php + php-fpm 配置文件位置
/etc/opt/remi/php73/php-fpm.conf
/etc/opt/remi/php73/php-fpm.d/www.conf
/etc/nginx/nginx.conf
/etc/nginx/conf/
我的博客安装了哪些Wordpress插件?
https://mp.weixin.qq.com/s/Mifx4ju7RZtMCLET5C83CA
`
第一:做数据分析和追踪的插件
插件一:All in one seo pack
插件二:Jetpack (WordPress官方出品,不过需要很多的数据,这个看个人的接受程度吧)
第二:做网站站内优化的插件
插件三:ShortPixel Image Optimizer
插件四:WP Smush
插件五:WP Fastest Cache
插件七:SEO Friendly Images
插件八:Wp Seo Schema
第三:做网站安全防御的插件
插件九:updraftplus
插件十:WordfenceScan
`
https://cn.wordpress.org/plugins/all-in-one-seo-pack/
https://wordpress.com/jetpack/connect
https://wordpress.org/plugins/shortpixel-image-optimiser/
https://wordpress.org/plugins/wp-smushit/
https://wordpress.org/plugins/wp-fastest-cache/
https://wordpress.org/plugins/seo-image/
https://wordpress.org/plugins/wp-seo-structured-data-schema/
https://wordpress.org/plugins/updraftplus/
https://wordpress.org/plugins/wordfence/
32步WordPress网站安全终极检查清单:第1~5步
https://mp.weixin.qq.com/s/XFeFPLiapTvjheUUpSjzbg
32步WordPress网站安全终极检查清单:第18~22步
https://mp.weixin.qq.com/s/VKtVglr6bu–zJlSRpicBA
32步WordPress网站安全终极检查清单 – 目录
https://wpchina.org/32-step-checklist-security-your-wordpress-site-5076/
`
32步WordPress网站安全终极检查清单:第1~5步
* 保持使用最新版本的WordPress;
* 不要修改WordPress的内核代码;
* 确保所有插件更新到最新版本;
* 移除所有未激活、未启用的插件;
* 确保所有主题更新到最新版本;
32步WordPress网站安全终极检查清单:第6~12步
* 仅安装下载自其官方网站的插件、主题和脚本程序;
* 选择安全可靠的WordPress主机服务商;
* 确保你的网站运行在最新版的PHP版本上;
* 修改默认的admin用户名;
* 使用强健安全的密码;
* 不要重复使用密码;
* 注意保护密码的安全,不要使用文本格式来保存密码;
32步WordPress网站安全终极检查清单:第13~17步
* 只在可信任网络中更新你的网站;
* 本地计算机要安装杀毒软件;
* 使用Google Search Console等类似服务监控网站安全;
* 使用安全防护插件来保护你的WordPress网站;
* 如果其他步骤失败了,那使用备份文件恢复网站;
32步WordPress网站安全终极检查清单:第18~22步
* 限制尝试登录的行为;
* 启用双重认证(可参考本站推荐的25个最受欢迎的WordPress插件之25)
* 确保文件权限设置正确;
* 修改默认的数据库表前缀;
* 确保设置了WordPress秘密认证验证密钥;
32步WordPress网站安全终极检查清单:第23~27步
* 禁用执行PHP代码;
* 隔离数据库;
* 限制数据库用户的权限;
* 禁止文件编辑;
* 保护wp-config.php文件的安全;
32步WordPress网站安全终极检查清单:第28~32步
* 禁用xml-rpc功能(如果你不需要这一功能的话);
* 禁用PHP错误报告功能;
* 安装防火墙;
* 使用CDN防火墙;
* 通过安全日志监视WordPress网站安全。
`
十条关于 WordPress 安全性的小贴士 操作
https://mp.weixin.qq.com/s/HaPAKZLvrVzRUftumMDrmA
`
1. 切换到 HTTPS
2. 限制 MySQL 连接地址
3. 使用强大的数据库凭据
4. 使用强大的管理员帐户凭据
5. 移动或保护 wp-config.php 配置文件
6. 尽可能授予用户最低权限角色
7. 限制 IP 地址访问
8. 隐藏 WordPress 版本号
9. 理智选择第三方插件和主题
10. 定期更新 WordPress 和插件
`
https://www.sitepoint.com/10-easy-wordpress-security-tips/
6款最好用的WordPress安全插件推荐
https://themeforwp.net/archives/best-wordpress-security-plugins/
`
Wordfence Security
iThemes Security
Hide My WP
All In One WP Security & Firewall
SecuPress
Sucuri Security
以上就是我们为大家推荐的Wordperss安全插件,它们都会为你的网站添加强大的安全防护。当然你不需要将这些插件全部安装,只需要挑选一款适合自己的即可。
* 新手用户,建议使用 iThemes Security 和 All In One WP Security,这2款插件都是中文界面,而且使用起来比较简单;
* 注重性能,选择 Sucuri Security,这一款比较简洁;
* 付费的话建议 SecuPress,功能全,界面漂亮,价格也便宜;
* 综合性能较强的 Wordfence ;
* 另外如果你不想暴露自己使用WordPress程序,Hide My WP是最好的选择。
最后,记得养成良好的习惯,注意Wordpress主题插件安全,定期进行站点备份、网站维护等操作,更多WordPress安全技巧可以查看我们的WordPress安全防护建议。
`
禁止在Wordpress控制面板里编辑文件
https://www.douban.com/note/242107890/
https://www.cnblogs.com/wpsnippet/archive/2012/12/20/2826751.html
`
在你WordPress根目录的 wp-config.php 文件中添加如下两行:
define(‘DISALLOW_FILE_EDIT’, true); //禁止通过Wordpress的后台编辑任何文件
define(‘DISALLOW_FILE_MODS’,true); //禁止安装或者升级Wordpress
在 wp-config.php 中添加
define(‘DISALLOW_FILE_EDIT’, true);
之后,还可以进行【主题、插件】的安装(但无法在线编辑)。
添加了以下这一行
define(‘DISALLOW_FILE_MODS’, true);
之后,就无法进行【主题、插件、版本】的安装或升级操作了。
`
如何禁用WordPress主题以及插件的更新提示?
https://www.wpmee.com/1779.html
https://trickspanda.com/disable-plugin-update-notification-specific-wordpress-plugin/
https://trickspanda.com/disable-plugin-theme-updates-installation-wordpress/
`
Just add following snippet to your wp-config.php file:
define(‘DISALLOW_FILE_MODS’,true);
`
wordpress怎么禁止后台编辑主题和插件
https://baijiahao.baidu.com/s?id=1637295965872223237&wfr=spider&for=pc
WordPress 技巧:移除 WordPress 后台的主题编辑器
https://blog.wpjam.com/m/remove-theme-editor/
WordPress 技巧:关闭后台的文件编辑功能
https://blog.wpjam.com/m/disable-file-edition-in-wordpress-admin/
WordPress 技巧:隐藏登录失败未知用户名和密码不正确的错误信息
https://blog.wpjam.com/m/hide-wordpress-login-real-errors/
`
add_filter(‘wp_login_errors’, function($errors){
$error_code = $errors->get_error_code();
if(in_array($error_code, [‘invalid_username’, ‘invalid_email’, ‘incorrect_password’])){
$errors->remove($error_code);
$errors->add($error_code, ‘用户名或者密码错误。’);
}
return $errors;
});
`