上手Linux:禁用 root 用户,修改22端口,使用 ssh 登录

简介: 本文介绍了在 linux 系统中,如何禁用 root 用户登录,修改默认的 22 端口号,以及设置只能使用 SSH 秘钥登录的方式,从而在一定程度上提高了系统的安全性。

sshd 服务

在 Linux 操作系统上,所有的软件都是以进程的方式提供服务。要使用一个命令,必然有一个在后台运行着的服务。比如使用 systemctl 命令,对应的就是 systemd 服务。而使用 ssh 方式登录,背后就是 sshd 服务。

sshd 服务使用 SSH 协议,可以用来进行远程控制, 或在计算机之间传送文件,相比较之前用 telnet 方式来传输文件要安全很多,因为telnet使用明文传输,ssh是加密传输。

本文,来讲述一些 sshd 服务的配置,帮助打造一个更安全的服务器环境。

拿到新服务器的第一步,出于安全考虑,先禁用掉 root 用户修改默认的 22 端口号

这是因为所有 linux 系统默认的管理员用户名就是 root默认的 SSH 协议通信端口就是 22

如果有黑客尝试暴力破解,又如果你的口令设置的很简单,那么很容易就会置于不安全的环境。

创建一个普通用户,并实现 SSH 免密登录

创建新用户

先使用 root 用户登录到服务器,使用 useradd 命令创建一个用户账号:

# 创建一个新用户
useradd kunwu

# 给用户设置密码。注意密码中不能包含用户名。
passwd kun

image-20220810150227964

使用 useradd 命令创建的用户帐号,会保存在 /etc/passwd 文件中。

查看下刚才新添加的用户的记录:

[root@ecs-221238 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...... 
kunwu:x:1000:1000::/home/kunwu:/bin/bash

此时在本地可以以 kunwu 的身份,去登陆服务器了,但是还是需要密码:

image-20220810151342524

本地计算机创建 SSH 密钥并部署到服务器

如果本地电脑已经生成过 SSH 密钥,可以直接用。如果还没有,下面的步骤都可以参考上文。

在本地计算机,生成一对 SSH 密钥:

ssh-keygen -t rsa

将 SSH 公钥,以 kunwu 的用户身份部署到服务器上,配置免密登录:

ssh-copy-id kunwu@<服务器 IP>

image-20220810151608370

之后,在本地计算机中,就可以使用 kunwu 进行免密登录了:

ssh kunwu@<服务器 IP>

image-20220810151733161

现在可以使用一个 普通用户登录实现免密登录了,但是普通用户不具备管理员权限,所以接下来要给这个普通用户赋予管理员的权限。

配置 kunwu 用户支持 sudo 命令

使用 root 用户登录服务器,配置 kunwu 支持 sudo 命令

vim /etc/sudoers

找到 "Allow root to run any commands anywhere "这一行:

image-20220810152108910

i 进入编辑模式,会提示该文件只读,是否确认修改:

image-20220810152220141

继续修改,新添加一行配置:

image-20220810152301892

然后保存退出,会再次提示是只读文件,要使用 ! 强制保存:

image-20220810152407849

image-20220810152453608

到这里,就创建好了一个具有管理员权限的用户。

本地电脑使用 kunwu 用户登录,尝试使用 sudo 命令。

普通用户是无法访问 root 目录的:

image-20220810152705580

使用 su 命令切换为管理员身份,切换时是需要输入用户密码的:

su - kunwu

image-20220810152857341

现在 kunwu 就具备了 root 用户的权限了。

修改 sshd 的配置

现在到了重头戏了。

使用 root 用户,编辑 sshd 服务的配置文件:

vim /etc/ssh/sshd_config

主要修改三个地方:

  1. 禁用 root 用户登录。PermitRootLogin no
  2. 修改 22 端口为其他。Port 23456
  3. 禁用密码登录。只支持受信任的机器通过 SSH 公钥免密登录。PasswordAuthentication no

找到这几个地方,打开注释并修改掉:

image-20220810154330782

image-20220810154247083

然后保存退出。

一般情况下,个人的服务器不需要这么严格的配置,难免有使用其他机器登录服务器的时候,所以我只修改了禁止 root 登录和端口号,并没有禁止掉使用密码登录。这个配置视需求而定。

重启 sshd 服务

修改完配置,需要重启 sshd 服务。

systemctl restart sshd

注意事项:修改 sshd 配置文件时,一定要小心。如果语法出现错误,sshd 服务会退出,此时只能去云服务器控制台中远程登录解决了。

这之后,需要重新配置一番,到云服务器控制台安全组中开放新的23456端口,并且以后再登录服务器,只能使用 kunwu 用户了

在使用 ssh 命令时,需要通过 -p 来指定新的端口号了:

ssh kunwu@<服务器 IP> -p 23456

image-20220810160003494

使用 root 用户,或者使用默认的 22 端口号,都会报错:

image-20220810160116846

这样,基本上就避免了黑客通过暴力破解的方式,使用 root 用户通过 22 端口登录服务器。

小结

对于个人使用的服务器,一般设置一个新的端口号,禁止使用 root 用户登录就足够了。

设置的过程有些繁琐,需要在多个环境中,多个用户身份中切来切去,一定要耐心。

目录
相关文章
|
2月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
166 2
|
14天前
|
Linux Python
用python扫描linux开放的端口(3种方式)
这篇文章介绍了三种使用Python实现Linux端口扫描的方法,包括基础版端口扫描、全端口扫描和多线程扫描技术。
31 15
|
2月前
|
安全 Linux
Linux查看和剔除当前登录用户详细教程
Linux查看和剔除当前登录用户详细教程
36 0
Linux查看和剔除当前登录用户详细教程
|
2月前
|
监控 网络协议 Linux
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
|
2月前
|
安全 Linux 数据安全/隐私保护
驾驭Linux的权力:Root与Sudo
在 Linux 系统中,权限管理至关重要,Root 用户与 Sudo 命令为核心组件。Root 作为超级用户,拥有最高权限,可执行任意命令,但也带来较高安全风险,建议仅在必要时使用。Sudo 则允许系统管理员授予普通用户临时的 Root 权限以执行特定命令,提升了系统的安全性和管理灵活性。通过合理配置 Sudoers 文件,可以实现对用户权限的精细化管理。综合运用 Root 和 Sudo 可确保系统的安全稳定运行。
30 1
|
2月前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
2月前
|
JavaScript Linux API
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
|
2月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Linux VM使用6380端口(SSL方式)连接Azure Redis (redis-cli & stunnel)
【Azure Redis 缓存】Linux VM使用6380端口(SSL方式)连接Azure Redis (redis-cli & stunnel)
|
2月前
|
网络协议 Ubuntu Linux
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
|
2月前
|
监控 网络协议 Linux
在Linux中,如何使用 tcpdump 嗅探 80 端口的访问看看谁最⾼?
在Linux中,如何使用 tcpdump 嗅探 80 端口的访问看看谁最⾼?