一. 前言
最近刚买了一台云服务器,在做服务器配置的时候,掏出多年前的笔记开始操作,虽然有些操作我自己知道的,但是确实笔记上的东西有些地方过时了。所以我就在想,嘿,为什么不重新整理下我的笔记和一些新的点,写一波新的笔记呢。
因此,这是一个分享服务器初始化操作的系列。由于个人倾向于使用Ubuntu,所以本系列中文章都将使用Ubuntu 22.04 LTS(当前最新LTS版本)来分享,若读者使用的是其它Linux系统,也都有相同作用的相应操作,还需自行查阅一下。
那么,下面进入本篇文章正题。
当我拿到一个新的服务器后,要做的第一件事就是进行安全初始化配置。服务器在公网被各种扫描和爆破都是家常便饭了,服务器的安全是极其重要的事!
当前我的环境是一台全新原生的ubuntu 22.04 LTS,那么咱们一步步来吧。
二. 创新普通用户
当然这一步是可选的,有的时候默认就存在一个普通用户账号和root账户,比如云服务。
此处,我首次进入服务器,只有一个root用户,所以我需要创建一个普通用户账户来进行日常操作。
对于服务器,日常操作还是建议使用普通用户来登录和操作,不要图省事直接使用root用户!
首先,创建一个普通用户hunter
。
bash
$ adduser hunter
Adding user `hunter' ...
Adding new group `hunter' (1000) ...
Adding new user `hunter' (1000) with group `hunter' ...
Creating home directory `/home/hunter' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for hunter
Enter the new value, or press ENTER for the default
Full Name []: hunter
Room Number []: hunter
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
此时,已经创建成功,我们可以看一下/home
目录下,已经存在hunter
目录了。
bash
$ ls /home/
hunter
接着,添加sudo权限。
bash
$ usermod -aG sudo hunter
至此,已经创建普通用户完成。
最后,直接用普通用户hunter
去登录,输入其密码,即可登录成功,并且拥有sudo权限。
三. 添加登录密钥
SSH 密钥登录是一种通过 SSH 协议连接到远程系统的方式,它使用一对公钥和私钥进行身份验证,而不是依赖于用户名和密码,其安全性更高。
1. 生成密钥
密钥需要在自己本地电脑生成并存储,并且一个公钥可以给多个服务器使用。此处,生成一个密钥,名为id_test_rsa
。
bash
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_test_rsa -C "<your-email>"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/kuari/.ssh/id_test_rsa
Your public key has been saved in /Users/kuari/.ssh/id_test_rsa.pub
The key fingerprint is:
SHA256:ocGd0s+yW1v5/NjkojnzJtHmFrmfH6iV0Y5e8+HYTjU kuari@justmylife.cc
The key's randomart image is:
+---[RSA 4096]----+
| |
| . o . |
| + = |
| + + . |
| . S o o E.|
| o ..@ o|
| . . oO X.|
| o oB+%=*|
| . ..o@*OO|
+----[SHA256]-----+
其中,需要关注的是:
- -f参数 :
-f
参数指定密钥的名字和位置,一般位置可以就放在~/.ssh
下,名字自定义。 - -C参数 :
-C
参数指定邮箱,为注释用,你会在公钥中看到。当服务器公钥多了以后,就可以靠邮箱来区别。 - 密钥使用密码:可以从执行过程中看到,有一个输入密码的过程,这个是配置密钥的使用密码。也就是说,登录服务器不用输入密码,因为密钥配对完成了验证,但是当使用该密钥连接时,需要输入该密钥的使用密码。因此,不用记多个服务器的密码,仅仅只要记一个密钥的使用密码即可。当然,也可以不设置,直接回车跳过。
执行完成后,将会生成两个文件,分别是一个私钥和一个公钥:
bash
$ ls ~/.ssh
id_test_rsa # 私钥
id_test_rsa.pub # 公钥
2. 服务器放入公钥
在服务器上,此处使用普通用户hunter
(或者任何你需要的账户)登录。此处,会发现在~
家目录中不一定有.ssh
文件夹。
没关系,直接配创建即可,如何你有,那么就跳过。此处,还需要创建公钥需要的文件~/.ssh/authorized_keys
,该文件也不一定有,没有也直接创建:
bash
$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys
创建完文件后,在本地复制刚刚创建的密钥中的公钥匙的内容,可以使用cat
、vim
等,直接复制即可。
然后,粘贴到服务器的~/.ssh/authorized_keys
文件中,一行一个公钥。粘贴完就像这样:
bash
$ cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAA<省略中间>8n7qWN8= <your-email>
3. 本地配置密钥登录
此时,使用ssh登录确实可以指定密钥登录,但是加一个配置文件可以省很多事。
直接打开(没有就创建)~/.ssh/config
文件:
bash
$ vim ~/.ssh/config
添加内容,如下是格式:
xml
Host <自定义服务器名字>
HostName <服务器公网ip或域名>
User <登录用户名>
Port <登录端口>
IdentityFile <私钥文件地址>
按照如上格式,添加内容:
javascript
Host baidu.com
HostName 192.168.10.10
User hunter
Port 22
IdentityFile ~/.ssh/id_test_rsa
那么保存一下,就配置好了。
此时,很快啊,直接使用ssh baidu.com
,就可以直接连接了,用户名和密码什么的就完全不需要了!
四. 关闭密码登录
该步骤是可选的,但是你也不想每次打开登录日志,发现ssh端口被疯狂爆破吧?服务器在公网上的话,这些都是日常了...
关闭密码登录是直接极端堵死,安全性更高。
打开ssh配置文件:
bash
$ vim /etc/ssh/sshd_config
添加或修改配置为PasswordAuthentication no
。
然后重启ssh服务:
bash
$ systemctl restart ssh
六. 更改默认ssh端口
同样地,为了提高安全性,可以将默认的ssh端口更改为高端口。很多自动化攻击工具和脚本都默认扫描22端口来找寻SSH服务,改为高端口能有效减少这种无目标的攻击尝试。但是,这也不是绝对的,对服务器的端口进行扫描,也是可以扫描出ssh端口的。所以,更改默认ssh端口,只能避免部分恶意扫描和ssh登录。后续文章将来继续针对这个问题来分享一些操作。
Linux默认的ssh端口是22,此处将其改为高端口,比如9527。/笑
需要提醒一下,在执行如下操作前,请确保你的服务器的防火墙、安全组规则配置等等对你需要操作的高端口比如9527是开放的。以前我就干过这种蠢事(个人服务器),改了ssh端口后退出了,结果改后的ssh端口根本没开放...
首先,打开ssh配置文件:
bash
$ vim /etc/ssh/sshd_config
接着,找到#Port 22
这一行,取消注释(删除前面的#),并将22更改为希望使用的端口号,此处使用9527:
yaml
Port 9527
最后,重启一下ssh服务:
bash
$ systemctl restart ssh
此处,还需要改一下文章上述提到的本地的ssh配置文件,将Port
ssh端口改成新的端口。
此时,默认的ssh端口22就没有任何服务了。
七. 结语
本篇文章分享了拿到服务器后的安全初始化操作,除此以后,还需要注意的是对于操作系统的版本的更新要及时,特别留意一些版本的安全补丁。
本系列文章中,我将继续分享关于服务器初始化的操作,除了提升服务器的安全性,还有进一步地提升安全操作、提升服务器的操作便捷性、服务器的简单性能监控和异常报警等。