ssh: secure shell, protocol, 22/tcp, 安全的远程登录
具体的软件实现:
OpenSSH : ssh 协议的开源实现,CentOS 默认安装
dropbear :另一个开源实现SSH
协议版本
v1: 基于CRC-32 做MAC ,不安全;man-in-middle
v2 :双方主机协议选择安全的MAC 方式
基于DH 算法做密钥交换,基于RSA 或DSA 实现身份认证
两种方式的用户登录认证:
基于password
基于key
OpenSSH 介绍
相关包:
openssh
openssh-clients
openssh-server
工具:
基于C/S 结构
Client: ssh, scp, sftp
Windows 客户端:
xshell, putty, securecrt, sshsecureshellclient
Server: sshd
客户端组件:
ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no 首次登录不显示检查提示
首次登陆公钥存放位置:/root/.ssh/known_hosts
格式:ssh [user@]host [COMMAND]
ssh root@172.18.12.14 ‘uname -r’ #默认同当前用户
ssh [-l user] host [COMMAND]
-p port :远程服务器监听的端口 #默认22端口
更改端口文件:/etc/ssh/sshd_config 里面的port,
更改后需要重启服务,需要关闭selinux
-b: 指定连接的源IP
ip addr add 192.168.33.15./24 dev etho #给网卡加别名
ssh -b
-v: 调试模式
-C :压缩方式
-X: 支持x11 转发 #使用远程主机图形工具
-Y :支持信任x11 转发 #默认都支持的
ForwardX11Trusted yes
-t: 强制伪tty 分配
ssh -t remoteserver1 ssh remoteserver2
允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh 服务器时,会复制ssh 服务器
/etc/ssh/ssh_host*key.pub (centos7 默认是 ssh_host_ecdsa_key.pub )
文件中的公钥到客户机的~./ssh/know_hosts 中。
下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
基于密钥的认证:
(1) 在客户端生成密钥对
ssh-keygen -t rsa [-P ”] [-f “~/.ssh/id_rsa”]
#[]都可以省略,直接ssh-keygen,该命令可以补全
(2) 把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [user@]host
#ssh-copy-id -i ~/.ssh/id_rsa shewei@172.18.12.11
默认自动拷贝公钥,路径要选择文件所在目录
(3) 测试
(4) 在SecureCRT ,Xshell 或实现基于key 验证
在SecureCRT 工具—> 创建公钥—> 生成Identity.pub 文件
转化为openssh 兼容格式(适合SecureCRT ,Xshell 不需要转化
格式),并复制到需登录主机上相应文件authorized_keys 中,
注意权限必须为600 ,在需登录的ssh 主机上执行:
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5) 重设私钥口令:#ssh-keygen –p
(6) 验证 代理(authentication agent )保密解密后的密钥
• 这样口令就只需要输入一次
• 在 在GNOME 中,代理被自动提供给root 用户
• 否则运行ssh-agent bash
(7) 钥匙通过命令添加给代理
ssh-add #先用6验证代理,然后7添加到代理,每次重启失效
scp 命令:
scp [options] SRC… DEST/
两种方式:
scp [options] [user@]172.18.12.12 : /sourcefile /destpath
远程到本地
scp [options] /sourcefile [user@]172.18.12.12:/destpath
本地到远程
常用选项:
-C: 压缩数据流
-r: 递归复制 #复制目录需要递归
-p: 保持原文件的属性信息
-q: 静默模式
-P PORT: 指明remote host 的监听的端口
rsync 命令:
基于ssh 和rsh 服务实现高效率的远程系统之间复制文件
使用安全的shell 连接做为传输方式
• rsync –av /etc 172.18.12.11:/tmp 复制目录和目录下文件
• rsync –av /etc/ 172.18.12.11:/tmp 只复制目录下文件
目标地址,注意 / 有区别
比scp 更快,只复制不同的文件,
选项:
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 把 把 符号链接文件做为符号文件 进行复制(默认)
-L 将软链接文件指向文件复制
-a 存档,相当于–rlptgoD ,但不保留ACL (-A )和SELinux 属性(-X) )
交互式文件传输工具sftp 命令:
用法和 传统的ftp 工具相似
利用ssh 服务实现安全的文件上传和下载
使用ls cd mkdir rmdir pwd get put 等指令, 可用?或help获取帮助信息
sftp [user@]host #sftp 172.18.12.11
sftp> help
什么是SSH 端口转发?
SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。
但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发\
并且自动提供了相应的加密及解密服务。这一过程也 被叫做“隧道”
(tunneling ),这是因为 SSH 为其他 TCP 链接提供了一个安全的通
道来进行传输而得名。例如,Telnet ,SMTP ,LDAP 些 这些 TCP 应用均
能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,
如果工作环境中的防火墙限制了一些网络端口的使用,但是允许
SSH的连接 ,也能够通过将 TCP 端口转发来使用 SSH 进行通讯
SSH 端口转发能够提供两大功能:
• 加密 SSH Client 端至 SSH Server 端之间的通讯数据
• 突破防火墙的限制完成一些之前无法建立的 TCP 连接
本地转发:
-L localport:remotehost:remotehostport sshserver
选项:
-f 后台启用
-N 不打开 远程shell ,处于等待状态
-g 启用网关功能
示例 : #需要再客户端运行
ssh -L 9527:172.18.12.11:23 172.18.12.12
开启本地9527端口到目标主机23端口,同时开启本地随机端口到
跳板机ssh端口22,经过跳板机172.17.12.12
然后访问本机的9527 的端口时,被加密后转发到跳板机的ssh 服务,
在本机打开另外客户端 :访问 #telnet 127.0.0.1 9527 可到达目标
可这样理解: Data ——sshsrv:9527 ——–sshsrv:22——-
localhost:XXXXX ——localhost:YYYYY——-telnetsrv:23
远程转发:
-R sshserverport:remotehost:remotehostport sshserver
示例:
ssh –R 9527:telnetsrv:23 –N sshsrv
ssh -R 9527:目标主机地址:23 -N 客户端地址
# ssh -R 9527:172.182.12.11:23 -N 客户端地址
然后客户端运行: #telnet 127.0.0.1 9527 可到达目标
让sshsrv 侦听9527 端口的访问,如有访问,就加密后通过ssh
服务转发请求到本机ssh 客户端,再由本机解密后转发
到telnetsrv:23
Data —–sshsrv:9527 ——–sshsrv:22——-
localhost:XXXXX —–localhost:YYYYY——– telnetsrv:23
动态端口转发:
当用firefox 访问internet 时,本机的1080 端口做为代理服务器,
firefox 的访问请求被转发到sshserver 上,由sshserver替之访问internet
在本机firefox 设置代理socket proxy:127.0.0.1:1080
#ssh -D 1080 root@sshserver
ssh -D 9527 172.18.12.12 #打开本地端口9527,指定代理地址
然后在linux浏览器中高级设置网络中填写127.0.0.1 9527,保存访问
服务器端:sshd, 配置文件: /etc/ssh/sshd_config
服务器软件包:openssh-server
常用参数:
Port
ListenAddress ip
PermitRootLogin yes
ClientAliveInterval 和ClientAliveCountMax
UseDNS #反向解析域名 no 不允许
MaxStartups 最大允许保持多少个未认证连接 。默认值10
MaxSessions 同一个连接最大会话最大默认100
限制可登录用户的办法:
AllowUsers user1 user2 user3 #白名单
DenyUsers #黑名单
AllowGroups #组的白名单
DenyGroups #组的黑名单
ssh 服务的最佳实践
要使用默认端口
禁止使用protocol version 1
限制可登录用户
设定空闲会话超时时长
利用防火墙设置ssh 访问策略
仅监听特定的IP地址
基于口令认证时,使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
使用 基于密钥的认证
禁止 使用空密码
禁止root 用户直接登录
限制ssh 的访问频度和并发在线数
做好日志,经常分析
ssh 协议的另一个实现:dropbear #抛弃的狗熊..
安装准备:
• 1 、安装开发包组:
• 2 、ftp://172.16.0.1/pub/Sources/sources/dropbear
• /dropbear-2013.58.tar.bz2
安装:
• 3 、tar xf dropbear-2013.58.tar.bz2,
• 4 、less INSTALL #建议查看安装文件
• 5 、./configure
• 6 、make PROGRAMS=”dropbear dbclient dropbearkey
dropbearconvert scp” #安装的功能,直接make都安装
• 7 、make PROGRAMS=”dropbear dbclient dropbearkey
dropbearconvert scp” install
启动ssh 服务:
• 8 、ls /usr/local/sbin/ /usr/local/bin/
• 9 、/usr/local/sbin/dropbear -h #查看帮助
• 10 、mkdir /etc/dropbear #此文件需要手动生成
• 11 、dropbearkey -t rsa -f #生成秘钥对,文件名帮助里有
/etc/dropbear/dropbear_rsa_host_key -s 2048
• 12 、dropbearkey -t dss -f #这是另外一种加密
/etc/dropbear/dropbear_dsa_host_key
• 13 、dropbear -p 2222 -FE # 前台运行
dropbear -p 2222 # 后台运行
客户端访问:
• 14 、ssh -p 2222 root@127.0.0.1
• 15 、dbclient -p 2222 root@127.0.0.1
AIDE: #高级的入侵检测环境
当一个入侵者进入了你的系统并且种植了木马,通常会想
办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,
他会尽量给你检查系统的过程设置障碍),通常入侵者会
修改一些文件,比如管理员通常用ps -aux 来查看系统进
程,那么入侵者很可能用自己经过修改的ps 程序来替换掉
你系统上的ps 程序,以使用ps 命令查不到正在运行的木马
程序。如果入侵者发现管理员正在运行crontab 作业,也
有可能替换掉crontab 程序等等。所以由此可以看出对于
系统文件或是关键文件的检查是很必要的。目前就系统完
整性检查的工具用的比较多的有两款:Tripwire 和AIDE
,前者是一款商业软件,后者是一款免费的但功能也很强
大的工具
AIDE(Adevanced Intrusion Detection Environment)
• 高级入侵检测环境) 是一个入侵检测工具,主要用途是检查文件的
完整性,审计计算机上的那些文件被更改过了。
• AIDE 能够构造一个指定文件的数据库,它使用aide.conf 作为其配
置文件。AIDE 数据库能够保存文件的各种属性,包括:权限
(permission) 、索引节点序号(inode number) 、所属用户(user)、
所属用户组(group) 、文件大小、最后修改时间(mtime) 、创建时间
(ctime) 、最后访问时间(atime) 、增加的大小以及连接数。AIDE
还能够使用下列算法:sha1 、md5 、rmd160 、tiger ,以密文形式
建立每个文件的校验码或散列号.
• 这个数据库不应该保存那些经常变动的文件信息,例如:日志文件
、邮件、/proc 文件系统、用户起始目录以及临时目录.
安装
yum install aide
修改配置文件
vim /etc/aide.conf ( 指定对哪些文件进行检测)
例如:
# matches. e.g. Put file matches before directories.
/app DATAONLY #监控此目录 后面是监控的内容
!/app/f1 #这表示不监控此文件
注意:默认 matches下面有很多监控目录,建议删除,自己选择目录监控
更改完成后生成数据库:aide –init
然后找到对应的数据库目录/var/lib/aide/ 把文件改名,删除其中的new
使用aide –check 检测,
中途做了修改可以更新数据库或者重新生成,使用时需要重命名,删除new
技巧:export EDITOR=vim #设置模式编辑器vim,
sudo:
sudo 能够授权指定用户在指定主机上运行某些命令,
如果未授权用户用尝试使用sudo
sudo 可以提供日志,记录每个用户使用sudo
sudo 为系统管理员提供配置文件,允许系统管理员集中地
管理用户的使用权限和使用的主机
sudo 使用时间戳文件来完成类似“检票”的 系统,默认存
活期为5 分钟的 “入场券”
通过visudo 命令编辑配置文件,具有语法检查功能
配置文件:/etc/sudoers, /etc/sudoers.d/
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob: :
?: 任意单一字符
* :匹配任意长度字符
[wxc]: 匹配其中一个字符
[!wxc]: 除了这三个字符的其它字符
\x : 转义
[[alpha]] : 字母 : 示例: /bin/ls [[alpha]]*
配置文件规则有两类 ;
1 、别名定义: 不是必须的
2 、授权规则: 必须的
授权规则格式: #使用 :visudo命令,更改规则
用户 登入主机=( 代表用户) 命令
示例:
root ALL=(ALL) ALL #其中命令需要绝对匹配,少个/都不行
exam: shewei ALL=/bin/cat /etc/shadow,/bin/mount /dev/sr0/ /mnt/
注意:这里的root是个安全漏洞,如果root是普通用户,可以代替管理员操作
su -u 管理员 passwd 管理员 #可以直接运行管理员命令
格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas) : 以哪个用户的身份
command: 运行哪些命令 #这里可以直接选择目录/bin
用户和命令都支持别名定义:
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL= (root) ) NETCMD
!/usr/bin/passwd root #排除此命令
注意: %wheel ALL=(ALL) ALL #这个组里的用户权限也大
sudo 命令:
ls -l /usr/bin/sudo
sudo –i –u wang 切换身份
sudo [-u user] COMMAND
-V 显示 版本 信息等配置信息
-u user 默认为root
-l 列出用户在主机上可用的和被禁止的命令
-K 与-k 类似,还要删除 时间戳文件
-b 在后台执行指令
原创文章,作者:shewei,如若转载,请注明出处:http://www.178linux.com/73257