Linux的SSH远程管理及安全配置

  • 课程知识点
  1. OpenSSH远程管理
  2. TCP Wrappers访问控制
  • 技术目标
  1. 掌握OpenSSH远程管理
  2. 掌握TCP Wrappers访问控制的应用与配置
  • 课程内容

1、OpenSSH远程管理

1.1 配置OpenSSH服务端

1.1.1 配置OpenSSH配置文件

openssh服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行"systemctl status sshd.service"即可按默认配置启动sshd服务,包括root在内的大部份用户(只要拥有合法的登录shell)都可以远程登录系统。

sshd服务的配置文件是:/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。下面介绍一些最常用的配置项,关于sshd_config文件的更多配置可参考man手册。

1.1.2 服务监听选项

sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度。

 # vim /etc/ssh/sshd_config

 Port 22                              监听端口为22

 ListenAddress 192.168.10.1           监听地址为192.168.10.1

.......                             省略内容

 UseDNS yes                           禁用DNS反向解析

......                              省略内容

 # systemctl restart sshd

1.1.3 用户登录控制

sshd服务默认允许root用户登录,当在Internet中使用时这是非常不安全的。普遍的做法是:先以普通用户远程登录,进入安全shell环境后,根据实际需要使用su命令切换为root用户。关于sshd服务的用户登录控制,通常就禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为2分钟)及最大重次数,若超过限制后仍未登录则断开连接。

 # vim /etc/ssh/sshd_config

LoginGraceTime 2m         //登录验证时间   

PermitRootLogin no        //禁止root用户登录

MaxAuthTries 3            //最大重试次数

MaxSessions 10            //最大连接数

PermitEmptyPasswords no   //禁止空密码用户登录

.....                     //省略内容

 # systemctl restart sshd

如果只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法类似(不能同时使用)。

【举例】 只允许stu1和stu2用户录,其中stu2用户仅能从IP地址为192.168.10.100的主机远程登录,配置如下:

vim /etc/ssh/sshd_config

..... //省略内容

AllowUsers stu1 stu2@192.168.10.100 //多个用户用空格隔开

systemctl restart sshd

1.1.4登录验证方式

对于服务器的管理,除了用户帐号的安全控制外,登录验证试也非常重要。sshd服务支持两种验证方式:密码验证和密钥对验证,可以设置只使用其中一种,也可以两种都用。

密码验证

以服务器中本地系统用户的登录名称、密码进行验证。从客户机角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力较弱。

密钥对验证

要求提供相匹配的密钥信息才能通过验证。通常先在客户中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大增强了远程管理的安全性。公钥(Public Key)与私钥(Privtae Key)的关系如下:

公钥与私钥是成对生成,这两个密钥互不相同,可以互相加密与解密。

不能根据一个密钥来推算出另一个密钥。

公钥对外公开,私钥只有私钥的持有人才知道。

公钥与私钥要配对使用,如果用公钥对数据进行加密,只有用相对就的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。

当密码验证与密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用, 只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用。

其中,公钥库文件用来保存各客户机上传的公钥文本,以便与客户机本地的私钥文件进行匹配。如果要禁用密码验证,启用密钥对验证,修改配置文件如下:

# vim /etc/ssh/sshd_config

PasswordAuthentication no                      禁用密码验证

PubkeyAuthentication yes                       启用密钥对验证

AuthorizedKeysFile     .ssh/authorized_keys    指定公钥库数据文件

.....                                          省略内容

# systemctl restart sshd

1.2 使用SSH客户端程序

在CentOS7系统中,OpenSSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp、sftp远程复制和文件传输命令等。实际上,任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,如windows平台中的Xshell、SecureCRT、Putty等图形工具。

1.2.1 命令程序ssh、scp、sftp

(1)ssh远程登录

通过ssh命令可以远程登录sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护。使用时应指定登录用户、目标主机地址作为参数。

【举例】 以student用户远程登录到主机192.168.75.158

ssh student@192.168.75.158

Are you sure you want to continue connecting (yes/no)? yes 接受密钥

student@192.168.75.158's password: 输入密码

当用户第一次登录SSH服务器时,必须接受服务器发来的RSA密钥(根据提示输入"yes")后才能继续验证。接收的密钥信息将保存到~/.ssh/known_hosts文件中。密码验证成功以后,就登录到目标服务器的命令行环境中了,就好像把客户机的显示器、键盘连接到服务器一样。

如果sshd服务器使用了非默认的端口号(如2345),则在登录时必须通过"-p"选项指定端口号。

【举例】 以student用户远程登录到主机192.168.75.158的2345端口

ssh -p 2345 student@192.168.75.158

(2)scp远程复制

使用scp命令可以利用SSH安全连接与远程主机相互复制文件。使用scp命令时,除了必须指定复制源、目标外,还应指定目标主机地址、登录用户,执行后提示验证口令即可。

【举例】将远程主机的/etc/passwd文件复制到本机,

将本机的/var/log/复制到远程主机。

scp root@192.168.75.158:/etc/passwd /root/pwd11.txt

scp -r /var/log root@192.168.75.158:/logbak

(3)sftp介绍

sftp也叫安全ftp,通过sftp命令可以利用SSH安全连接与远程主机上传、下载文件 ,采用了与FTP类似的登录过程和交互环境,以更加安全的方式进行目录资源管理。

【举例】使用sftp远程登录,并进行文件上传与下载。

sftp student@192.168.75.158

1.2.2图形工具MobaXterm

MobaXterm是windows下一款功能非常强大的安全终端模拟软件,支持Telnet、SSH、SFTP等协议,可以方便地对Linux主机进行远程管理。

安装并运行MobaXterm后,在Session Settings对话框中指定相关协议,并指定远程主机的IP地址、端口号等相关信息,然后单击OK,根据提示输入密码验证后即可成功登录目标主机。

1.2.3 配置SSH密钥对验证登录

方法一:在Linux客户端使用密钥对登录服务器

(1)在客户端创建密钥对

student@localhost log]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/student/.ssh/id_rsa): //指定私钥位置

Enter passphrase (empty for no passphrase): //设置私钥短语

Enter same passphrase again: //确认所设置的短语

将公钥上传至服务器

[student@localhost ~]$ scp ~/.ssh/id_rsa.pub root@192.168.75.158:/tmp/

在服务器中导入公钥文本

mkdir -p /home/stu1/.ssh

cat /tmp/id_rsa.pub >> /home/stu1/.ssh/authorized_keys

ll

-rw-r--r--. 1 root root 411 12月 30 22:59 authorized_keys

配置sshd_config文件允许密钥对访问

PasswordAuthentication yes 密码验证

PubkeyAuthentication yes 密钥对验证

AuthorizedKeysFile .ssh/authorized_keys

客户端使用密钥对登录服务器

[student@localhost ~]$ssh stu1@192.168.75.158

方法二:在windows系统中使用putty实现密钥对登录服务器

(1)首先要用PuTTYgen 生成密钥对

(2)点击Save private key按钮,选择一个存放文件的路径并定义名称,点击"保存"

(3)复制公钥到Linux服务器

[root@aminglinux ~]# mkdir /root/.ssh 创建目录

[root@aminglinux ~]# chmod 700 /root/.ssh 更改这个目录的权限

[root@aminglinux ~]# vim /root/.ssh/authorized_keys 把公钥内容粘贴到这

个文件里并保存。

  1. 关闭SELinux
    [root@aminglinux ~]# setenforce 0 暂时关闭SELinux 。

(5)设置Putty通过密钥登陆

2、TCP Wrappers访问控制

在Linux系统中,许多网络服务针对客户机提供了某种访问控制机制,如samba、BIND、Httpd、OpenSSH等,除此之外还有一种防护机制---TCP Wrappers(TCP封套),以作为应用服务与网络之间的一道特殊防线,提供额外的安全保障。

2.1 TCP Wrappers概述

TCP Wrappers将其他的TCP服务程序"包裹"起来,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。

TCP Wrappers还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料。TCP Wrappers的访问控制是基于TCP协议的应用服务。

相对于iptables防火墙访问控制规则,TCP Wrappers的配置更简单。但是TCP Wrappers也有两个缺点:第一,TCP Wrappers只能控制TCP协议的应用服务;第二,并不是所有基于TCP协议的应用服务都能接受TCP Wrappers控制。对于大多数Linux发行版,TCP Wrappers是默认提供的功能。

2.2 TCP Wrappers 的访问策略

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

2.1.1 策略的配置格式

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

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

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

服务程序列表,可以分为以下几类:

ALL:代表所有的服务。

单个服务程序:如"sshd"。

多个服务程序组成的列表:如"sshd,vsftpd"。

客户机地址列表,可以分为以下几类:

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

LOCAL:代表本机地址。

单个IP地址:如"192.168.75.158"。

网络地址段:如"192.168.75.0/255.255.255.0"。

以"."开始的域名:如".kgc.cn"匹配域中的所有主机。

以"."结束的网络地址:如192.168.75.匹配整个192.168.75.0/24网段。

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

多个客户机地址组成的列表:如"192.168.1.,172.17.17.,.kgc.cn"。

2.2.2 访问控制的基本原则

关于TCP Wrappers机制的访问策略,应用时遵循以下顺序和原则:

首先检查/etc/hosts.allow文件,如果匹配则允许访问;

否则继续检查/etc/hosts.deny文件,如果匹配则拒绝访问;

如果上述两个文件都没有匹配,则允许访问。

2.2.3TCP Wrappers配置实例

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

【举例】 只允许61.63.65.67的主机或者位于192.168.2.0/24网段的主机访问sshd服务,拒绝其他地址。

vim /etc/hosts.allow

sshd:61.63.65.67,192.168.2.*

vim /etc/hosts.deny

sshd:ALL

相关推荐
施嘉伟1 小时前
基于Linux的citus搭建标准化
linux·运维·数据库·postgresql·citus
likeyou~coucou1 小时前
Linux中网络文件系统nfs使用
linux·运维·服务器
誓约酱1 小时前
Linux 内核 调用堆栈打印函数
linux·运维·服务器·c++
->yjy1 小时前
系统性能定时监控Python&Linux
linux·开发语言·python
may-daydayup1 小时前
【Linux】Linux 内存管理机制
linux·运维
吖吖耶3331 小时前
【Linux】网络基本配置命令
linux·运维·网络
楚疏笃1 小时前
linux安全管理-会话安全
linux·前端·安全
梦想画家1 小时前
在WSL 2 (Ubuntu 22.04)安装Docker Ce 启动错误解决
linux·ubuntu·docker·wsl2
委婉待续2 小时前
ubuntu上安装redis
linux·运维·ubuntu
mucheni2 小时前
迅为rk3568开发板定制扩展分区SDK源码编译-编译 Ubuntu-全自动编译图形化界面
linux·运维·ubuntu