跳到主要内容

VPS 新手上路

购买了 VPS 以后,首先我们需要为其安装一个系统,常见的选择主要有 CentOSDebian 两种。安装的过程通常都是一键完成,无需赘述。但是系统安装完成之后,还需要一些初始化的配置步骤,才能保证我们服务器的安全和稳定,为我们接下来的使用打下坚实的基础。下面我就以 CentOS 7 为例,为大家一一介绍这些步骤(如有遗漏,欢迎留言补充)。

第一步:Root 登录

通常我们可以在 VPS 服务提供商的网站上使用网页版的 shell 工具直接登录到服务器,也可以使用 SSH 命令行工具,或者可以使用 PuTTY/Bitvise SSH Client 这样的第三方工具,根据 VPS 服务提供商给予我们的 IP 、端口、密码,使用用户名root登录。

注意

root 用户具有系统最高权限,一旦被不怀好意的人获取到你服务器的 root 用户权限,他就可以读取/修改/删除系统中的任何文件,或者用你的服务器做任何事情(比如挖矿、发送诈骗邮件等)。

第二步:创建新用户

root 用户的特权既带来便利性,也同时带来危险性。因此我们要采取措施限制 root 用户的使用。

首先为你自己创建新的用户,这里我们创建一个名为"rookie"的用户,你可以用自己选择的名字替换它:

adduser rookie

接着为这个用户设置密码:

passwd rookie

在命令行中先输入一遍密码,再重复输入一遍确认。

这样,这个名为”rookie”的用户就创建完成了。

第三步:赋予 Root 权限

上一步创建的用户没有 root 权限。但在日常使用中,经常会有需要 root 权限才能执行的操作(比如安装程序、修改配置等)。为了避免登出再登入来回切换用户,我们可以赋予这个用户 root 权限,以便在需要时使用 su/sudo 命令切换到 root 用户。

CentOS 7 中,我们通过将用户添加到 wheel 组,来赋予它 root 权限。

gpasswd -a demo wheel

现在,这个用户可以使用 root 权限执行命令了。

第四步:设置公钥认证(推荐)

SSH 用户名+密码的认证方式可能被暴力破解,使用 SSH 密钥认证可以进一步加强安全性。

生成密钥对

在你本地机器(非服务器)的 terminal 或者 cmd 等命令行工具执行如下命令:

ssh-keygen

假如你的本地机器的用户名为"localrookie",你会看到类似如下输出:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/localrookie/.ssh/id_rsa):

按回车确认或者输入另一个文件路径。

接下来,你可以选择是否设置密码。如果设置了密码,今后在使用私钥登录的时候,还需要输入该密码。

密码设置完毕后,密钥对就在之前指定的路径下生成了,包含一个私钥文件 id_rsa 和一个公钥文件 id_rsa.pub

注意

保管好你的私钥,如果泄露了应当立即重新生成密钥对并部署新的公钥到服务器。

部署公钥到服务器

密钥对生成后,我们需要把公钥配置到服务器端,这样我们的本地机器就可以通过SSH使用私钥进行认证,登录到服务器。

选择1:使用 ssh-copy-id 自动部署

如果你的本地机器上安装了 ssh-copy-id 脚本( Windows 下没有),你可以直接在你的本地机器命令行工具运行以下命令(用户名"rookie"和 SERVER_IP_ADDRESS 替换为你自己的):

ssh-copy-id rookie@SERVER_IP_ADDRESS

在接下来的 prompt 步骤中输入密码后,你的公钥就会被部署为服务器的 .ssh/authorized_keys 文件。

选择2:手动部署

在服务器端的 shell 中输入以下命令切换为刚创建的用户:

su - rookie

现在你在shell的当前路径会被切换到该用户的 home directory 。

在当前目录下创建 .ssh 目录并修改权限:

mkdir .ssh
chmod 700 .ssh

接着在 .ssh 目录下创建一个名为 authorized_keys 的文件:

nano .ssh/authorized_keys

把公钥 id_rsa.pub 的内容复制到该文件中,保存退出。( nano 是 Linux 上的命令行文本编辑器,具体使用方式请自行搜索)

然后修改该文件的权限:

chmod 600 .ssh/authorized_keys

接着执行以下命令回到 root 用户:

exit

第五步:配置 SSH Daemon

现在我们已经创建了一个拥有 root 权限的新用户,接下来我们需要修改服务器的 SSH daemon 配置,允许新用户使用 SSH 远程登录,并禁止 root 用户使用 SSH 远程登录。

为什么要这么做呢?因为 root 用户的用户名是固定的,并且使用密码认证登录,攻击者只需暴力破解密码这一层防护即可;而如果使用我们新创建的用户认证登录,我们的用户名对于攻击者而言也是未知的:如果使用用户名+密码认证,攻击者需要暴力破解账号和密码的组合,难度大大增加;而如果使用用户名+密钥认证,攻击者还需要获取到我们的私钥才行,难度进一步加大。

在服务器端 shell 中输入以下命令编辑 SSH daemon 配置文件:

nano /etc/ssh/sshd_config

找到 PermitRootLogin 这一行,将"yes"改为"no";找到 AllowUsers 这一行(如果没有就添加),添加我们之前创建的新用户名。最终结果如下:

PermitRootLogin no
AllowUsers rookie

然后保存退出。

重启 SSH 服务来让修改的配置生效:

systemctl reload sshd

现在我们可以尝试使用新创建的用户来通过 SSH 远程登录到我们的服务器了。之后的步骤我们都以非 root 用户的身份来完成。

提示

为了防止把自己关在门外,我们先不登出当前的会话,另开一个命令行工具或第三方工具,使用新创建的用户来尝试登录。这样,如果有问题,我们就可以使用原先的会话来改正错误。

第六步:配置防火墙(推荐)

防火墙的作用是阻止所有对服务器服务/端口的访问,除了我们允许的之外。CentOS 预装了防火墙 firewalld ,通过命令行工具 firewall-cmd 来进行控制。

提示

由于 firewalld 要开启后才能配置,开启后 SSH 的端口可能被关闭,导致无法连接服务器。 建议使用 VPS 服务提供商的网站上提供的 root shell 工具进行防火墙配置,或者在开启 firewalld 之前使用 firewall-offline-cmd 进行配置。

开启防火墙服务 firewalld

sudo systemctl start firewalld

将防火墙服务设置为开机运行:

sudo systemctl enable firewalld

设置允许 SSH 服务:

sudo firewall-cmd --permanent --add-service=ssh

如果你的 SSH 服务使用的不是默认端口(22),则改用如下命令(端口改为你自己的值):

sudo firewall-cmd --permanent --add-port=4444/tcp

其他需要使用的服务也是同样操作,例如 httphttpssmtpntp 等:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=smtp
sudo firewall-cmd --permanent --add-service=ntp

查看所有可用的服务:

sudo firewall-cmd --get-services

查看服务器当前活跃的端口:

sudo netstat -tulnp

查看当前配置的结果:

sudo firewall-cmd --permanent --list-all

确定配置没问题后,重新加载配置,使其生效:

sudo firewall-cmd --reload
提示

今后如果你要使用新的服务或者开启新的端口,都要在防火墙添加配置。

第七步:设置时区和时间同步(推荐)

保证服务器的时间准确,才能为我们后续的应用提供正确的服务。

设置时区

我们使用命令行工具 timedatectl 来设置时区。

查看当前设置的时区:

timedatectl

查看可用时区:

timedatectl list-timezones

设置时区:

sudo timedatectl set-timezone Asia/Shanghai

配置时间同步

我们使用 ntp 服务来同步时间。首先安装 ntp 服务:

sudo yum install ntp

然后运行该服务并设置开机启动:

sudo systemctl start ntpd
sudo systemctl enable ntpd
提示

别忘了在防火墙设置中添加允许该服务。

这样你的服务器就会自动校准时间了。

第八步:创建 SWAP 分区

内存(RAM)不够,磁盘(SWAP)来凑。创建一个合理大小的 SWAP 分区能够降低你的应用崩溃或进程被杀的几率,尤其是数据库应用。 SWAP 分区建议容量为 RAM 的 100%~200%。

查看系统是否已有 SWAP 分区:

swapon --show

如果没有,则先创建一个文件供 SWAP 使用:

sudo fallocate -l 1G /swapfile

修改该文件的权限,只有 root 用户可读写:

sudo chmod 600 /swapfile

SWAP 格式化该文件:

sudo mkswap /swapfile

使用该文件作为 SWAP 分区:

sudo swapon /swapfile

修改 /etc/fstab 文件,以便开机自动挂载该 SWAP 分区:

sudo sh -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'

总结

好了,一路过关斩将,完成这些步骤之后,我们的服务器就做好准备可以开始工作啦。无论是建站、科学上网,接下来还有更多好玩的东西等着你去探索。

参考