智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Linux服务器安全之用户密钥认证登录

Posted on   Bill Yuan  阅读(2249)  评论(0编辑  收藏  举报

转自:http://blog.sina.com.cn/s/blog_6561ca8c0102vb0d.html

一、 密钥简介

在Linux下,远程登录系统有两种认证方式:密码认证和密钥认证。密码认证方式是一种传统的安全策略。设置一个相对复杂的密码,对系统安全能起到一定的防护作用,但是也面临一些其他问题,例如密码暴力破解、密码泄露、密码丢失等,同时过于复杂的密码也会对运维工作造成一定的负担。

密钥认证是一种新型的认证方式,公用密钥存储在远程服务器上,专用密钥保存在本地,当需要登录系统时,通过本地专用密钥和远程服务器的公用密钥进行配对认证,如果认证成功,就可以成功登录系统。这种认证方式避免了被暴力破解的危险,同时只要保存在本地的专用密钥不被黑客盗用,攻击者一般无法通过密钥认证的方式进入系统。 

二、 服务器端密钥的生成和配置

OpenSSH的密钥认证体系有两种:RSA和DSA,分别是两种不同的加解密算法。T710服务器中管理员主要采用RSA密钥认证。用户在使用初始密钥登录后,可自行修改使用其他密钥认证方法。

服务器端RSA密钥的生成和配置步骤如下:

1.      在用户目录下新建一个.ssh目录,并将其目录权限改为700(仅用户自身有读写操作权限):

# mkdir .ssh

# chmod 700 .ssh

2.      进入.ssh目录,使用ssh-keygen命令生成rsa密钥对:

# ssh-keygen –t rsa  (一路回车即可)

3.      这时生成了两个文件:id_rsa和id_rsa.pub,其中前一个为私钥,后一个为公钥,公钥须保留在服务器上,私钥拷贝到客户端机器上

4.      在.ssh目录中新建一个文件名为:authorized_keys,将公钥内容拷贝到这个文件中,并将文件权限改为600(仅用户自身有读写权限)

# touch authorized_keys

# cat id_rsa.pub >> authorized_keys

# chmod 600 authorzied_keys

到此,服务器端的密钥设置完成,这里需注意要保证.ssh和authorized_keys都仅用户自身有写权限,否则验证无效,这也是系统处于安全性考虑做的设置。

三、客户端密钥的设置

首先我们需要将在服务器端生成的私钥id_rsa拷贝到要用来登录服务器的客户端电脑。接下来根据客户端电脑操作系统的不同进行分别说明:

 

Windows系统 

在Windows系统下,一般我们采用不同的X server工具来登录,需要先将私钥导入到登录工具的密钥管理器,建立一个新的连接,用户名和主机的填写与采用用户名密码登录一样,登录不再选择”Password”而是”Public key",User Name填写自己的登录用户名,User Key选择之前导入的服务器私钥 ,保存之后,即可无密码登录。

 

Linux系统

Linux系统下设置同样先将服务器私钥拷贝到客户端

1.      与服务器端一样,在用户目录下新建一个.ssh目录,并将其目录权限改为700(仅用户自身有读写操作权限):

       # mkdir .ssh

      # chmod 700 .ssh

2.      将私钥id_rsa拷贝到.ssh目录下,检查文件权限是否为600,如果不是,需要更改文件权限为600

      # mv  id_rsa  ./.ssh

      # chmod 600 id_rsa

3.      这时即设置完毕,输入ssh命令,即可直接连接到服务器,无需输入用户名密码

      # ssh –l 用户名 服务器IP

4.      如果需要从客户端通过密钥认证的方式登录不同的服务器,私钥的名称不能都是用id_rsa,这是可以在.ssh目录下建立一个config文件来进行区分,config文件权限同样设为600

      # touch config

      # chmod 600 config

5.      为config文件添加内容如下:

      User username      //username 填写自己的登录用户名

      Host server_IP   //设置服务器IP

      IdentityFile ~/.ssh/rsa_file   //rsa_file填写私钥名称

      Port 22

这样,用户可以将私钥id_rsa改为与config文件中irs_file同名的文件名,就可以匹配登录服务器了。

 

Linux禁止root账户远程登录

      Linux系统中,root用户几乎拥有所有的权限,远高于Windows系统中的administrator用户权限。一旦root用户信息被泄露,对于我们的服务器来说将是极为致命的威胁。所以禁止root用户通过ssh的方式进行远程登录,这样可以极大的提高服务器的安全性,即使是root用户密码泄露出去也能够保障服务器的安全。就下来,就由专业运营香港服务器、美国服务器、韩国服务器等国外服务器的天下数据为大家详细介绍如何禁止ROOT用户通过SSH方式远程登录。

首先创建一个doiido普通用户加入到相应的组

这里必须要新建一个用户,否则将会造成无法通过远程ssh登录服务器

# groupadd doiido

# useradd -g doiido doiido

更改用户 doiido 的密码

# passwd doiido

然后修改sshd_config文件

# sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

 

最后重启ssh服务

# service sshd restart

这样即使root用户密码泄漏,别人也无法通过root用户直接连接服务器。

(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2015-02-04 XCode工程中 Project 和 Targets区别
2015-02-04 iOS :undefined symbols for architecture x86_64
2010-02-04 需求随想
点击右上角即可分享
微信分享提示