网站备份与 Jailed SSH User 的实现

之前在看一些 VPS 博客的时候经常看到这样的一句话:“任何服务商都不会永久稳定,要做好数据备份”,虽然我本人还没遇到跑路的 VPS 服务提供商,Scaleway 的东家 Online 也是存在了快十年的公司了,但这也不意味着备份就是不必要的,毕竟这不是 PT 盒子,关停了再配置一个也就是最多半天的事情,如果自己写了几年的文章,突然就因为什么不可抗力的原因全都没了,这种打击估计谁也受不了,因此在我在这个博客架设之初就必须考虑到备份的问题。

备份一般来说,有本地备份和异地离线灾备两种,本地一般是为了回滚使用,而异地离线灾备则是为了 VPS 完全挂掉的时候,仍然不至于丢失所有的数据。考虑到 LinuxEye 的 LNMP 一键包提供了本地和远程备份的脚本,因此我选择本地和异地都备份一份以在保证高可用性的同时的可靠性。

备份脚本的操作并不是很复杂,这里已经有了操作说明,在这里也不再赘述。略微需要记录的一点,则是 Jailed SSH User 的实现。

一键包中的远程备份,是在本地完成备份打包之后,通过 rsync over SFTP 的方式同步至远程服务器,因此在远程服务器上必须有相对应的 SSH 用户才能操作。这里自然就会引出一个问题,由于无论是密码还是密钥登录,都需要将其存储在 VPS 之上,而我们自然不希望有人窃取了密码或者私钥之后登录到我们的备份服务器,因此这个备份用户本身的访问权限就应该被限制,也就是 Jailed SSH User,简而言之,Jailed SSH User 就是一个访问权限受限于特定目录树的用户,即使密码或者密钥被人窃取,也不用担心会给宿主机造成任何危害。接下来就谈一谈具体的实现。

Jailed SSH User 的创建教程用 Google 可以搜索到很多,我最终采用的是 StackOverflow 上提供的 Jailkit 的方案。具体步骤记录如下:

  • 下载 Jailkit 源码,编译安装
Download & Install:

http://olivier.sessink.nl/jailkit/index.html#download

# cd /tmp
# wget https://down.gloriousdays.pw/Tools/jailkit-2.19.tar.gz
# tar -zxvf jailkit-2.19.tar.gz
# cd jailkit-2.19
# ./configure
# make
# make install
  • 设置 Jail 根目录并完成初始化
# mkdir /home/jail
# chown root:root /home/jail

# jk_init -v /home/jail basicshell
# jk_init -v /home/jail netutils
# jk_init -v /home/jail ssh
# jk_init -v /home/jail jk_lsh
  • 创建一个用户并设置密码
# useradd -d /home/testuser -m testuser -s /bin/bash
# passwd testuser
  • 使用 Jailkit 将创建的用户移入 Jail 环境,如果需要建立更多的 Jailed User,在建立用户之后从这步开始即可
# jk_jailuser -m -j /home/jail testuser

Your /etc/passwd should contain something like this now:
testuser:x:1001:1001::/home/jail/./home/testuser:/usr/sbin/jk_chrootsh
  • 使用 jk_cp 命令复制 Bash 相关 Binary 进入 Jail 环境
# jk_cp -v -f /home/jail /bin/bash
  • 最后再做一些小的修改,将默认 shell 从 lsh 改成 bash
Now edit the /home/jail/etc/passwd file and make sure it contains something like this:
testuser:x:1001:1001::/home/testuser:/bin/bash
  • 之后在网站 VPS 上设置好备份配置,将备份脚本添加进入 crontab 自动执行
crontab -e 
0 1 * * * cd ~/lnmp;./backup.sh  > /dev/null 2>&1 &

Done!

如果还需要做一些维护,可以这样:

By using jk_update updates on the real system can be updated in the jail. A dry-run will >show what’s going on:
# jk_update -j /home/jail -d

 

发表评论

电子邮件地址不会被公开。