远程访问及控制

1.OpenSSH服务器

1.1 SSH(Secure Shell)协议

  1. 是一种安全通道协议
  2. 对通信数据进行了加密处理,用于远程管理

1.2 OpenSSH

  1. OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。
  2. Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动
  3. 执行"systemctl start sshd"命令即可启动sshd 服务
  4. 服务名称:sshd,服务端主程序:/usr/sbin/sshd,服务端配置文件:/etc/ssh/sshd_config
  5. ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件

1.3 openssh服务

openssh提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此
来代替Telnet·或 Ftp
centos需要安装openssh四个安装包
openssh-clients-5.3p1-114.e16 7.x86 64 OpenSSH客户端软件包。
openssh-server-5.3p1-114.e16 7.x86 64 OpenSSH服务器软件包。
openssh-askpass-5.3p1-114.e16 7.x86 64 支持对话框窗口的显示,是一个基于x系统的·
openssh-5.3p1-114.el6 7.x86 64 包含OpenSSH服务器及客户端需要的核心文件。
编译安装openssh升级,会存在升级失败的风险,必须先安装telnet并测试用户登录没有问题后才能进行升级

编译安装

安全机制

2. ssh远程登录方式

2.1 ssh登录

2.1.1 登录

当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口
ssh [远程主机用户名] @[远程服务器主机名或IP地址] -p port
第一次登录服务器时系统没有保存远程主机的信息,为了确认该主机身份会提示用户是否继续连接,输入yes 后登录,这时系统会将远程服务器信息写入用户主目录下的$HOME/.ssh/known_hosts文件中,下次再进行登录时因为保存有该主机信息就不会再提示
image.png
image.pngimage.png
第二次登录
image.png
或者使用主机名登录,但是需要做映射
image.png
image.png
image.png

2.1.2 常见故障

工作中需要SSH登陆到别的Linux主机上去,但有时候SSH登陆会被禁止,并弹出如下类似提示:
The authenticity of host ‘192.168.10.9 (192.168.10.9)’ can’t be established.
ECDSA key fingerprint is SHA256:AaGpHeEiRuXMy96oezzV6TOej5nJJmZIe/djqR7qCVk.
ECDSA key fingerprint is MD5:78:a1:b1:1c:36:76:c7:34:54:87:cc:ea:51:3f:0c:24.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.10.9’ (ECDSA) to the list of known hosts.
Authentication failed.
解决办法是直接删除known_hosts文件,删除后再次登录使用ssh还会生成
image.png

2.1.3 跳过认证

ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。解决的办法是使用ssh连接远程主机时加上“-o StrictHostKeyChecking=no”的选项
image.png
彻底去掉这个提示的方法是,修改/etc/ssh/ssh_config文件(或$HOME/.ssh/config)中的配置,添加如下两行配置:
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
image.png
image.png

2.2 ssh -l登录

2.2.1 登录

ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l 指定登录名称
image.png

3. 加密算法

ssh是加密传输在传输过程中会加密数据

3.1 对称加密

3.1.1 概念

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用

3.1.2 常用算法

在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

3.1.3 优缺点

**优点:**加密、解密使用同一个密钥,将原始数据分割成固定大小的块,逐个进行加对称加密,算法公开、计算量小、加密速度快、加密效率高。
**缺点:**密钥过多,密钥分发,数据来源无法确认,数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。如果一方的秘钥被泄露,那么加密信息也就不安全了。每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担

3.2 非对称 (公钥)加密

3.2.1 概念

非对称加密,也称为公钥密码体制,是一种加密技术,它使用一对密钥来进行加密和解密操作。这对密钥包括一个公钥和一个私钥。公钥:可以公开的密钥,用于加密数据。任何人都可以获得公钥,并用它来加密信息。私钥:必须保密的密钥,用于解密数据。只有密钥对的拥有者才能拥有私钥,并使用它来解密用公钥加密的信息

3.2.3 常用算法

RSA(RSA algorithm):最广泛使用的非对称加密算法之一,由Ron Rivest、Adi Shamir和Leonard Adleman提出。
DSA(Digital Signature Algorithm):数字签名算法,和RSA不同的是DSA仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快
** ECC(Elliptic curve cryptography,椭圆曲线加密算法)**:使用椭圆曲线数学作为基础,提供更高的安全性,但计算效率更高
ECDSA9(Elliptic Curve Digital Signature Algorithm):椭圆曲线签名算法,是ECC和DSA的结合,相比于RSA算法, ECC可以使用更小的秘钥,更高的效率,提供更高的安全保障

3.2.4 优缺点

优点:提供了更高的安全性,不需要在通信双方之间共享密钥,适合在开放网络中传输敏感信息。
缺点:计算量较大,加密和解密速度较慢,不适合加密大量数据。

4. 服务和配置管理

配置文件位置/etc/ssh/shhd_config

4.1 服务配置

4.1.1 监听端口修改

SSH 预设使用 22 这个port,也可以使用多个port,即重复使用 port 这个设定项!
假设想要开放SSHD端口为 22和222,则多加一行内容为: Port 222 即可。(端口范围0~65535)
然后重新启动SSHD这样就好了。 建议大家修改 port number 为其它端口,防止别人暴力破解
image.pngimage.png
修改成2678
image.png
修改后无法登录,用另外一台linux主机登录需要指定端口
image.png

4.1.2 ListenAddress 监听地址

设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址
注意:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址 这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0 表示所有IP。
image.png

4.1.3 Protocol 2

设置协议版本为SSH1或SSH2,SSH1存在漏洞与缺陷,选择SSH2

4.1.4 UseDNS yes

一般来说,为了要判断客户端来源是正常合法的,因此会使用 DNS 去反查客户端的主机名, 但通常在内网互连时,该基设置为 no,因此使联机速度会快些
注:禁用DNS反向解析,以提高服务器的响应速度
image.png

4.1.5 SyslogFacility AUTHPRIV

当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV,sshd 服务日志存放在:/var/log/secure。
image.png

4.2 安全调优

4.2.1 LoginGraceTime 2m

grace意思是系统给与多少秒来进行登录。(默认2分钟,0 表示无限制)
当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中。
在多久时间内没有成功连上SSHserver 就强迫断线!若无单位则默认时间为秒。可以根据实际情况来修改实际
image.png

4.2.2 PermitRootLogin yes

是否允许 root 登入,默认是允许的,但是建议设定成 no,实际是不允许root 账号直接登陆的,仅允许普通用户登录,需要用到 root 用户再切换到root 用户。

image.png

实验
创建用户zhangsan、lisi
grep “wheel” /etc/group 查询组
gpasswd -a zhangsan wheel zhangsan 用户已加入 wheel 组
开启pam模块
image.png
image.png
image.png
image.png
验证
image.png

4.2.3 PasswordAuthentication yes

密码验证是需要的!所以可以是yes,也可以是 no,在实际服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
image.png

4.2.4 PermitEmptyPasswords no

是否允许空密码的用户登录,默认为no,不允许空密码登录
image.png

4.2.5 PrintLastLog yes

显示上次登入的信息!默认为 yes

image.png

4.2.6 MaxAuthTries 6

指定每个连接最大允许的认证次数。默认值是 6 。
失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息
默认3次
用ssh -o NumberOfPasswordPrompts=8 lisi@192.168.10.9可以验证
image.png

4.2.7 AllowUsers,DenyUsers

当希望只允许或禁止某些用户登录时,可以使用 AllowUsers 或 DenyUsers 配置,两者 用法类似(不要同时使用)。配置AllowUsers只允许名单内账户登录其他不行,配置DenyUsers不给名单内的人登录其他可以
例如,若只允许 zhangsan 用户登录,其他(lisi)用户不给登录
AllowUsers lisi@192.168.72.20 zhangsan
或者AllowUsers zhangsan
image.png

4.2.8 组合使用

ssh -o ConnectTimeout=3 -o ConnectionAttempts=5 -o PasswordAuthentication=no -o StrictHostKeyChecking=no $ip “ command ”

ConnectTimeout=3 连接超时时间,3秒
ConnectionAttempts=5 连接失败后重试次数,5次
PasswordAuthentication=no 不使用密码认证,没有互信直接退出
StrictHostKeyChecking=no 自动信任主机并添加到known_hosts文件

4.3 服务器安全操作

  1. 对未经过安全认证的RPM包进行安全检查
  2. Linux用户方面的加固
  3. 3设定密码策略
  4. 对用户密码强度的设定
  5. 对用户的登录次数进行限制
  6. 禁止ROOT用户远程登录
  7. 设置历史命令保存条数和账户超时时间
  8. 设置只有指定用户组才能使用su命令切
  9. 换到root用户
  10. 对Linux账户进行管理
  11. 对重要的文件进行锁定,即使ROOT用户也无法删除
  12. 建立日志服务器

4.4 sshd 服务

4.4.1 支持两种验证方式

4.4.1.1 密码验证

对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒;从服务器角度来 看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。
18位 密码复杂性(大写、小写、字符、数字) 端口(1023以上叫做高位端口1922) 做好安全

4.4.1.2 密钥对验证

要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在 Shell 中被广泛使用。
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则 两种方式都可启用

免密登录
ssh-agent bash 将公钥添加管理 在客户端操作
ssh-add

解密过程

  1. 客户端发起链接请求
  2. 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
  3. 客户端生成密钥对
  4. 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
  5. 客户端发送加密值到服务端,服务端用私钥解密,得到Res
  6. 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
  7. 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密、

修改sshd_config配置文件关闭密码认证开通秘钥对认证

image.png
image.png
密码认证改成no是取消
image.png

5. 生成公钥私钥,连接使用

5.1 实验

5.1.1 window使用秘钥登录

打开xshell,点击菜单栏的工具新建用户生成秘点击下一步
image.png
点击下一步
image.png
点击下一步
image.png

输入需要加密的密码,点击下一步
image.png
保存在桌面点击完成
image.png
登录目的linux切换到.ssh目录
image.png

打开目的linux上传公钥
image.png
将公钥改名为authoried_keysimage.png
打开新建立会话
image.png
取消勾选passwd勾选public key,点击确认
image.png
将公钥添加确认
image.png
image.png
image.png
登录
image.png
输入给秘钥加的密码
image.png

5.1.2 Linux客户端演示登录

image.pngimage.pngimage.png
验证
image.png

5.2 命令

5.2.1 scp复制

安全性复制
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,而且scp传输是加密的。

1.本地文件复制到服务器
scp sheng root@192.168.100.141:/opt
2.复制服务器的文件到本地
scp root@192.168.100.141:/opt/test/ ./
3.本地目录复制到服务器
scp -r 1234/ root@192.168.100.141:/opt

5.2.2 sftp安全性传输

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。
sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作
所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP

sftp root@192.168.10.10 登陆到服务器

5.2.3 get下载


get anaconda-ks.cfg /home/

5.2.4 put上传


put abc.txt 默认时会上传的/root
put abc.txt /home/

5.2.5 help查看可用命令


help 查看sftp可使用的命令和用途

5.2.6 打印服务器当前位置

pwd 打印当前服务器所在位置
lpwd 打印当前本地位置

5.2.7 切换目录、查看文件

cd 切换服务器上的目录
ls 查看当前目录下文件列表

5.2.8 下载文件、退出sftp

get 下载文件
get -r 下载目录
quit 退出sftp
put 上传文件

5.2.9 退出命令

quit
exit
bye

5.2.10 tcp wrappers

TCP Wrappers访问控制
TCP Wrappers ( TCP封套)

在 Linux 系统中,许多网络服务针对客户端提供了访问控制机制,如 Samba、BIND、 HTTPD、OpenSSH 等
TCP Wrappers 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了 一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序
[root@localhost opt]# rpm -q tcp_wrappers #一般系统会默认安装
tcp_wrappers-7.6-77.el7.x86_64 #该软件包提供了执行程序 tcpd 和共享链接库文件 libwrap.so.*
TCP Wrapper 保护机制:通常由其他网络服务程序调用 libwrap.so.*链接库比如sshd
[root@localhost opt]# ldd /usr/sbin/sshd | grep “libwrap” #使用 ldd 命令可以查看程序的共享库
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fc35d8f8000)

6. TCP Wrappers访问控制

TCP Wrappers ( TCP封套)
将TCP服务程序“包裹"起来,代为监听TCP服务程序的端口,增加一个安全检测过程,外来的连接请求须先通过这层安全检测,获得许可后才能访问真正的服务程序。
大多数Linux 发行版,TCP Wrappers 是默认提供的功能。rpm -q tcp_ wrappers

6.1 TCP Wrappers保护机制的两种实现方式

1.直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd程序。
2.由其他网络服务程序调用libwrap.so.* 链接库,不需要运行tcpd 程序。此方式的应用更加广泛,也更有效率。
使用ldd命令可以查看程序的libwrap.so. *链接库ldd $ (which ssh)

语法格式:<服务程序列表>: <客户端地址列表>
( 1 )服务程序列表 服务程序列表可分为以下几类。
ALL:代表所有的服务。
单个服务程序:如“vsftpd”。
多个服务程序组成的列表:如“vsftpd,sshd”。

( 2 )服务程序列表
ALL:代表所有的服务。
单个服务程序:如“vsftpd".
多个服务程序组成的列表:如“vsftpd, sshd"。.
(3)客户端地址列表
ALL:代表任何客户端地址。
LOCAL:代表本机地址。
多个地址以逗号分隔
允许使用通配符“*”和"?”,前者代表任意长度字符,后者仅代表一个字符
网段地址,如"192.168.80.” 或者192.168.80.0/255.255.255.0
区域地址,如“. benet.com"匹配benet.com域中的所有主机。

访问控制的基本原则

首先检查 /etc/hosts.allow 文件,如果找到相匹配的策略,则允许访问;
否则继续检查/etc/hosts.deny 文件,如果找到相匹配的策略,则拒绝访问;
如果检查上述两个文件都找不到相匹配的策略, 则允许访问

“允许所有,拒绝个别”
只需在/etc/hosts.deny文件中添加相应的拒绝策略
“允许个别,拒绝所有"
除了在/etc/hosts.allow中添加允许策略之外,还需要在/etc/hosts
deny文件中设置"ALL:ALL"的拒绝策略。

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值