操作要求:周期最短化,权限最小化
AUTHOR:闫小雨
TIME:2024-05-29
目录
一、SSH远程管理
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能,SSH协议对通信双方的数据传输进行了加密处理,SSH默认端口为22;它与Telent(远程登录),RSH(Remote Shell,远程执行命令)RCP(Remote File Copy)远程文件复制)相比,SSH 协议提供了更好的安全性。
1、配置SSH服务端
SSH服务器由openssh,openssh-server等软件包提供;启动sshd服务需要执行" systemctl start sshd "命令,sshd 服务的配置文件位于 /etc/ssh/sshd_config 目录下。
1、服务监听
sshd服务默认端口号为22,端口号可做修改,SSH 协议的版本选用 V2 的安全性要更好,禁用 DNS向解析可以提高服务器的响应速度。
#打开配置文件
vim /etc/ssh/sshd_cconfig
#指定登录端口,默认22
port 22
#指定登录ip
ListenAddress 10.13.5.234
#指定登录协议,使用SSH V2 协议更为安全
Protocol 2
#禁用DNS反向解析
UseDNS no
改完配置需要重启服务 systemctl start sshd
才能运行所改的配置
2、用户登录控制
通常应禁止root用户或密码为空的用户登录,可以限制登录验证的时间(默认为2分钟)及最大重试次数,若超过限制后仍未能登录则断开连接;
#打开配置文件
vim /etc/ssh/sshd_config
#指定验证时间 为2分钟
LoginGraceTime 2m
#指定最大失败次数 为6次
MaxAuthTries 6
#禁止root用户登录
PermitRootLogin no
#禁止密码为空的用户登录
PermitEmptyPasswords no
改完配置需要重启服务 systemctl start sshd
才能运行所改的配置
如果必须需要root用户那么可以先以普通用户远程登入(确保进入安全的Shell环境以后),使用 su - root
来切换到root用户中
如果只允许或禁止某些用户的登陆时,使用 AllowUsers
或 DenyUsers
配置,两者用法类似但是两个配置能同时使用于同一用户。
#进入配置文件
vim /etc/ssh/sshd_config
#允许某些或某个用户进行登录,多个用户可用空格分开
AllowUsers yanxy admin James@10.13.5.234
#禁止某些或某个用户进行登录,多个用户可用空格分开
DenyUsers zhangsan Jerry Test@10.13.5.234
改完配置需要重启服务 systemctl start sshd
才能运行所改的配置
3、登录验证
ssh服务支持两种验证方式:密码验证、密钥对验证,当密码验证和密钥对验证都启用时,服务器将优先使用密钥对验证。
#进入配置文件
vim /etc/ssh/sshd_config
#启用密码登录
PasswordAuthentication yes
#启用密钥对登录
PubKeyAuthentication yes
#指定公钥库位置
AuthorizedKeysFile .ssh/authorized Keys
改完配置需要重启服务 systemctl start sshd
才能运行所改的配置;公钥库用来保存多个客户端上传的公钥文本,它会与客户端本地的私钥文件进行匹配;
密码验证
对服务器中本地系统用户的登录名称、密码进行验证
- 优点:操作简便、登录时间较短
- 缺点:防御能力较弱、容易遭受破解、首次登录需要公钥交换,容易受到攻击、每次登录都需要输入密码;
密钥对登录
要求提供相匹配的密钥信息才能验证通过
- 优点:会将公钥文件放在服务器中指定位置,无需公钥交换,不易受到攻击,争强了远程管理的安全性;
- 缺点:登录过程还需质询操作,时间较长;需要事先手动将客户端公钥放置到服务器上,比较繁琐;
2、使用SSH客户端程序
SSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp.sftp远程复制和文件传输命令等;常见的远程访问工具有Xshell、FinalShell、Putty、cmd、windows Powershell等
3、命令程序ssh、scp、sftp
1. ssh远程登陆
使用时应指定登录用户、目标主机地址作为参数。
#远程登陆
ssh yanxy@10.13.5.234
#确认当前用户是否登录
whoami
#或者产看ip地址来确认是否登录
ifconfig ens33 | grep "inet"
如果 sshd 服务器使用了非默认的端口号(如 5277),则在登录时必须通过"-p
"选项指定端口号。
#使用非默认端口远程登录
ssh -p 5277 yanxy@10.13.5.234
2. scp远程复制
通过scp命令利用SSH安全连接与远程主机相互复制文件,使用scp 命令时,除了必须指定复制源、目标之外,还需要指定目标主机地址、登录用户;
#将服务器文件复制到本地目录
#将远程服务器里某的用户下的某个文件复制到本地机器里的某个目录里
scp yanxy@10.13.5.234:/etc/passwd /home/pwd123.txt
#将本地文件复制到服务器目录
#将本地机器里的某个文件复制到远程服务器里的某个用户的某个目录里
scp -r /etc/vsftpd/ yanxy@10.13.5.234:/opt
3. sftp安全FTP
通过 sftp 命令可以利用 SSH 安全连接与远程主机上传,下载文件,采用了与 FTP 类似的登录过程和交互式环境,便于目录资源管理。
#登录需要进行上传或下载的服务器
sftp yanxy@10.13.5.234
#将本地文件指定文件上传到SFTP服务器的指定目录下
put /boot/config.tar.gz /usr/local/
#从SFTP服务器的指定目录下载文件到本地的指定目录下
get /usr/local/python-3.8.19.x86_64 /home/Test
4、创建密钥对
整个过程分为四步,1、在客户端创建密钥对。2、将公钥文件上传至服务器。3、在服务器导入公钥文本。4、在客户端使用密钥对验证。
1. 在客户端创建密钥对
通过 ssh-keygen
工具为当前用户创建密钥对文件。可用的加密算法为 ECDSA
或DSA
( ssh-keygen命令的"-t"选项用于指定算法类型 );
#创建密钥对文件
ssh-keygen -t ecdsa
提示指定私钥文件的存放位置时,一般直接按Enter键即可,最后生成的私钥公钥文件默认放在宿主目录中的隐藏文件夹.ssh 下。私钥短语用来对私钥文件进行保护,当使用该私钥验证登录时必须正确提供此处所设置的短语,但是不设置私钥短语也可以登录。
#确认生成的密钥文件是否存在
ls -lh ~/.ssh/id_ecdsa*
id_ecdsa
是私钥文件,用于个人保管,权限默认为600;id_ecdsa.pub
是公钥文件,用来提供给 SSH 服务器。
2. 将公钥文件上传到服务器
生成的公钥文件需要上传至服务器,并部署到服务器端用户的公钥数据库中。上传公钥文件常用 SCP,FTP,Samba,HTTP,硬拷贝;
3. 在服务器中导入公钥文本
目标用户的公钥数据库位于~/.ssh
目录,默认的文件名是authorized_keys
,如果目录不存在,需要手动创建,当获得客户端发送过来的公钥文件以后,可以通过重定向将公钥文本内容追加到目标用户的公钥数据库。
#要是公钥库不存在则需要手动创建
mkdir /home/yanxy/.ssh/
#将公钥从定向到公钥库
cat /tmp/id_ecdsa.pub >> /home/yanxy/.ssh/authorized_keys
#检查是否追加进去
tail -l /home/yanxy/.ssh/authorized_keys
ssh服务采用严格的权限检测模式,因此需要注意公钥库文件authorized_keys
的权限,要求除了登录的目标用户或root用户,同组或其他用户对该文件不能有写入权限,否则可能无法成功使用密钥对验证。
#查看登录用户和root用户及组是否有写入权限
ls -l /home/yanxy/.ssh/authorized_keys
4. 在客户端使用密钥对验证
私钥文件(客户端)、公钥文件(服务器)部署到位后就可以远程登录
#远程登录
ssh yanxy@10.13.5.234
#如果配置成功会直接登录进去,然后查看是否登陆到远程账户
whoami
经过“客户端创建密钥对”“将公钥上传至服务器”“在服务器中导入公钥文本”与“在客户端使用密钥对验证”四个步骤,SSH 密钥对就设置成功。.
但是“将公钥上传至服务器”和“在服务器中导入公钥文本”可以采用更简便的方法实现,使用的命令时ssh-copy-id -i <服务器公钥库> name@host
即使用公钥文件 user@host
格式,-i
选项指定公钥文件,user
是指服务器的用户。密码验证后会将公钥自动添加到服务器user
宿主目录下的ssh/authorized-keys
文件结尾。
#将生成的公钥放入服务器的公钥库
ssh-copy-id -i ~/.ssh/id_ecdsa.pub yanxy@10.13.5.234
二、TCP Wrappers访问控制
1、TCP Warppers描述
TCP Wrappers,也被称为TCP_Wrappers,是一个工作在第四层(传输层)的安全工具,主要用于对有状态连接的特定服务进行安全检测并实现访问控制。
需要安装'' tcp_wrappers-7.6-77.el7.x86_64.rpm ''软件包,该软件包提供了执行程序 tcpd
和共享链接库文件libwrap.so.*
,对应TCP Wrapper保护机制的两种实现方式。
- 1、直接使用tcpd程序对其他服务程序进行保护,需要运行 tcpd;
- 2、由其他网络服务程序调用 libwrap.so.*链接库,不需要运行 tcpd 程序;
2、TCP Wrappers的访问策略
TCP Wrappers机制的保护针对访问服务的客户端地址进行访问控制;对应的两个策略文件为/etc/hosts.allow
和/etc/hosts.deny
,分别用来设置允许和拒绝的策略。
1、策略的配置格式
<服务程序列表>:<客户端地址列表>
服务程序列表,客户端地址列表之间以:
冒号分隔,在每个列表内的多个项之间以,
逗号分隔。
1、服务程序列表
- ALL:代表所有的服务。
- 单个服务程序:如“ftpd”。
- 多个服务程序组成的列表:如"ftpd,sshd"。
2、客户端地址列表
- ALL:代表任何客户端地址。
- LOCAL:代表本机地址。
- 单个P地址:如"10.13.5.234"。
- 网络段地址:如“10.13.5.0/255.255.255.0"
- 以
.
开始的域名:如".yanxy.com
"匹配yanxy.com
域中的所有主机. - 以
.
结束的网络地址:如“10.13.5.
"匹配整个10.13.5.0/24网段。 - 嵌入通配符
*
代表任意长度字符?
仅代表一个字符:如10.0.8.2*
匹配以 10.0.8.2 开头的所有IP 地址。不能以.
开始或结束的模式混用。 - 多个客户端地址组成的列表:如
10.13.5.
,192.168.1.
,.yanxy.com
2、访问控制的基本原则
首先检查/etc/hosts.allow
文件,如果找到相匹配的策略,则允许访问;否则继续检查/etc/hosts.deny
文件,如果找到相匹配的策略,则拒绝访问;两个文件都找不到相匹配的策略,则允许访问。
较宽松的策略可以是“允许所有,拒绝个别”只需在 hosts.deny
文件中添加相应的拒绝策略就可以;较严格的策略是"允许个别,拒绝所有"除了在hosts.allow
中添加允许策略之外,还需要在 hosts.deny
文件中设置ALL:ALL
的拒绝策略。