一、SSH服务
1、ssh简介:
ssh: secure shell, protocol, 22/tcp, 安全的远程登录 安全高于telnet,被抓包也不会泄露
具体的软件实现:
OpenSSH: ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现
SSH协议版本
v1: 基于CRC-32做MAC,不安全;man-in-middle
v2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证
两种方式的用户登录认证:
基于password
基于key (掌握!!!生产中常用)
2、Openssh软件组成
相关包:
openssh
openssh-clients 客户端
openssh-server 服务器端
工具:
基于C/S结构
Client: ssh,scp,sftp,slogin
Windows客户端: xshell,putty,SecureCRT,sshsecureshellclient
Server: sshd
3、ssh客户端
客户端组件:
ssh, 配置文件:/etc/ssh/ssh_config 服务器端文件/etc/ssh/sshd_config
Host PATTERN
StrictHostKeyChecking no 首次登录不显示检查提示
CheckHostIP no 检查远程连接的主机是否可信赖,根据第一次连接时远程主机的秘钥对(/root/.ssh/known_hosts),防止假冒;
补充:若要假冒,盗取对方的私钥文件 /etc/ssh/ssh_host_rsa_key,属组改成ssh_keys(参考别的秘钥对)
4、获取关于服务配置文件的帮助:man sshd_config
/etc/ssh/sshd_config配置文件简介:(#开始的选项表示默认值)
Port 22 指明ssh服务监听的端口 修改之后不影响已连接用户,新连接要更改
ListenAddress IP_ADDR 表示监听的地址,可出现多次 0.0.0.0表示当前主机的所有地址
SyslogFacility AUTHPRIV 日志存放路径,/etc/rsyslog.conf文件中有相关定义,此处表示/var/log/secure
LogLevel INFO 表示定义记录的日志级别
PermitRootLogin yes|no 是否允许管理员以ssh登录 生产中常禁止no
MaxAuthTries 6 表示认证时的重试次数,为此数字的一半,超过次数后会被锁定一定时间
MaxSessions 10 同一个连接最大会话 即一个连接最多开几个克隆
AllowUsers 接受那些用户使用ssh,做用户白名单,只要不在此名单内的用户,都不允许登录
如:AllowUsers nwc1 nwc2 nwc3 root
DenyUsers 不允许那些用户使用ssh,用户黑名单 优先级高于白名单
AllowGroups 接受那些用户组使用ssh,组的白名单
DenyGroups 不允许那些用户组使用ssh,组黑名单
白名单和黑名单不要同时使用
X11Forwarding yes|no 是否转发图形窗口
#ServerKeyBits 1024 密钥长度
#LoginGraceTime 2m 登陆宽限期
#PermitRootLogin yes root是否可以登录
#StrictModes yes 严格模式,检查 .ssh/文件的所有者,权限等
PasswordAuthentication yes 是否使用用户名和密码的方式,可禁用,基于key更安全
PubkeyAuthentication yes 是否允许公钥认证
Kerberos 集中认证管理
5、SSH服务的最佳实践方案:
1)禁止使用protocol version 1 禁止使用老版本
2)限定仅允许哪些用户访问ssh服务
白名单 Allowusers root vivek jerry
黑名单 DenyUser saroj anjali foo
3)配置空闲会话超时长
ClientAliveCountMax 0
ClientAliveInterval 300
4)使用iptables设置ssh服务安全访问策略
5)改变默认的端口和监听的IP 勿使用默认22端口!!!
port 300
ListenAddress 192.168.1.5
ListenAddress 202.54.1.5
6)使用基于密钥的认证
7)禁止空密码登录
8)禁止root用户直接登录
9)限制ssh访问频度
10)记录好日志,经常做日志分析 lastb命令查看访问失败记录
11)基于口令认证时,使用强密码策略 tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
6、用户登录信息的获取:
/var/log/wtmp 用户成功登录的日志信息,也可直接用 last 命令显示
/var/log/btmp 用户失败登录的日志信息,也可用 lastb 命令显示
lastlog 每个用户最近一次成功登录的信息
7、客户端ssh命令
格式:ssh [user@]host [COMMAND] 可以连接与命令一步执行
ssh [-l user] host [COMMAND]
-p port 远程服务器监听的端口
-b 指定连接的源IP
-v 调试模式 查看连接过程
-C 压缩方式 局域网一般带宽够,不用
-X 支持x11转发 支持使用所连接主机上的图形工具,例:xclock (centos6.9有此命令)
-Y 支持信任x11转发
ForwardX11Trusted yes
-t 强制伪tty分配 堡垒机/跳板机:做记录
例:ssh -t host1 ssh host2
本机无法直连host2,以host1做跳板连接host2
8、ssh服务登录验证
- 基于用户和口令登录验证
1 客户端发起ssh请求,服务器会把自己的公钥发送给用户
2 用户会根据服务器发来的公钥对密码进行加密
3 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
- 基于密钥的登录方式
1 首先在客户端生成一对密钥(ssh-keygen)
2 并将客户端的公钥ssh-copy-id 拷贝到服务端
3 当客户端再次发送一个连接请求,包括ip、用户名
4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:acdf
5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
7服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
- 基于密钥的认证: 须掌握!!!
(1) 在客户端生成密钥对
ssh-keygen [-t rsa [-P ”] [-f “~/.ssh/id_rsa”] ] 交互,-t指定加密方法,可不写 -f生成指定文件
(2) 把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [user@]host
-i指定公钥所在文件,这里写私钥文件会自动发送公钥,不写文件系统也会默认搜寻
(3) 测试 :scp文件过去不用输入密码
(4) 在SecureCRT或Xshell实现基于key验证
在SecureCRT工具—>创建公钥—>生成Identity.pub文件
转化为openssh兼容格式,并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
注意!Xshell中生成的文件不需要转化格式,直接复制上述文件中,其它步骤同上。
(5)重设私钥口令:
ssh-keygen -p 交互式命令
(6)验证代理(authentication agent)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供给root用户
否则运行ssh-agent bash 重启后服务关闭,手动开启
(7)钥匙通过命令添加给代理
ssh-add 交互命令
二、基于SSH的客户端相关工具
1、scp命令
相同的文件传多少遍都会再次整个传,效率较低
两种方式:
scp [options] [user@]host:/sourcefile /destpath 从别处传文件到自己的指定目录下
scp [options] /sourcefile [user@]host:/destpath 传文件给别人指定目录下
常用选项:
-C 压缩数据流
-r 递归复制
-p 保持原文件的属性信息
-q 静默模式
-P PORT 指明remote host的监听的端口 目标服务器的端口不是标准端口时
2、rsync命令
基于ssh和rsh服务实现高效率的远程系统之间复制文件
使用安全的shell连接做为传输方式
rsync –av /etc server1:/tmp 复制目录和目录下文件
rsync –av /etc/ server1:/tmp 只复制目录下文件
比scp更快,只复制不同的文件 效率更高 增量型复制
常用选项:
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
3、sftp命令
交互式文件传输工具
用法和传统的ftp工具相似
利用ssh服务实现安全的文件上传和下载
使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息
sftp [user@]host
sftp> help
4、pssh工具
pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制
选项如下:
–version:查看版本
-h:主机文件列表,内容格式”[user@]host[:port]”
-H:主机字符串,内容格式”[user@]host[:port]”
连接多个主机 -H XX -H XX或-H XX XX用空格分开
-l:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输入文件【可选】
-t:TIMEOUT 超时时间设置,0无限制【可选】
-O:SSH的选项
-v:详细模式
-A:手动输入密码模式 若基于key验证后不用这个
-x:额外的命令行参数使用空白符号,引号,反斜线处理
-X:额外的命令行参数,单个参数模式,同-x
-i:每个服务器内部处理信息输出
-P:打印出服务器返回信息
5、PSCP.PSSH命令
pscp.pssh功能是将本地文件批量复制到远程主机
pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote
Pscp-pssh选项
-v 显示复制过程
-a 复制过程中保留常规属性
-r 递归复制目录
示例:
将本地curl.sh 复制到/app/目录
pscp.pssh -h host.txt /root/test/curl.sh /app/ 本机文件 批量主机指定目录
将本地多个文件批量复制到/app/目录
pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/
将本地目录批量复制到/app/目录
pscp.pssh -H 192.168.1.10 -r /root/test/ /app/
6、PSLURP.PSSH命令
pslurp.pssh功能是将远程主机的文件批量复制到本地
pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir]
remote local(本地名)
Pslurp-pssh选项
-L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称
-r 递归复制目录
-h IP地址汇总文件,同上
示例:
批量下载目标服务器的passwd文件至/app下,并更名为user
pslurp -H 192.168.1.10 -L /app/ /etc/passwd user指定本机目录 远程主机文件 文件在本机上新名
三、SSH端口转发
1、SSH端口转发
SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯。
SSH 端口转发能够提供两大功能:
加密 SSH Client 端至 SSH Server 端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的 TCP 连接
2、本地转发:(本机在外网,目标是访问公司内网某台服务器)
-L localport:remotehost:remotehostport sshserver
注释:本机连接本机端口:远程主机地址:远程主机端口号 中间服务器地址
选项:
-f 后台启用 启用后台退出只能ps aux|grep ssh,kill进程号,不启用后台会变成前台等待状态
-N 不打开远程shell,处于等待状态 不自动登录中间主机
-g 启用网关功能
示例
ssh –L 9527:telnetsrv:23 -N sshsrv 客户端连接本机端口:远程主机地址:远程主机端口号 中间服务器地址
telnet 127.0.0.1 9527
过程简介:当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
即:data — localhost:9527本机端口— localhost:XX本机另开端口— sshsrv:22 — sshsrv:YY中间主机— telnetsrv:23 远程主机,端口
补充:不让用root账号连接,只能普通用户
3、远程转发: (本机在内网,目标是让外网的客户端访问内部某台服务器)
-R sshserverport:remotehost:remotehostport sshserver外界机端口:右边主机IP:右边主机端口 外界主机IP
示例:
ssh –R 9527:telnetsrv:23 –N sshsrv
过程简介:让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
即:Data sshsrv:9527互联网机 sshsrv:22互联网机 localhost:XXX本机 localhost:YYY本机 telnetsrv:23目标服务器
4、动态端口转发:
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
ssh -D 1080 root@sshserver
在本机firefox设置代理socket proxy:127.0.0.1:1080
curl –socks5 127.0.0.1:1080 http://www.qq.com
5、X 协议转发
所有图形化应用程序都是X客户程序
能够通过tcp/ip连接远程X服务器
数据没有加密机,但是它通过ssh连接隧道安全进行
ssh -X user@remotehost gedit
remotehost主机上的gedit工具,将会显示在本机的X服务器上
传输的数据将通过ssh连接加密
四、dropbear编译安装
ssh协议的另一个实现:dropbear
源码编译安装:
1、安装开发包组 yum -y groupinstall “Development tools”
2、下载源码包 dropbear-2018.76.tar.bz2
3、解压 tar xf dropbear-2018.76.tar.bz2
4、查看安装帮助手册 less INSTALL | README
5、进入解压后目录后 ./configure –prefix=/data/dropbear/ –sysconfdir=/etc/dropbear/
./configure –help查看帮助
6、make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvertscp”
指定要安装的工具, 若scp安装失败,不影响
7、make 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 -F –E #前台运行
因为本机有SSH,为了避免端口冲突,手动指定其运行在2222端口
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(Advanced 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 (指定对哪些文件进行检测)
/test/chameleon R
/bin/ps R+a
/usr/bin/crontab R+a
/etc PERMS
!/etc/mtab #“!”表示忽略这个文件的检查
R=p+i+n+u+g+s+m+c+md5
权限+索引节点+链接数+用户+组+大小+最后一次修改时间+创建时间+md5校验值
NORMAL = R+rmd60+sha256
初始化默认的AIDE的库:
/usr/local/bin/aide –init
生成检查数据库(建议初始数据库存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
检测:
/usr/local/bin/aide –check
更新数据库
aide –update
六、更改身份
su 切换身份:su –l username –c ‘command‘
sudo
来自sudo包
man 5 sudoers
sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
sudo可以提供日志,记录每个用户使用sudo操作
sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
通过visudo命令编辑配置文件,具有语法检查功能visudo –c 检查语法
sodo相关文件:
配置文件:文件/etc/sudoers 目录 /etc/sudoers.d/
授权者建议写在目录下方便管理,授权之后普通用户也不能直接使用命令,格式 sudo COMMAND
时间戳文件: centos6 :/var/db/sudo/
centos7 : /var/run/sudo/ts/ (目录下生成授权对象名字的文件)
日志文件:/var/log/secure
配置文件支持使用通配符glob:
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
[[alpha]] 字母 示例: /bin/ls [[alpha]]*
配置文件规则有两类:
1、别名定义:不是必须的
2、授权规则:必须的
授权规则格式:
user host=(runas) command
格式说明:
user: 运行命令者的身份 wang ALL=(mage) ALL mage有的权限wang都有
host: 通过哪些主机
(runas):以哪个用户的身份 不写默认root
command: 运行哪些命令 wang ALL=(mage) NOPASSWD:ALL 不用输口令
示例:
root ALL=(ALL) ALL
补充: 执行命令时要精确 sudo mount /dev/cdrom /mnt/少个符号都不行
sudo别名和示例
Users和runas:
username
#uid 例: #1001 ALL=(ALL) ALL
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
别名有四种类型:User_Alias ,Runas_Alias ,Host_Alias ,Cmnd_Alias
别名格式:[A-Z]([A-Z][0-9]_)* 大写字母开头
别名定义:
Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5
别名名字 = 组成。。。:别名名字 = 组成
示例1
User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS= SYDCMD,DSKCMD 这里没写Runas则默认root
DISKADER ALL=(OP) DSKCMD
示例2
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd, /usr/sbin/usermod,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
示例3
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL 默认Tom,需要jerry时sudo -u jerry
示例4
wang 192.168.175.136,192.168.175.138=(root) /usr/sbin/,!/usr/sbin/useradd
这里命令写的目录,则目录下所有命令都可用
注意!若这样授权 wang ALL=(ALL) /bin/cat /var/log/messages* 会有漏洞!
例: wang用户执行 /bin/cat /var/log/messages /etc/passwd 后面的文件也可查看
要精确成以下格式:
防漏洞(!后面有空格)
sudo命令
ls -l /usr/bin/sudo
sudo –i –u wang 切换身份 依赖性较大,类似于su -,没su 好用
sudo [-u user] COMMAND
-V 显示版本信息等配置信息 编译选项、配置文件等
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令,格式不一样,内容一样,su – bican;sudo -l或-ll
-v 再延长密码有效期限5分钟,更新时间戳 su – bican ; sudo -v
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
示例:-p ”password on %h for user %p:” %h 主机名 %p 用户名
sudoedit命令,若授权普通用户bican执行此命令/usr/bin/sudoedit,
bican ALL=(ALL) sudoedit;
su – bican;
sudoedit /var/run/sudo/ts可以直接编辑自己的权限,无敌!
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/99826