背景
买了一台新的云服务器,拿到了root用户名和密码,记录下一些初始化工作
登录服务器
我用的是iTerm2,用root用户ssh登录服务器,如果是在新电脑上首次登录服务器的话,会提示服务器的指纹信息,让你确认是否继续连接,输入yes确认下,然后输入密码回车
密码正确登录成功之后,系统会在你电脑上保存服务器的公钥指纹信息(默认路径是~/.ssh/known_hosts),这样下次再登录这台服务器时,你的电脑发现这台服务器是老熟人,就不用确认了
❯ ssh root@123.123.123.123
The authenticity of host '123.123.123.123 (123.123.123.123)' can't be established.
ED25519 key fingerprint is SHA256:znxptixxxxxxxxxxxxxxxxxxx7w.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '123.123.123.123' (ED25519) to the list of known hosts.
root@123.123.123.123's password:
登录失败记录
如果有人尝试登录你的服务器失败的话,登录信息会告诉你从上次成功登录之后有多少次失败的记录(这里是47次),一般就是被扫描端口,尝试弱口令了。你可以用 lastb 命令查看之前登录失败的记录,失败记录太多的话会刷很久的屏,你可以使用 lastb | more 来分页查看登录失败记录
Last failed login: Thu Nov 23 10:31:50 CST 2023 from 1.2.3.4 on ssh:notty
There were 47 failed login attempts since the last successful login.
Last login: Wed Nov 22 23:03:04 2023 from 1.1.1.1
修改主机名
我有好几台服务器,登录之后为了避免混淆,一般会修改服务器的主机名: 即root@ 后面的 VM-4-2-centos
# 比如我改成 4c8g12m
[root@VM-4-2-centos ~]# hostnamectl set-hostname 4c8g12m
# 修改一下/etc/hosts里的主机名
[root@VM-4-2-centos ~]# sed -i 's/VM-4-2-centos/4c8g12m/g' /etc/hosts
# 然后重启一下服务器 生效
[root@VM-4-2-centos ~]# reboot -f
# 重启之后 再次ssh登录就显示修改之后的主机名(4c8g12m)了
[root@4c8g12m ~]#
新建用户
在Linux系统里,root用户拥有最高的权限。系统会无条件执行,即使你让它自我毁灭。切记不要执行以下命令
# 切记不要执行这条命令
[root@4c8g12m ~]# rm -rf /
因此为了减少误操作的风险,我们日常使用会新建一个普通用户,然后在需要root相关权限的时候,再临时提高权限
[root@4c8g12m ~]# useradd duoduo
这里添加了一个叫duoduo的用户名,背后默认建立一个叫duoduo的用户组,并且设置了用户目录是/home/duoduo
可以在/etc/passwd的最后一行看到新增的用户: duoduo
[root@4c8g12m ~]# cat /etc/passwd |tail -2
lighthouse:x:1000:1000::/home/lighthouse:/bin/bash
duoduo:x:1001:1001::/home/duoduo:/bin/bash
然后设置密码
[root@4c8g12m ~]# passwd duoduo
更改用户 duoduo 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 它基于字典单词
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@4c8g12m ~]#
我设置的密码比较简单,系统给了提醒,忽略,输入两次密码之后,设置成功
提升权限
给新用户一个提升权限的方式,即给sudo权限
# 第一种方式 使用 vim /etc/sudoers
#第二种方式 直接使用visudo 命令
然后模仿root 那一行,新增一行。多出来的NOPASSWD: 意思是当我使用sudo命令时,不需要输入密码
如果通过vim /etc/sudoers 方式修改文件,即使是root用户,再保存的时候:wq! 也要记得加上!,表示强制保存
安全防护
使用密钥登录
在你自己的电脑上使用 ssh-copy-id 命令,复制你的公钥到服务器的duoduo用户名下,默认会把公钥拷贝到服务器的 /home/你的用户名/.ssh/authorized_keys 文件里
❯ ssh-copy-id -i .ssh/id_rsa.pub duoduo@123.123.123.123
在服务器端修改sshd的配置,使支持密钥登录
[root@4c8g12m ~]# vim /etc/ssh/sshd_config
如果默认无法使用密钥登录,请打开此项配置;修改为yes 或者去掉前面的注释
PubkeyAuthentication yes
# 禁止密码登录
PasswordAuthentication no
# 禁止root登录
PermitRootLogin no
保存退出 :wq
重新加载下ssh的配置文件
[root@4c8g12m ~]# systemctl reload sshd
这个时候,你就可以直接使用指定密钥登录服务器,不需要输入密码
❯ ssh -i .ssh/id_rsa duoduo@123.123.123.123
[duoduo@4c8g12m ~]$
修改端口
为了防止服务器上无时无刻不在的恶意扫描,我们修改一下SSH默认端口,这里随机高位端口 22222
[root@4c8g12m ~]# vim /etc/ssh/sshd_config
# 为了防止被扫 修改一下默认端口,随机高位端口
Port 22222
保存退出 :wq
重新加载下ssh的配置文件
[root@4c8g12m ~]# systemctl reload sshd
为了更简单方便的登录,我在本地电脑的.ssh/config里配置了:
服务器的别名:4c8g
服务器的用户名:duoduo
服务器的端口:22222
服务器的IP:123.123.123.123
密钥的路径:~/.ssh/id_rsa
打开防火墙
如果你的云服务器厂商有防火墙的话,登录云厂商打开新端口(这里示例端口为:22222)的防火墙
以腾讯云举例:https://cloud.tencent.com/document/product/1207/44577
然后你就可以直接用服务器的别名登录服务器
❯ ssh 4c8g
Last login: Thu Nov 23 20:14:42 2023 from 1.1.1.1
[duoduo@4c8g12m ~]$
如果你的云服务厂商没有限制端口,但是你的服务器有设置防火墙firewall,可以自助打开对应端口,这里是centos7的操作方式
1.开启端口22222
[duoduo@4c8g12m ~]$ firewall-cmd --zone=public --add-port=22222/tcp --permanent
2.重启防火墙
[duoduo@4c8g12m ~]$ firewall-cmd --reload
3.查看已经开放的端口
[duoduo@4c8g12m ~]$ firewall-cmd --list-ports