VPS 即 Virtual Private Server 虚拟专用服务器,可以看作是一台在某服务商机房的联网计算机,用户付费开通后通过 SSH 远程登录进行控制、使用。如今,许多即使不是从事相关行业的普通大众,也持有若干台VPS,用来搭建各种服务,自用或小伙伴共用。经常搭建的服务包括:博客、网盘、下载、上网。

然而,一台新开通的 VPS 中的初始系统,就如新装的 Windows 一样,存在各种不便或不安全的方面,需要进行调整、配置,本文将逐步讲述新机初始化配置的过程。

本文虽然较长,步骤较多,有些繁琐,但是一次配置并备份后,以后就可以直接用备份还原,省去了许多麻烦。文中的第 2、4、6 节是为了加强安全性,其余则为了让系统更加好用、方便,第8节安装的 Docker 则是本系列后续文章搭建各种服务的基础。

本系列文章将会搭建一个 TinyTinyRSS RSS服务、一个支持 Webdav 的 Nextcloud 网盘服务、一个管理电子书的 Calibre-web 网站。以上服务均在一台VPS服务器上,按照5刀每月的费用算,一年60刀(约380元)。而且上述服务均支持账号系统,可以多人使用。

本文中所用系统为: Debian 8 x64。之所以选择这个,纯粹是由于习惯而已。下面的过程在各个发行版上是相通的,具体的命令可能有所差异。非相关职业人员,抛砖引玉,多多交流。

1. 安装必要基础软件

一般情况下,新机中的初始账号为 root 账号,所以下列命令操作均默认为root账户下运行。

# 添加 backports 源,以便安装版本版本更高的软件
echo "deb http://deb.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list
# 更新并安装 sudo zsh git vim tmux
apt-get update && apt-get -y upgrade && apt-get -y install sudo zsh git vim tmux

软件介绍:

  • sudo :让普通用户执行一些或者全部的root命令的一个工具
  • zsh :一个强大的Shell软件,在兼容Bash的同时,提供了很多改进。 扩展阅读)
  • Tmux: 一个终端复用器软件,十分好用,必备。说两个场景:
    • 在用SSH登录VPS后,正在进行运行某个命令时,忽然需要运行另一个命令。不用Tmux的情况下,要么等待当前命令结束,要么再打开一个终端窗口并SSH登录后运行,十分不便。使用Tmux,可以直接在当前窗口新建一个新的工作区域,进行其他操作。
    • 在SSH登录后,如果发生连接突然中断的情况,不使用Tmux时需要重新登录后再次手动回到之前的工作目录,可能还需要重新运行命令查看一些东西;使用Tmux,可以直接恢复到之前的工作情况(目录、环境、运行历史等)。

2. 新建普通用户

直接使用root账户操作是不安全的,需要新建普通账户以在日常使用。

# 参数说明:
# -m 创建用户的主目录,如 /home/xxx
# -g 指定用户所属的群组
# -G 指定用户所属的附加群组,将新用户加入 sudo 群组中,以获得 root 权限
# -s 指定用户登入后所使用的shell。注意使用 /bin/bash 之类的路径,而非 /usr/bin/bash
useradd -m -g users -G sudo -s /bin/zsh NewUserName
# 设置密码
passwd NewUserName

下面为两种赋予普通用户执行root命令权限的方法,两者等效,仅为说明,不需要做。

## 方法一:
## 将用户加入sudo群组中
usermod -a -G sudo NewUserName
# 这是由于 `%sudo   ALL=(ALL:ALL) ALL` 在 /etc/sudoers 中,使得 sudo 群组具有 root 权限。

## 方法二:
## 运行`visudo`, 找到 `root ALL=(ALL:ALL) ALL`, 然后添加:
NewUserName ALL=(ALL:ALL) ALL
# 这是直接赋予新用户权限

3. 配置 Zsh

Oh-My-Zsh 是一套由社区驱动开发的Zsh配置方案,部署简单、开箱即用,拥有140套主题、200多个可选插件。

# 切换到新用户
su NewUserName
# 进入用户目录
cd ~
# 安装
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

编辑 ~/.zshrc,以确保以下两行的存在

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

登出账号

exit
exit
exit

4. 配置 SSH 密钥

一般使用密码登录 VPS,存在被暴力破解和密码泄露的隐患,可以看下这篇报道,所以应采用密钥登录。
以下两种方法是等效的,需要之前已经生成自己的 SSH 密钥,都是在未登录 VPS 的情况下执行:

## 方法一:
## 如果没有 ssh-copy-id 命令就用方法二
ssh-copy-id "NewUserName@123.45.56.78 -p 12345"
## 方法二:
cat ~/.ssh/id_rsa.pub | ssh NewUserName@123.45.56.78 -p 12345 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

再次登录: ssh NewUserName@123.45.56.78 -p 12345
编辑 /etc/ssh/sshd_config
确保一下几行的存在:

Protocol 2
# 自定义 SSH 端口
Port 12345
# 禁止root登录
PermitRootLogin no
# 禁止空密码
PermitEmptyPasswords no
# 禁止密码登录
PasswordAuthentication no

重启 SSH 以生效:sudo systemctl restart ssh

简要说下密钥登陆的原理,首先需要先说下其中用到的不对称加密(一枚公钥和一枚私钥),公钥公布,私钥自己保存。

  • 使用公钥加密的内容,只能用对应的私钥解密。如果别人使用你公布的公钥加密了内容,那么只有你能用私钥解密获取其中信息,这就确保了信息的安全。
  • 使用私钥加密的内容,只能用对应的公钥解密。如果你使用私钥加密信息后发布,别人只能用对应的公钥解密,这就能确保信息是你发布的,也就完成了信息发布者身份的认证。

使用密钥登录的原理为:用户首先生成一对密钥——公钥和私钥。然后将公钥添加到VPS的某账户中。之后,当用户登录该账户时,VPS的系统会生成一段字符发送给用户,该用户的系统以私钥加密该字符串后发回。然后VPS系统以公钥进行解密,如果解密结果正确,则可确认登录者为用户本人,则允许连接。可以看到,这个过程中没有固定的密码传输,也就避免了密码的泄露和暴力破解。

5. 配置 Vim

该配置是针对服务器编制的版本,没有使用插件,较为轻量级。之所以保存在/etc/vim/而非用户主目录下,是为了在使用sudo vim的root权限命令时也能使用该配置。而保存为vimrc.local文件,则是为了在vim升级时不会被覆盖掉。

sudo wget -O /etc/vim/vimrc.local https://raw.githubusercontent.com/wklken/vim-for-server/master/vimrc

设置 VIM 为默认编辑器:
手动选择设置 sudo update-alternatives --config editor,或者
直接设置: sudo update-alternatives --set editor /usr/bin/vim.basic

6. 配置 Fail2ban

顾名思义,Fail to ban,该软件通过扫描系统日志,检测到多次连接或登录失败的疑似入侵系统的行为时,就自动屏蔽其IP地址,禁止其再次尝试,以确保系统安全。

sudo apt-get -y install fail2ban
cd /etc/fail2ban
sudo cp jail.conf jail.local
# 避免修改 .conf 文件,软件升级会覆盖该文件。应编写相应的.local 文件,该文件中的配置将覆盖.conf中的相应配置项
sudo systemctl restart fail2ban

7. 配置 Tmux

如前所述,Tmux是经常远程操作VPS的必备软件,十分便利。网上有许多教程,可自行按需搜索学习。这里使用的是一个十分流行的 Tmux 配置,省去了自己探索和配置的麻烦。

# tmux version >= 2.1
cd
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .

安装 Powerline font: sudo apt-get install fonts-powerline
编辑.tmux.conf.local,对于其中的内容,注释下面的前四行,取消注释后四行:

# tmux_conf_theme_left_separator_main=''
# tmux_conf_theme_left_separator_sub='|'
# tmux_conf_theme_right_separator_main=''
# tmux_conf_theme_right_separator_sub='|'
tmux_conf_theme_left_separator_main=''  
tmux_conf_theme_left_separator_sub=''   
tmux_conf_theme_right_separator_main='' 
tmux_conf_theme_right_separator_sub=''

8. 安装 Docker

Docker是个好东西,快捷、干净,满足了我又懒又有些(系统干净)强迫症的需求。如果把以前一步步手动地安装软件,比作一件件地组装零件,那么使用Docker就相当于,直接把一个组装好的整体拿过来接通电源即可使用。
对于一个常常使用VPS的人而言,Docker 和 Tmux 都属于必备的工具。想要学习 Docker,可以看 《第一本Docker书 修订版》
这里使用的是Docker官方维护的一键安装脚本,方便快捷,安装的版本较新。

# 安装 Docker
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh

# 安装 Docker-compose,这是一个 Docker 批量部署、管理工具,在上面的书中有章节介绍。
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

9. 备份

终于,配置完毕。这时候需要对VPS系统进行镜像备份,主要是为了:

  • 在折腾出问题、或想要重装时,直接使用镜像恢复。
  • 如果新建另外的VPS主机,可以直接使用该镜像部署,免去新机配置的麻烦。

老司机区别于新手的一个标志就是 善用备份,避免无用功,无论是对于本文中的VPS系统,还是平时的 Windows、Mac 系统。
新机配置好了,接下来就该实际用起来了,且听下回分解。