我的 Ubuntu Server Setup:基础篇

用 Ubuntu 有十年多了,近几年有什么项目需要用到 Server 的,基本上也都是直接用 Ubuntu,原因无它,熟悉+社区支持度。

每次去新设定一个 Ubuntu Server 的时候,总会做一些重复的动作,怪麻烦的。今天我就整理这么一篇《我的 Ubuntu Server Setup》,列一个我开启 Ubuntu Server 必做的一些操作。当然因为不同的云厂商提供的默认环境不一样,有些不是必做的。

至少在阿里云的主机上(他们的 Ubuntu 干净到啥都没有…),我都会做一遍这个操作。也算是借机讨论,看看大家有没有一些有意思的个人设定。

增加新用户,使其成为 root

大多数云主机在开启 Ubuntu 主机后,默认都是用 root 登录的,这里不得不赞一个 Google Cloud Platform,他们默认的帐户是在开主机时就可以确定的。

用 root 是危险的,所以我们要用下面指令创建一个普通用户:

adduser ubuntu

创建完这个用户后,也要用它来执行一些系统级动作,于是把它加进 sudo 群组,这样就可以用 sudo 命令了:

gpasswd sudo -a ubuntu

默认情况下,sudo 用户每次都是要输入密码的,如果你觉得麻烦,可以考虑关掉它。执行下面这条命令进行 sudo 配置文件编辑模式:

sudo visudo

把文中的

%sudo   ALL=(ALL:ALL) ALL

改成

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

这样,sudo 执行命令就再也不用输入密码了。不过建议还是保持密码。输入密码时好歹可以反悔…

配置默认的系统编辑器

在用上面 visudo 这个命令时,你可能会诧异:我明明是 vi,怎么进入 nano 来编辑配置文件了。这是因为 Ubuntu 系统默认的文件编辑器是 nano 而不是 Vim,那么怎么设置成 Vim 呢?

很简单,执行这条命令,选择 Vim,以后凡是自动调用编辑器的地方,都会用 Vim 啦。

sudo update-alternatives --config editor

配置 SSH 登录及 SSH Server 安全设定

前面我们已经创建好用户了,每次登录用户都要输入密码可不爽,现在我们给登录用户设置 SSH Key 来登录,这样就不用输入密码了。

执行下面的执行,建立 authorized_keys 文件,然后把自己电脑的 id_rsa.pub 复制进去。

mkdir -p ~/.ssh

touch ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

这样就可以用用 ssh xxx@127.0.0.1 来登录主机了。

安全性设定,我建议禁止 root 远程登录,然后能改端口的话也改端由。

于是编辑 SSH 配置文件:

sudo vim /etc/ssh/sshd_config

把 PermitRootLogin 设置成 no,用于禁止 root 登录:

PermitRootLogin no

把 PasswordAuthentication 设置成 no,禁止密码登录,更安全:

PasswordAuthentication no

改 Port 为其他数字,注意了,改成其他数字后,记得防火墙设置也要更新。

Port 22####

最后重启 SSH Server 生效:

sudo systemctl restart sshd.service

安装 Byobu

Byobu 是我超喜欢在 Server 上的工具,简单地来说它是一个 Tmux 的包装,默认就提供了一些比较精美的显示模式。

首先安装 Byobu:

sudo apt install byobu

然后启用 Byobu:

byobu-enable

这样操作后,以后每次 SSH 登录进主机后,就会进入 Byobu 这个漂亮的 Tmux 环境啦。

设置正确的 hostname

默认主机的 hostname 都是随机的或又土又长的,我通常会设置域名绑定的 hostname:

sudo vim /etc/hostname

设置完成成,记得也在设置上与 IP 对应的 hostname

sudo vim /etc/hosts

123.123.123.123       host.to.name

配置代理 proxychains

用过国内主机的朋友都知道,在国内的主机上更新国外的软件包(package)通常速度很慢,非常令人崩溃…于是我的解决办法不是换一个源,而是搭一个 Proxy,这里我用 Shadowsocks + Proxychains 的解决方案。

用 Shadowsocks 的 sslocal 运行起一个代理,然后用 Proxychains 用这个代理去为更新或安装软件包等去服务。

安装 Shadowsocks

sudo apt install shadowsocks

省去中间配置过程…大家根据自己的需要去配置出一个 config.json 文件,然后用下面的执行跑起 proxy:

sslocal -c config.json

安装 proxychains

sudo apt install proxychains

修改配置文件,设置成刚刚跑起的本地代理。

sudo vim /etc/proxychains.conf

改成比如 socks5 127.0.0.1 1080 这样的内容。

然后,再安装东西,比如安装 Docker,用加了 proxychains 的前缀在前面,就能超快啦。

sudo proxychains apt install docker-ce

安装 Docker

前面提到了 Docker 这东西,现在我部署 Web Server,基本上都是用 Docker 来了。虽然 Docker 的官网有写,不过每次去找还是挺麻烦的,我就写在自己的 Blog 里。官方地址:https://docs.docker.com/install/linux/docker-ce/ubuntu/

首先安装基本环境:

sudo apt install \
        apt-transport-https \
        ca-certificates \
        curl \
        software-properties-common

再安装 key:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

再增加 Docker 官方源:

sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable"

最后就可以安装 Docker 了,我一般也同时会用 Docker Compose,一起安装上去吧!

sudo apt update

sudo apt install docker-ce docker-compose

安装好 Docker 以后,记得将当前用户加到 docker 用户组里去(如果你不想每次都用 sudo 用 Docker 的话)

sudo gpasswd docker -a username

安装 command-not-found

很多服务器提供商可能会提供精简版本的 Ubuntu,于是一些实用的命令行工具并不会预装。比如 command-not-found,它可以当你在打命令时,提示对应的但没有安装的 package。

sudo apt install command-not-found

安装完后,就可以在使用命令行的过程中更加方便了。

安装 unattended-upgrades 来自动更新 security upgrade

通过 unattended-upgrades,可以使 Ubuntu 系统自动进行常规的安全相关更新,使系统一直保持 security。

sudo apt install unattended-upgrades

sudo dpkg-reconfigure unattended-upgrades

总结

安装好这些后,差不多算是完成我所满意的基本设定了。但还远远没完啊…比如安装 Git 之类的必备工具。

不知道大家在维护自己的主机时有没有做一些特别的设定,可以与我交流。

欢迎使用图拉鼎和他的团队开发的作品

效率控 - 聚合众多实用小工具

装机必备的高颜值工具箱,拥有超过 18 款工具,完成日常各类任务。支持 iPhone、iPad 和 macOS。

9 Comments

jonas

谢谢分享,反馈一个小问题:
「配置 SSH 登录及 SSH Server 安全设定」 第一段代码没有分行或者没有加&&。

tualatrix 回复 @jonas

啊~谢谢指出,是 Markdown 转换时出错了,我改改。

Zeo

我一般是拿到手一个新机子,先装oh my zsh.没别的原因,就是好用.😂

Jia

如果已经设置了 SSH Key:
那么建议 sshd_config 中禁用 PasswordAuthentication
禁止密码登陆以后,不禁用 root 登陆、不修改 SSH 端口也没有什么问题了,目前看到 Google Cloud Platform 的默认做法就是这样的。

tualatrix 回复 @Jia

谢谢补充,这个给漏了,确实要禁止密码登录。Google 默认这个弄得很好。

我曾经也写过一篇关于 centos 的: https://v2mm.tech/topic/106
此外关于防火墙配置,我推荐 configserver, 是 iptables 的封装,很好用。感谢推荐Byobu,我去试试 :)

博主有兴趣加入 V2MM 的专栏吗?见:https://v2mm.tech/category/46/blog
同是独立开发者,希望能与你交个朋友 :)

Docker建议也推荐下第三方源,国内一些Docker免费源还是很快的。

『安全性设定,我建议禁止 root 远程登录,然后能改端口的话也改[端由]。』

端口

> sudo apt-get install docker-ce

沒有 `docker-ce` 這個軟件包。我一般是 `sudo apt install docker-engine`

> sudo apt-get install docker-compose

這個指令會安裝一堆 python 的依賴包,我懷疑並不是官方的 docker-compose,而是一個 wrapper 的指令封裝。我一般是按照官方的做法來安裝:

sudo curl -L "https://github.com/docker/compose/releases/download/1.16.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

Leave a Comment