解决腾讯云轻量自带Ubuntu镜像不好使的问题
条评论之前腾讯云搞了个轻量服务器免费升配活动,配合学生优惠,折合 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 | To run a command as administrator (user "root"), use "sudo <command>". |
我们试一下能否正常使用 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 网络,也不应该关闭,因为某些应用可能需要这个协议。关闭本来不该关闭的功能,只会造成兼容性问题,给用户带来困扰。
希望某些云服务商把精力放在对的地方,不要把系统瞎改一通,没有任何好处,只能让用户难受。