之前腾讯云搞了个轻量服务器免费升配活动,配合学生优惠,折合 432 元可以买到 4 年 2C4G6M 的国内机器,非常划算。

我装的是 Ubuntu 20.04 系统,ssh 连进去,随便敲敲就发现很多不好使的地方。

自带 Ubuntu 系统不好使的地方

bash 颜色和标题

首先是颜色,bash 默认会使用彩色输出,这样可以很清晰地辨认出当前登录的用户名,以及是从哪里开始执行一个命令的,但是腾讯云的系统却只显示默认颜色,如图。

此外,正常安装的 Ubuntu 系统 ssh 上去,标题栏上会显示当前目录,或者正在执行的命令,而腾讯云的系统并不会显示。

无法使用别名

此外,当我尝试执行 ll 时,腾讯云的系统会提示 ll: command not found。这可能是缺少 .bashrc 导致的。

此后,我也安装了 acme.sh。用官方脚本安装完以后,按说应该自动创建 acme.sh 的别名,但却没有,不知道哪里出了问题。

其他问题

这个系统还有别的问题,比如第一次 apt update apt upgrade 时的巨量冲突、默认 motd 不包含可以升级的软件包数量等。这些问题我暂时还没有解决,但影响也不如上面两个严重。

尝试自己安装系统

诚然,我可以搜索我遇到的这些问题,然后一个个解决,但是这样太麻烦了,而且谁知道有没有别的暗坑,所以我决定重装系统。

由于腾讯云轻量不支持自己上传安装映像,我决定用以前看到的一个脚本重装。这个脚本本来只支持到 Ubuntu 18.04,我进行了改造,现在可以安装 Ubuntu 20.04 了。

结果我没有装成功。虽然腾讯云好像是基于 KVM 的,但如果服务商改了虚拟机的不知道什么地方,这个脚本还是很容易失败的。

创建一个新用户绕开问题

虽然没法完全解决,但我想,不用腾讯云已经建好的用户,而是自己建一个,会不会就没这问题了。

创建用户并赋予 sudo 权限

首先,添加用户,并按照提示设定密码,其余选项可以保持默认(留空)。以用户名为 txuser 为例,把下面命令中的 txuser 换成你想设置的用户名。

1
sudo adduser txuser

然后赋予 sudo 权限

1
sudo usermod -aG sudo txuser

这时候,该用户已经被赋予了 sudo 权限,但是每次执行命令时还是需要输入密码。为了免掉这一步,编辑(或创建)/etc/sudoers.d/90-cloud-init-users 文件,在里面加上这么一行。

1
txuser ALL=(ALL) NOPASSWD:ALL

切换用户并配置密钥(如有必要)

现在尝试切换到刚刚创建的用户

1
su - txuser

如果出现下面的提示,则说明配置正确。

1
2
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

我们试一下能否正常使用 sudo

1
sudo apt update

下面便可以尝试登录了,如果你想配置成密钥登陆,可以在这时配置。

用 ssh 登录并禁止默认账户登录

用你最喜欢的 ssh 客户端连上服务器,就可以用了。但是,为了安全起见,最好把之前的账户禁用或删除掉。

经过测试,如果自带账户你用的是密钥登录,那么无论用 sudo usermod -L ubuntu,还是 sudo passwd -l ubuntu 命令,都无法阻止登录。一个可行的办法是用 sudo usermod ubuntu -s /sbin/nologin 命令。

但是,你也可以用下面的命令直接删掉 ubuntu 用户。

1
sudo userdel -r ubuntu

总结

众所周知,云服务商经常对系统镜像进行修改和定制,比如把软件源换成自己的镜像等等。如果你用的是某些不知名服务商的系统,那可能会遇到各种奇奇怪怪的问题,甚至可能有安全隐患。相比之下,Azure 等大厂的系统用着就舒服得多。

我本以为,腾讯云好歹也是正经商家,系统怎么也不会烂到哪去,结果没想到,它好的不改,怎么坏怎么来。

我有给服务配置双栈支持的习惯。如果服务器没有 IPv6 地址,我一般用 HE 隧道 或者 6to4 隧道支持 IPv6。记得以前用阿里云,配完了隧道却发现不通,原因是阿里云服务器默认关闭了 IPv6 协议栈。IPv6 协议栈本来是默认开启的,即使没有 IPv6 网络,也不应该关闭,因为某些应用可能需要这个协议。关闭本来不该关闭的功能,只会造成兼容性问题,给用户带来困扰。

希望某些云服务商把精力放在对的地方,不要把系统瞎改一通,没有任何好处,只能让用户难受。