Linux安全和加解密(三)

本文主要介绍:1、ssh服务 2、基于SSH的客户端相关工具 3、SSH端口转发 4、dropbear编译安装 5、AIDE 6、sudo

一、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    后面的文件也可查看

要精确成以下格式:

图片1

防漏洞(!后面有空格)

 

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

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班