VPS 新手上路
购买了 VPS 以后,首先我们需要为其安装一个系统,常见的选择主要有 CentOS
和 Debian
两种。安装的过程通常都是一键完成,无需赘述。但是系统安装完成之后,还需要一些初始化的配置步骤,才能保证我们服务器的安全和稳定,为我们接下来的使用打下坚实的基础。下面我就以 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
其他需要使用的服务也是同样操作,例如 http
、https
、smtp
、ntp
等:
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'
总结
好了,一路过关斩将,完成这些步骤之后,我们的服务器就做好准备可以开始工作啦。无论是建站、科学上网,接下来还有更多好玩的东西等着你去探索。