远程访问及控制(下)

简介: 远程访问及控制(下)

构建秘钥对验证的SSH体系

       正如前面所提及的,密钥对验证方式可以为远程登录提供更好的安全性。下面将介绍在linux服务器、客户端中构建秘钥对验证SSH体系的基本过程。整个过程包括四步,首先要在SSH客户端以zhangsan用户身份登录创建密钥对,并且要将创建的公钥文件上传至ssh服务器端,然后要将公钥信息导入服务器端的目标用户lisi的公钥数据库,最后以服务器端用户lisi的身份登录验证。图示如下。

在客户端创建密钥对

       在Linux客户端中,通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为ECDSA或DSA(ssh-keygen命令的“-t”选项用于指定算法类型)。例如,以zhangsan用户登录客户端,并生成基于ECDSA算法的SSH密钥对(公钥、私钥)文件。

1.  [zhangsan@localhost ~]$ ssh-keygen -t ecdsa
2.  Generating public/private ecdsa key pair.
3.  Enter file in which to save the key (/home/zhangsan/.ssh/id_ecdsa):             //指定私钥位置
4.  Created directory '/home/zhangsan/.ssh'.
5.  Enter passphrase (empty for no passphrase):                                     //设置私钥短语
6.  Enter same passphrase again:                                                    //确认所设置的短语
7.  Your identification has been saved in /home/zhangsan/.ssh/id_ecdsa.
8.  Your public key has been saved in /home/zhangsan/.ssh/id_ecdsa.pub.
9.  The key fingerprint is:
10.  4d:e5:c6:54:e4:b1:db:21:a9:9d:86:17:38:af:d6:03 zhangsan@localhost.localdomain
11.  The key's randomart image is:
12.  +--[ECDSA  256]---+
13.  |            oo+  |
14.  |           =...o |
15.  |          .o++o. |
16.  |         o .* +o.|
17.  |        S .E *. .|
18.  |            *    |
19.  |           o o   |
20.  |          .   .  |
21.  |                 |
22.  +-----------------+

       上述操作过程中,提示指定私钥文件的存放位置时,一般直接按Enter键即可,最后生成的私钥,公钥文件默认存放在宿主目录中的隐藏文件夹.ssh下。私钥短语用来对私钥文件进行保护,当使用该私钥登录时必须正确提供此处所设置的短语。尽管不设置私钥短语也是可行的。(实现无口令登录),但在生产环境中不建议这样子。

1.  [zhangsan@localhost ~]$ ls -lh ~/.ssh/id_ecdsa*
2.  -rw------- 1 zhangsan zhangsan 314 Jun  7 17:06 /home/zhangsan/.ssh/id_ecdsa
3.  -rw-r--r-- 1 zhangsan zhangsan 192 Jun  7 17:06 /home/zhangsan/.ssh/id_ecdsa.pub

       新生成的密钥对文件中,id_ecdsa是私钥文件,权限默认是600,对于私钥文件必须妥善保管,不能透漏给他人;id_ecdsa.pub是公钥文件,用来提供给SSH服务器。

将公钥文件上传至服务器

       将上一步生成的公钥文件上传至服务器,并部署到服务器端用户的公钥数据库中。上传公钥文件是可以选择SCP,FTP,Samba,HTTP甚至可以发送E-mail等任何方式。例如,可以通过scp方式将文件上传至服务器的/tmp目录下。

1.  [zhangsan@localhost ~]$ scp ~/.ssh/id_ecdsa.pub zhangsan@192.168.1.10:/tmp
2.  zhangsan@192.168.1.10's password: 
3.  id_ecdsa.pub                                    100%  192     0.2KB/s   00:00

在服务器中导入公钥文本

       在服务器中,目标用户(指用来远程登录的账号lisi)的公钥数据库位于~/.ssh目录。默认的文件名是"authorized_keys"。如果目录不存在,需要手动创建。当获得客户端发送过来的公钥文件以后,可以通过重定向将公钥文本内容追加到目标用户的公钥数据库。

1.  [root@localhost ~]# mkdir /home/lisi/.ssh
2.  [root@localhost ~]# cat /tmp/id_ecdsa.pub >> /home/lisi/.ssh/authorized_keys
3.  [root@localhost ~]# tail -1 /home/lisi/.ssh/authorized_keys 
4.  ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBDXyjipAU16fQfUtAjCvqSs8oCfAeIrW9vi36zUBdftmbgwA87dK1JJUaYqRXDo7tpKs6JUGDivmD83ZsPK96w= zhangsan@localhost.localdomain

       在公钥库authorized_keys文件中,最关键的内容是"ecdsa-sha2-nistp256加密字串"部分,当导入非ssh-keygen工具创建的公钥文本时,应确保此部分信息完整,最后的"zhangsan@localhost"是注释信息。由于sshd服务默认采用严格的权限检测模式(StrictModes yes),因此还需要注意公钥库文件authorized_keys的权限——要求除了登录的目标用户或root用户,同组或其他与用户对该文件不能有写入权限,否则可能无法成功使用密钥对验证。

1.  [root@localhost ~]# ls -l /home/lisi/.ssh/authorized_keys 
2.  -rw-r--r-- 1 root root 192 Jun  8 10:13 /home/lisi/.ssh/authorized_keys

除此之外,应确认sshd服务是否支持密钥对验证方式。

在客户端使用密钥对验证

       当私钥文件(客户端),公钥文件(服务器)均部署到位后,就可以在客户端中进行测试了。首先确认客户端中当前的用户为zhangsan,然后ssh命令以服务器端用户lisi的身份进行远程登录。如果密钥对验证方式配置成功,则在客户端将会要求输入私钥短语,以便调用私钥文件进行匹配(若未设置私钥短语,则直接登入目标服务器)。

1.  [zhangsan@localhost ~]$ ssh lisi@192.168.1.10
2.  Enter passphrase for key '/home/zhangsan/.ssh/id_ecdsa': 
3.  Last login: Fri May 11 01:15:34 2018
4.  [lisi@localhost ~]$ whoami
5.  lisi                                                                                //成功登录服务器

       经过“客户端创建密钥对”、“将公钥上传至服务器”、“在服务器中导入公钥文本”与“在客户端使用密钥对验证”四个步骤,ssh密钥对验证体系已经构建完成。

       而上所述步骤中,第二步和第三步其实可以采用另外一种方法实现,即使用"ssh-copy-id -i 公钥文件 user@host"格式“-i”选项指定公钥文件,“user”是指目标主机的用户。验证密码后,会将公钥自动添加到目标主机user宿主目录下的.ssh/authorized_keys文件结尾。

1.  [root@localhost ~]# ssh-copy-id -i ~/.ssh/id_ecdsa.pub lisi@192.168.1.10
2.  The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.
3.  ECDSA key fingerprint is 68:df:0f:ac:c7:75:df:02:88:7d:36:6a:1a:ae:27:23.
4.  Are you sure you want to continue connecting (yes/no)? yes
5.  /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
6.  /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
7.  lisi@192.168.1.10's password:                                   //输入lisi密码
8.  
9.  Number of key(s) added: 1
10.  
11.  Now try logging into the machine, with:   "ssh 'lisi@192.168.1.10'"
12.  and check to make sure that only the key(s) you wanted were added.

查看服务器中目标用户lisi的公钥数据库如下。

1.  [root@localhost ~]# ls -l /home/lisi/.ssh/authorized_keys 
2.  -rw------- 1 lisi lisi 188 Jun  8 10:53 /home/lisi/.ssh/authorized_keys
3.  [root@localhost ~]# tail -l /home/lisi/.ssh/authorized_keys 
4.  ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJe/THiMONgPK5VlqjM/ZSKgaHzRrxPyCld1EFMLRcPwXN74r7K4/GUaEKV33TrVRg/fh7T0ETdZ9tnbnKm+BAo= root@localhost.localdomain

       使用密钥对验证的方式登录时,不需要知道目标用户的密码,而是验证客户端用户的私钥短语并检查私钥、公钥是否配对,这样安全性更好。

TCP Wrappers访问控制

       在Linux系统中,很多网络服务针对客户端提供了访问控制机制,如Samba,BIND,HTTPD,OpenSSH等,本节将介绍另一种防护机制—TCP Wrappers(TCP封套),以作为应用服务与网络之间的一道特殊防线,提供额外的安全保障。

TCP Wrappers概述

       TCP Wrappers将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全检测过程,外来的连接请求必须通过这层安全检测,获得许可后才能访问真正服务程序,TCP Wrappers还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料。TCP Wrappers保护机制的两种实现方式,直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd;由其他网络服务程序调用libwrap.so.*链接库,不需要运行tcpd程序。

       通常,链接库方式的应用要更加广泛,也更加有效率。例如,vsftpd,sshd及超级服务器xinetd等,都调用了libwrap共享库(使用ldd命令可以查看程序的共享库)。

1.  [root@localhost ~]# ldd /usr/sbin/sshd | grep "libwrap"
2.      libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f72f37ef000)

       xinetd是一个特殊的服务管理程序,通常被称为超级服务器。xinetd通过在/etc/xinetd.d目录下为每个被保护的程序建立一个配置文件,调用TCP Wrappers机制来提供额外的访问控制保护。

TCP Wrappers的访问策略

       TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。对应的两个策略文件为/etc/hosts.allow和/etc/hosts.deny,分别用来设置允许和拒绝的策略。

策略的配置格式

       两个策略文件的作用相反,但配置记录的格式相同

<服务程序列表>: <客户端地址列表>

       服务程序列表,客户端地址列表之间以冒号分隔,两个列表内的多个项之间以逗号分隔。

1. 服务程序列表

       服务程序列表分为以下几类。

ALL:代表所有的服务。

单个服务程序:如“vsftpd”。

多个服务程序组成的列表,如"vsftrpd,sshd"

2. 客户端地址列表

ALL:代表任何客户端地址。

LOCAL:代表本机地址。

单个IP地址:如“192.168.1.1”

网络段地址:如“192.168.1.0/255.255.255.0”。

以"."开始的域名:如“.123.com”匹配123.com域中的所有主机。

以"."结束的网络地址:如“192.168.1.”匹配整个192.168.1.0/24网段。

嵌入通配符"*","?":前者代表任意长度字符,后者仅代表一个字符,如“10.0.8.2 *”匹配以10.0.8.2开头的所有IP地址,不可与以"."开始或结束的模式混用。

多个客户端地址组成的列表:如"192.168.1. ,172.16.16. ,.123.com "。

访问控制的基本原则

       关于TCP Wrappers机制的访问策略,应用时遵循以下顺序和原则:首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;如果检查上述两个文件都找不到相匹配的策略,则允许访问。

TCP Wrappers配置实例

       实际使用TCP Wrappers机制时,较宽松的策略可以是”允许所有,拒绝个别“,较严格的策略时“允许个别,拒绝所有”。前者只需要在hosts.deny文件中添加相应的拒绝策略就可以了;后者则除了在hosts.allow中添加允许策略之外,还需要在hosts.deny文件中设置“ALL:ALL”的拒绝策略。

       例如,只希望从IP地址为61.63.65.67的主机或位于192.168.1.0/24网段的主机访问sshd服务,其他地址被拒绝,可以执行以下操作。

1.  [root@localhost ~]# vim /etc/hosts.allow 
2.  sshd:61.63.65.67,192.168.1.*
3.  [root@localhost ~]# vim /etc/hosts.deny
4.  sshd:ALL


相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
4月前
|
移动开发 监控 安全
通过SSH协议实现的屏幕局域网电脑监控:屏幕安全访问代码
随着科技的不断发展,网络安全问题愈发突出。为了确保屏幕数据的安全,我们需要一种高效可靠的监控方法。本文介绍了一种基于SSH协议的屏幕局域网电脑监控方案,同时提供了相关代码示例,确保屏幕数据的安全传输和访问。
244 0
|
2月前
|
监控 安全 网络安全
局域网管理监控的远程访问控制:利用SSH和Python实现安全管理
在当今数字化时代,局域网管理监控对于确保网络安全至关重要。远程访问控制是一项关键任务,通过利用SSH(Secure Shell)和Python编程语言,我们可以实现更加安全的管理方法。本文将介绍如何使用这两者结合,为局域网管理提供可靠的远程访问控制。
192 1
|
4月前
|
网络协议 数据安全/隐私保护 网络架构
如何使用软路由R4S+iStoreOS实现远程访问内网电脑桌面
如何使用软路由R4S+iStoreOS实现远程访问内网电脑桌面
|
9月前
|
网络安全
不能建立到远程计算机的连接,你可能需要更改此连接的网络设置
公司内网换了个账号,突然就连接不上了,也不知道怎么回事,搜了半天也没找到合适的,集合总结了一下才找到适合我电脑的解决方法
351 0
|
10月前
|
安全 网络协议 Shell
远程访问及控制(上)
远程访问及控制(上)
|
Web App开发 Ubuntu Linux
远程桌面控制
远程桌面控制
348 0
远程桌面控制
|
安全 网络协议 网络虚拟化
通过Internet对PLC远程访问控制
西门子S7-200 SMART CPU集成了一个以太网通信端口,支持以太网和基于TCP/IP的通信标准,利用该端口通过Internet对所售出的产品进行远程诊断和维护,可以减少工程师到现场的时间和费用,为客户提供更为快捷的服务,减少客户的损失。
通过Internet对PLC远程访问控制
|
网络协议 安全 算法
远程访问及控制
1、SSH远程管理,TCP Wrappers访问控制 2、配置密钥对验证
远程访问及控制
|
数据安全/隐私保护 Windows