×

root权限可以随意更改系统的每一处地方,如果不小心被他人获得了root权限会带来严重的后果。

因此我们可以采取以下措施,如:

  • 更改登录密码,使用更多位数和特殊字符混合的密码,避免被轻易撞破;
  • 更改默认的ssh端口号,默认的22端口很容易被别人扫到;
  • 添加非root用户,并禁用使用root身份通过ssh登录;
  • 使用密钥(private key)登录。你可以选择这些方法组合来提升服务器的安全性。

更改SSH端口号

如果你使用的是VPS(虚拟私人服务器,Virtual Private Server),那么初始已经安装了SSH工具。如果你使用的是个人服务器,可能在安装系统后需要手动安装openSSH等工具。

通过MobaXterm,PuTTY,Termius等软件可以让我们较轻松地远程管理服务器,这些软件往往能同时让我们使用sftp直观地查看文件和互相传送文件。

在默认安装了ssh工具的个人系统上,如Windows 10 和 Mac OS,一开始我们甚至可以在终端里,使用服务商给的密码和默认的22端口直接连接上VPS。

命令语法如下:

ssh username@remote_host

你也可以指定使用-p来指定端口来登录

ssh -p port_number username@remote_host
如:ssh -p 22 [email protected]

使用终端ssh工具在输入登录密码时,你将看不到具体输入的位数。在登录成功后,我们需要更改远程服务器的ssh端口号来提升安全性。

在debian 中与 ssh 相关的配置文件储存在 /etc/ssh/sshd_config ,我们可以通过修改这个文件来实现我们想要的功能。你可以通过上述ssh工具中自带的sftp功能修改配置文件,也可以在远程服务器上使用 nano, vim, vi等文本修改程序。我主要使用nano 来修改文件,它提供了搜索功能。

nano /etc/ssh/sshd_config

在默认的配置文件中提供了许多被 # 注释的功能,你可以根据说明来了解每项具体的功能。

我们在nano 界面中使用快捷键 ctrl+w 进入搜索模式,此时输入 Port 并回车,并删除前面的# 取消注释,将端口改成一个较大的数值,但是需要确保不会与常用的端口冲突,如 80, 443, 25 等端口,建议取超过10000,但需要注意的是端口号是16bit, 意味着它的值最大时65535,不能超过这个值。

修改完成后使用快捷键 ctrl+o 来保存,再使用 ctrl+x 来退出,或者你也可以直接使用 ctrl+w 再输入 y 确认修改并退出。

在完成修改后我们需要使用以下命令让ssh程序重新启动加载新的配置文件:

systemctl restart ssh

systemctl是Systemd服务管理工具的一部分,用于控制Systemd系统和服务管理器。而Systemd是Linux系统上的一个初始化系统和系统管理守护进程,我们可以通过它来实现程序的开机自动启动和手动的重启等功能,而不需要专门输入一长串命令来控制某个程序。

常用的systemctl命令包括:

  • 启动服务systemctl start service_name.service
  • 停止服务systemctl stop service_name.service
  • 重启服务systemctl restart service_name.service
  • 查看服务状态systemctl status service_name.service
  • 在系统引导时启用服务systemctl enable service_name.service
  • 在系统引导时禁用服务systemctl disable service_name.service
  • 查看已启用的服务systemctl list-unit-files --type=service --state=enabled
  • 重启系统systemctl reboot
  • 关闭系统systemctl poweroff

!使用systemctl需要管理员权限,但是我们目前就是以 root 管理员身份登录的。

重启ssh程序后,我建议新开一个ssh连接而暂时不关闭目前的连接来进行测试,测试新的连接成功后再关闭原先的连接。

你还可以添加非root用户

禁用root用户远程登录并创建自己的账户后,那么别人需要同时知道登录你的服务器的端口号、账户名称和密码才能成功登录。但是同时,使用非root用户在进行关键系统操作时需要提权成管理员身份。

通过adduser 你可以添加自己想要的用户名称,并设置密码。

adduser user_name

在设置密码时,和输入登录密码一样,你将看不到具体输入的位数。在建立新用户后你可以测试以新用户身份连接主机。

成功建立新的用户后,我们需要安装能够为普通用户提权的工具 sudo

在 debian 上,我们通常使用 apt (高级包装工具,Advanced Package Tool)来安装各种程序。它是Debian及其派生系统(如Ubuntu)上用于程序包管理的工具,简化了从软件仓库编译安装、升级、配置和移除软件包的过程。但是通过apt 安装的程序版本通常受限,如果你需要特定的版本,或是有追加功能模组的版本,需要手动编译安装。在绝大多数情况下,使用apt 命令已经足够。

我们通过以下命令来安装:

apt update && apt install sudo

apt update 命令会从配置的仓库源中同步软件包索引列表,以了解有哪些更新可用。

apt install 则是安装程序的命令。&& 可以将两个命令按顺序一起执行。

还有一些常见的apt命令,如:

  • apt show package_name //显示关于指定软件包的详细信息
  • apt remove package_name //卸载指定的软件包,但保留配置文件
  • apt purge //卸载指定的软件包,并删除其配置文件
  • apt autoremove //自动删除系统上不再需要的依赖软件包
  • apt search keyword //搜索关键词获取软件包真实名称
  • apt list –installed //列出系统上所有已安装的软件包
  • apt list –upgradable //显示所有可升级的软件包
  • apt clean //清除本地下载的软件包文件,释放磁盘空间
  • apt upgrade //升级系统

键入visudo 回车,配置文件实际在 /etc/sudoers,但请通过visudo来修改。

User Privilege Specification下方添加 user_name ALL= (ALL:ALL) ALLuser_name 为你取的用户名,保存并退出。这样设置意味着你可以在命令前加上sudo获取管理员权限,但在执行指令时需要输入密码。

你也可以设置成 user_nameALL=(ALL) NOPASSWD: ALL ,在提权时不需要再使用密码。

  • 第一个括号内的ALL:指的是sudo可以切换到任何用户的身份执行命令
  • 冒号后面的ALL:这表示user_name可以模拟任何组身份执行命令。在大多数情况下,用户和组的区别对于使用sudo来说不是很重要,因此也设置为ALL
  • 最后的ALL:这表示user_name可以执行任何命令

禁用root用户远程登录

在确认上述步骤正确执行,你已成功建立了非root用户,能使用新建用户身份连接服务器,并能使用sudo命令成功提权,再执行接下来的步骤,否则你可能需要重新安装系统来重新获得管理员权限。

修改ssh配置文件,禁用root用户远程登录。

nano /etc/ssh/sshd_config

使用 ctrl+w 搜索 PermitRootLogin 将其修改为PermitRootLogin no ,保存文件并退出。

再使用命令让新配置生效。

systemctl restart ssh

使用密钥并禁用使用密码登录

你可以使用密钥来代替密码登录,密钥具有更强大的安全性,只要你的密钥文件不被泄露出去。

你可以在本机的终端中(已经安装了openssh的Windows 10),使用ssh-keygen 来生成密钥,默认会保存在你的C盘用户文件夹下~/.ssh/.ssh可能需要取消隐藏文件夹来查看,生成后将id_rsa.pub 公钥文件上传到服务器你登录的用户名文件夹下/.ssh内。

  • 可以不为密钥添加密码来实现只需密钥登录
  • 你可以使用-t选项指定密钥类型,常见的类型有rsadsaecdsaed25519等,ed25519 在更少bit下拥有更好的加密性能。
  • 使用-b选项指定密钥大小(位数)。
  • ssh-keygen -t rsa -b 4096 ,创建一个4096位的RSA密钥对
  • 使用-C选项为密钥对添加一个注释,通常是你的邮箱地址,这有助于识别密钥的用途或所有者
  • 你也可以选择在服务器上使用命令生成密钥,再将密钥文件,如id_rsa,传回本机
  • 你也可以使用其它工具来生成
  • 保护私钥:私钥是你身份验证的凭据。不要将私钥泄露给其他人,且避免无密码保护的私钥文件

在服务器拥有与你的密钥对应的公钥后,你可以将放在.ssh文件夹下公钥文件名修改成authorized_keys

我们继续修改/etc/ssh/sshd_config 文件,找到并取消注释AuthorizedKeysFile .ssh/authorized_keys ,并将PubkeyAuthentication值修改为yes

注意此时你需要添加使用sudo提权才能编辑配置文件。

sudo nano /etc/ssh/sshd_config

你也可以将文件名和配置文件内的公钥名称修改成自己想要的。

为什么.ssh/authorized_keys不使用绝对路径

使用相对路径(如.ssh/authorized_keys)而不是绝对路径有几个原因:

  1. 用户隔离:这种方式确保每个用户都有自己的authorized_keys文件,位于各自的主目录下。这样,用户就只能添加或删除自己的SSH公钥,而不能访问或修改其他用户的公钥。这对于多用户系统来说是重要的安全考虑。
  2. 灵活性和便捷性:通过允许每个用户管理自己的authorized_keys文件,系统管理员无需为每个用户手动配置或更新SSH公钥,用户可以自行管理自己的公钥。
  3. 简化配置:相对路径简化了SSH配置。因为如果使用绝对路径,每个用户的authorized_keys文件路径都不同,管理员需要为每个用户单独配置,这在管理上非常不方便。

将密钥导入到远程连接工具中,测试能使用密钥成功登录后,我们再禁用密码登录。

/etc/ssh/sshd_config 文件中找到 PasswordAuthentication 设置为 no

sudo systemctl restart ssh

使用命令使得配置文件生效。

Reference:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

Spamhaus数据库

Spamhaus提供了基于DNS的方式查询I...

读出全部

增加wordpress上传大小限制

默认设置下wordpress上传大小限制为2...

读出全部

使用curl命令发送邮件

通过curl来发送简单邮件,并提供了一个脚本...

读出全部

nsupdate使用方法

我们可以使用nsupdate命令来更新域名记...

读出全部

搭建从服务器

如果你有多个服务器,你可以尝试为域名解析搭建...

读出全部