likes
comments
collection
share

服务器初始化那些操作(一)——安全初始化配置

作者站长头像
站长
· 阅读数 5

一. 前言

最近刚买了一台云服务器,在做服务器配置的时候,掏出多年前的笔记开始操作,虽然有些操作我自己知道的,但是确实笔记上的东西有些地方过时了。所以我就在想,嘿,为什么不重新整理下我的笔记和一些新的点,写一波新的笔记呢。

因此,这是一个分享服务器初始化操作的系列。由于个人倾向于使用Ubuntu,所以本系列中文章都将使用Ubuntu 22.04 LTS(当前最新LTS版本)来分享,若读者使用的是其它Linux系统,也都有相同作用的相应操作,还需自行查阅一下。

那么,下面进入本篇文章正题。

当我拿到一个新的服务器后,要做的第一件事就是进行安全初始化配置。服务器在公网被各种扫描和爆破都是家常便饭了,服务器的安全是极其重要的事!

当前我的环境是一台全新原生的ubuntu 22.04 LTS,那么咱们一步步来吧。

二. 创新普通用户

当然这一步是可选的,有的时候默认就存在一个普通用户账号和root账户,比如云服务。

此处,我首次进入服务器,只有一个root用户,所以我需要创建一个普通用户账户来进行日常操作。

对于服务器,日常操作还是建议使用普通用户来登录和操作,不要图省事直接使用root用户!

首先,创建一个普通用户hunter

$ 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目录了。

$ ls /home/
hunter

接着,添加sudo权限。

$ usermod -aG sudo hunter

至此,已经创建普通用户完成。

最后,直接用普通用户hunter去登录,输入其密码,即可登录成功,并且拥有sudo权限。

三. 添加登录密钥

SSH 密钥登录是一种通过 SSH 协议连接到远程系统的方式,它使用一对公钥和私钥进行身份验证,而不是依赖于用户名和密码,其安全性更高。

1. 生成密钥

密钥需要在自己本地电脑生成并存储,并且一个公钥可以给多个服务器使用。此处,生成一个密钥,名为id_test_rsa

$ 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参数指定邮箱,为注释用,你会在公钥中看到。当服务器公钥多了以后,就可以靠邮箱来区别。
  • 密钥使用密码:可以从执行过程中看到,有一个输入密码的过程,这个是配置密钥的使用密码。也就是说,登录服务器不用输入密码,因为密钥配对完成了验证,但是当使用该密钥连接时,需要输入该密钥的使用密码。因此,不用记多个服务器的密码,仅仅只要记一个密钥的使用密码即可。当然,也可以不设置,直接回车跳过。

执行完成后,将会生成两个文件,分别是一个私钥和一个公钥:

$ ls ~/.ssh
id_test_rsa     # 私钥
id_test_rsa.pub # 公钥

2. 服务器放入公钥

在服务器上,此处使用普通用户hunter(或者任何你需要的账户)登录。此处,会发现在~家目录中不一定有.ssh文件夹。

没关系,直接配创建即可,如何你有,那么就跳过。此处,还需要创建公钥需要的文件~/.ssh/authorized_keys,该文件也不一定有,没有也直接创建:

$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys

创建完文件后,在本地复制刚刚创建的密钥中的公钥匙的内容,可以使用catvim等,直接复制即可。

然后,粘贴到服务器的~/.ssh/authorized_keys文件中,一行一个公钥。粘贴完就像这样:

$ cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAA<省略中间>8n7qWN8= <your-email>

3. 本地配置密钥登录

此时,使用ssh登录确实可以指定密钥登录,但是加一个配置文件可以省很多事。

直接打开(没有就创建)~/.ssh/config文件:

$ vim ~/.ssh/config

添加内容,如下是格式:

Host <自定义服务器名字>
      HostName <服务器公网ip或域名>
      User <登录用户名>
      Port <登录端口>
      IdentityFile <私钥文件地址>   

按照如上格式,添加内容:

Host baidu.com
      HostName 192.168.10.10
      User hunter
      Port 22
      IdentityFile ~/.ssh/id_test_rsa   

那么保存一下,就配置好了。

此时,很快啊,直接使用ssh baidu.com,就可以直接连接了,用户名和密码什么的就完全不需要了!

四. 关闭密码登录

该步骤是可选的,但是你也不想每次打开登录日志,发现ssh端口被疯狂爆破吧?服务器在公网上的话,这些都是日常了...

关闭密码登录是直接极端堵死,安全性更高。

打开ssh配置文件:

$ vim /etc/ssh/sshd_config

添加或修改配置为PasswordAuthentication no

然后重启ssh服务:

$ systemctl restart ssh

六. 更改默认ssh端口

同样地,为了提高安全性,可以将默认的ssh端口更改为高端口。很多自动化攻击工具和脚本都默认扫描22端口来找寻SSH服务,改为高端口能有效减少这种无目标的攻击尝试。但是,这也不是绝对的,对服务器的端口进行扫描,也是可以扫描出ssh端口的。所以,更改默认ssh端口,只能避免部分恶意扫描和ssh登录。后续文章将来继续针对这个问题来分享一些操作。

Linux默认的ssh端口是22,此处将其改为高端口,比如9527。/笑

需要提醒一下,在执行如下操作前,请确保你的服务器的防火墙、安全组规则配置等等对你需要操作的高端口比如9527是开放的。以前我就干过这种蠢事(个人服务器),改了ssh端口后退出了,结果改后的ssh端口根本没开放...

首先,打开ssh配置文件:

$ vim /etc/ssh/sshd_config

接着,找到#Port 22这一行,取消注释(删除前面的#),并将22更改为希望使用的端口号,此处使用9527:

Port 9527

最后,重启一下ssh服务:

$ systemctl restart ssh

此处,还需要改一下文章上述提到的本地的ssh配置文件,将Portssh端口改成新的端口。

此时,默认的ssh端口22就没有任何服务了。

七. 结语

本篇文章分享了拿到服务器后的安全初始化操作,除此以后,还需要注意的是对于操作系统的版本的更新要及时,特别留意一些版本的安全补丁。

本系列文章中,我将继续分享关于服务器初始化的操作,除了提升服务器的安全性,还有进一步地提升安全操作、提升服务器的操作便捷性、服务器的简单性能监控和异常报警等。