openssl&openssh

安全和加密


不加密流量的易受攻击性

      密码/数据嗅探

      数据操作

      验证操作

      相当于邮寄明信片

不安全的传统协议

      telnet、FTP、POP3等等;不安全密码

      http、smtp、NFS等等;不安全信息

      Ldap、NIS、rsh等等;不安全验证

  

NIST(美国国家标准与技术研究院)定义的安全属性:

    保密性:

数据保密性

隐私性

    完整性:不可篡改

数据完整性

系统完整性

    可用性

安全攻击: STRIDE

    Spoofing(假冒)、Tampering(篡改)、Repudiation(否认)、Information Disclosure(信息泄漏)、Denial of Service(拒绝服务)和 Elevation of Privilege(提升权限)

安全机制:

    加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证

  

安全服务:

    认证

    访问控制

    数据保密性

连接保密性

无连接保密性

选择域保密性

流量保密性

    数据完整性

    不可否认性

  

设计基本原则

    使用成熟的安全系统

    以小人之心度输入数据

    外部系统是不安全的

    最小授权

    减少外部接口

    缺省使用安全模式

    安全不是似是而非

    从STRIDE思考

    在入口处检查

    从管理上保护好你的系统

常用安全技术

    认证

    授权

    安全通信

    审计

    

密码算法和协议:

    对称加密

    公钥加密

    单向加密

    认证协议

    

Linux系统:OpenSSL, gpg(pgp协议的实现)

1、对称加密

 特性:

1、加密、解密使用同一个密钥,效率高

2、将原始数据分割成固定大小的块,逐个进行加密

 算法:

DES:Data Encryption Standard,56bits

3DES:使用DES加密三次

AES:Advanced (128, 192, 256bits)

Blowfish,Twofish

IDEA,RC6,CAST5

 缺陷:

1、密钥过多

2、密钥分发困难

3、数据来源无法确认

    

2、非对称加密算法(公钥加密)

公钥:公开给所有人;public key

私钥:自己留存,必须保证其私密性;secret key

     特点:密钥成对出现;用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

     功能:

   数字签名:主要在于让接收方确认发送方身份

   对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方

   数据加密:适合加密较小数据

     缺点:密钥长,加密解密效率低下

     算法:RSA(加密,数字签名),DSA(数字签名),ELGamal

     (1)实现数字签名:使用自己的私钥加密

 发送者A

     生成公钥/私钥对:P和S

     公开公钥P,保密私钥S

     使用自己的私钥S来加密消息data

     将S(data)发送给接收者B

 接收者B

     使用发送者A的公钥P来解密data=P(S(data))

     

     (2)实现加密:使用对方的公钥加密

 接收者B

     生成公钥/私钥对:P和S

     公开公钥P,保密私钥S

 发送者A

     使用接收者B的公钥P来加密消息data

     将P(data)发送给接收者A

 接收者B

     使用自己的公钥S来解密:data=S(P(data))

3、单向加密

        特点:

     将任意数据缩小成固定大小的“指纹”

任意长度输入

固定长度输出

若修改数据,指纹也会改变(“不会产生冲突”)

无法从指纹中重新生成数据(“单向”)

       功能:确保数据完整性

算法:md5: 128bits、sha1: 160bits、sha224sha256、sha384、sha512

  

4、密钥交换:IKE( Internet Key Exchange )

     公钥加密:

     DH (Deffie-Hellman):

 1、A: a,p 协商生成公开的整数a, 大素数p

     B: a,p

 2、A:生成隐私数据 😡 (x<p ),计算得出 a^x%p,发送给B

     B:生成隐私数据 :y (y<p ),计算得出 a^y%p,发送给A

 3、A:计算得出 (a^y%p)^x = a^xy%p,生成为密钥

     B:计算得出 (a^x%p)^y = a^xy%p, 生成为密钥

            

CA和证书

     PKI: Public Key Infrastructure

   签证机构:CA(Certificate Authority)

   注册机构:RA

   证书吊销列表:CRL

   证书存取库:

 X.509:定义了证书的结构以及认证协议标准

     版本号

     主体公钥

     序列号

     CRL分发点

     签名算法

     扩展信息

     颁发者

     发行者签名

     有效期限

     主体名称

   证书获取

   证书类型:

 证书授权机构的证书

 服务器

 用户证书

   获取证书两种方法:

 使用证书授权机构

生成签名请求(csr)

将csr发送给CA

从CA处接收签名

 自签名的证书

自已签发自己的公钥

     安全协议

     SSL: Secure Socket Layer

     TLS: Transport Layer Security

     1995:SSL 2.0 Netscape

     1996: SSL 3.0

     1999: TLS 1.0

     2006: TLS 1.1 RFC( Request For Comments ) 4346

     2008:TLS 1.2 当前使用

     2015: TLS 1.3

     功能:机密性,认证,完整性,重放保护

两阶段协议,分为握手阶段和应用阶段

      握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。

      应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信。

SSL/TLS

  Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换

  ChangeCipherSpec 协议:一条消息表明握手协议已经完成

  Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告

  Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等

  HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输

OpenSSL:开源项目

三个组件:

   openssl: 多用途的命令行工具

   libcrypto: 加密算法库

   libssl:加密模块应用库,实现了ssl及tls

openssl命令:

 两种运行模式:交互模式和批处理模式

 openssl version:程序版本号

 标准命令、消息摘要命令、加密命令

 标准命令:enc, ca, req, …

   注:查看支持的加密算法:openssl ?

 1、对称加密

enc命令:man enc

#  加密  openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher

#  解密  openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile

 -e:加密

 -d:解密

 -des3:指明des3加密算法

 -a:编码为文本,可放于文件中,默认编码为二进制文件

 -salt [xxxx]:杂质,可手动指明字母或数字,默认随机添加,最长8位

 -in:输入文件

 -out:输出文件

       注:

   回车后键入密码

   加密不会删除源文件

2016-09-22 21-27-05 的屏幕截图.png

2、非对称加密(公钥加密)

genrsa命令:man genrsa

#   生成私钥     openssl genrsa  {-out|>} /PATH/TO/PRIVATEKEY.FILE  [-des] NUM    键入回车后设置私钥密码

#   提取公钥     openssl rsa -in /PATH/TO/PRIVATEKEY.FILE -pubout -out /PATH/TO/PUBLICKEYFILE     键入回车后输入私钥密码

                       -des:对私钥进行des加密保护

                      NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2

                          注:

                       生成的私钥权限应仅自己有读写权限可使用以下命令,括号表示在子shell中运行生成私钥,并设置其umask权限,此时生成的私钥仅属主有读写权限

                       (umask 077; openssl genrsa -out key.pri -des 2048)

2016-09-22 21-38-43 的屏幕截图.png

2016-09-22 21-40-12 的屏幕截图.png

3、单向加密

dgst命令:man dgst

   #  计算文件特征码  openssl dgst -md5 [-hex] filename

注:md5sum filename

2016-09-22 22-02-56 的屏幕截图.png

4、生成用户密码:

     passwd命令:man sslpasswd

     #    openssl passwd -1 -salt [xxxx] 密码口令

     -1:指明加密算法(1表示md5算法)

     -salt [xxxx]:杂质,可手动指明字母或数字,默认随机添加,最长8位

 示例:openssl passwd -1 salt centos

openssl passwd -1 salt $(openssl rand -hex 4)  使用随机数生成器结果作为杂质

2016-09-22 22-08-12 的屏幕截图.png

5、生成随机数:

   sslrand命令:man sslrand

   #    openssl rand {-base64|-hex} NUM

-base64:使用base64编码,所有文本均可

-hex:使用十六进制数字编码使用,只使用0-f之间的字符进行编码,默认

NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2

     注:默认生成的随机数为二进制编码

   linux系统上的随机数生成器

/dev/random:仅从熵池返回随机数;随机数用尽,将阻塞后面的进程,等待更多的随机数生成

/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞,伪随机数不够安全

   熵池:运行中的内核在内存维护的地址空间,从中存储大量的随机数,开机时为空,剪切使用

   来源:各种I/O中断之间的时间间隔

键盘和鼠标:相邻击键间的时间差

块设备中断:硬盘IO中断时间间隔

2016-09-22 22-09-51 的屏幕截图.png

1、使用gpg实现对称加密

       在hostB主机加密,在hostA主机上解密;在同一台主机上操作时无需密码即可解密

          加密:在hostB主机加密

                    gpg -c file   回车后输入密码

                    ls file.gpg

2016-09-22 22-13-36 的屏幕截图.png

          解密:在hostA主机上解密

                    gpg -o file -d file.gpg   回车后输入密码

                        -o:解密后保存在文件

2016-09-22 22-16-05 的屏幕截图.png

2、使用gpg工具实现公钥加密

       在hostB主机上用hostA的公钥加密,在hostA主机上解密

    (1)在hostA主机上生成公钥/私钥对

        gpg –gen-key     回车后选择加密算法,密钥长度,有效期,确认信息y/N,user_id,属主邮箱,描述,是否接受,密钥密码

2016-09-22 22-34-36 的屏幕截图.png      

2016-09-22 22-36-39 的屏幕截图.png  

    (2)在hostA主机上查看公钥

        gpg –list-keys

2016-09-22 22-37-14 的屏幕截图.png

    (3)在hostA主机上导出公钥到keyA.pub

        gpg -a –export -o keyA.pub

2016-09-22 22-38-54 的屏幕截图.png        

    (4)从hostA主机上复制公钥文件到需加密的B主机上

        scp keyA.pub hostB:

       

    (5)在hostB主机上导入hostA主机的公钥

        gpg –import keyA.pub

        gpg –list-keys

2016-09-22 22-52-37 的屏幕截图.png

    (6)用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg

        gpg -e -r user_id file    

        ls file.gpg

    2016-09-22 22-55-11 的屏幕截图.png    

2016-09-22 22-55-39 的屏幕截图.png

    (7)复制加密文件到hostA主机

        scp file.gpg hostA:

    (8)在hostA主机解密文件

        gpg -d file.gpg

        gpg -o file -d file.gpg

            -o:解密后保存在文件

2016-09-22 22-58-18 的屏幕截图.png

    (9)删除公钥和私钥(公钥与私钥成对存在是,先删除私钥再删除公钥)

        gpg –delete-secret-keys user_id      删除该私钥    

        gpg –delete-keys user_id             删除该公钥

2016-09-22 23-00-56 的屏幕截图.png

2016-09-22 23-01-18 的屏幕截图.png

   PKI:Public Key Infrastructure   公共密钥加密体系

   CA

   RA

   CRL

   证书存取库

   建立私有CA:

     openssl

     OpenCA:开源CA工具,基于openssl

          注:在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可

   证书申请及签署步骤:

     1、生成申请请求

     2、RA核验

     3、CA签署

     4、获取证书

创建私有CA:

    openssl的配置文件:/etc/pki/tls/openssl.conf   其中定义了CA的各种配置

      CA的配置:

            /etc/pki/CA/  工作目录

        新建:

            /etc/pki/CA/serial  当前主机序列号码    

            /etc/pki/CA/index.txt  已经颁发的证书索引            

            /etc/pki/CA/private/cakey.pem  CA自己的私钥

            /etc/pki/CA/cacert.pem  CA的自签证书            

        存在:

            /etc/pki/CA/private/   CA的私钥放置目录

            /etc/pki/CA/newcerts/  尚未签署的证书放置处    

            /etc/pki/CA/certs/  已经签署的证书

            /etc/pki/CA/crl/  已经吊销的证书   

        注:policy客户端与CA之间标有match的选项必须相同,countryName,stateOrProvinceName,localityName        

      (1) 创建所需要的文件

            (a) touch /etc/pki/CA/index.txt

            (b) echo 01 > /etc/pki/CA/serial

      (2) CA自签证书

            (a)生成私钥

                cd /etc/pki/CA/

                (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem [-des] 2048)  

                    注:cakey.pem文件名必须与配置文件中对应,自定义文件名时需修改配置文件使其与之相同

            (b)生成自签证书

                openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem

                -new: 生成新证书签署请求

                -x509: 专用于CA生成自签证书

                -key: 生成请求时用到的私钥文件

                -days n:证书的有效期限

                -out /PATH/TO/SOMECERTFILE : 证书的保存路径

      键入回车后输入country name,state province name,local name,organzation name,organzation unit name,common name(hostname),mail address

            (c)查看证书信息:

                 openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -text|subject|serial|dates

      (3) 申请证书

            (a)  生成私钥(以web服务为例)

                        mkdir /etc/httpd/ssl

                        cd /etc/httpd/ssl

                        (umask 066; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

            (b)  生成申请证书

                        openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr

       键入回车后输入country name,state province name,local name,organzation name,organzation unit name,common name(hostname),mail address

            (c)  提交申请证书

                      scp /etc/httpd/ssl/httpd.key CA:/etc/pki/CA/newcerts/

      (4)     签署证书

              openssl ca -in /etc/pki/CA/newcerts/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

                注:默认国家,省 ,公司名称必须和CA一致,主机名hostmane.domain

                    /tmp/目录下的证书申请文件签署后即可删除

              颁发证书

                   scp /etc/pki/CA/certs/httpd.crt  WEB:/etc/httpd/ssl/

      (4) 吊销证书

            (a) 在客户端获取要吊销的证书的serial

                  openssl x509 -in / PATH/FROM/CERT_FILE -noout -serial -subject

            (b) 在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致

                吊销证书:  openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

                注:其中SERIAL.pem要换成证书真正的序列号

            (c) 生成吊销证书的编号(第一次吊销证书时才需要执行)

                 echo 01 > /etc/pki/CA/crlnumber

            (d) 更新证书吊销列表:openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl

                查看crl文件: openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text

SSH

  ssh: secure shell, protocol, 22/tcp, 安全的远程登录

  OpenSSH: ssh协议的开源实现

  dropbear:另一个开源实现

  SSH协议版本

 v1: 基于CRC-32做MAC,不安全;man-in-middle

 v2:双方主机协议选择安全的MAC方式

 基于DH算法做密钥交换,基于RSA或DSA实现身份认证

  两种方式的用户登录认证:

 基于password

 基于key

OpenSSH:  C/S架构

  C: 

      Linux:openssh-clients:ssh, scp, sftp

      Windows: xshell, putty, securecrt, sshsecureshellclient

  S: openssh-server:sshd

ssh客户端

  客户端组件:

  ssh, 配置文件:/etc/ssh/ssh_config

 Host PATTERN

 ForwardX11Trusted yes  支持信任x11转发

 StrictHostKeyChecking no  首次登录不显示检查提示

  格式:ssh [user@] host [COMMAND]

         ssh [-l user] host [COMMAND]

     -p port:远程服务器监听的端口

     -b:指定连接的源IP

     -v:调试模式

     -C:压缩方式

     -X: 支持x11转发

     -Y:支持信任x11转发   

     -t: 强制伪tty分配

 示例:ssh -t remoteserver1 ssh remoteserver2              其中: remoteserver1为跳板,remoteserver2为目标

scp命令:

  scp [options] SRC… DEST/

  两种方式:

      下载 scp [options] [user@]host : /sourcefile /destpath    

      上传 scp [options] /sourcefile [user@]host:/destpath

        常用选项:

          -C: 压缩数据流

          -r: 递归复制

          -p: 保持原文件的属性信息

          -q: 静默模式

          -P PORT: 指明remote host的监听的端口

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 存档模式,相当于 rlptgo,但不保留ACL(-A)和SELinux属性(-X)

sftp命令

  交互式文件传输工具

  用法能和传统的ftp工具相似

  利用ssh服务实现安全的文件上传和下载

  使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息。

      sftp [user@]host

      sftp> help  

 

 

两种认证方式  

 

1、基于password认证

允许实现对远程系统经验证地加密安全访问

     当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/中的

     ssh_host_rsa_key.pub(centos6)

     ssh_host_ecdsa_key.pub(centos7)

 到客户机的~./ssh/know_hosts中。下次连接时,会比较两处是否有不同。

2、基于key认证

(1) 在客户端生成密钥对

 ssh-keygen -t {rsa|dsa} [-P 'passwd'] [-f “/root/.ssh/id_rsa|dsa"]

(2) 把公钥文件传输至远程服务器对应用户的家目录,会自动创建.ssh/authorized_keys并将公钥内容写入

 ssh-copy-id [-i /root/.ssh/id_rsa|dsa.pub] [user@]host

或先将公钥文件id_rsa|dsa.pub复制至对应用户家目录下的.ssh/目录下,再更名为authorized_keys

(3) 测试

    注:

      重设私钥口令      ssh-keygen -p

      验证代理(authentication agent)保密解密后的密钥,这样口令就只需要输入一次

      在GNOME中,代理被自动提供(自动启用ssh-agent),否则运行ssh-agent bash,钥匙通过命令添加给代理ssh-add,仅当前shell有效

  windows中基于key的验证

     xshell

        新建会话、输入名称、协议、主机IP、端口号

        连接、输入用户名、密码、登陆

        工具-新建用户密钥生成向导、选择密钥类型{DSA|RSA}、密钥长度1024

        输入给用户密钥加密的密码、保存为文件、完成

        将公钥上传至服务器并更名为authorized_key

        会话属性、类别中选择用户身份验证、选择验证方法为Public key、密钥密码、浏览选择公钥

    secureCRT

        工具、创建公钥、选择密钥类型{RSA|DSA}、通行短语(密码密钥)、密钥长度1024、选择文件保存路径

        将公钥上传至服务器、转换密钥格式

        点击快速连接、输入主机名、身份验证方式为公钥、属性选择使用证书、导入私钥文件、导入公钥文件

            注:转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600

                    ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys

          

SSH端口转发

   SSH 会自动加密和解密所有SSH客户端与服务端之间的网络数据。但是,SSH还能够将其他TCP端口的网络数据通过SSH接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为SSH为其他TCP接提供了一个安全的通

道来进行传输而得名。例如,Telnet,SMTP,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过将TCP端口转发来使用SSH进行通讯

SSH端口转发能够提供两大功能:

    加密 SSH Client 端至 SSH Server 端之间的通讯数据

    突破防火墙的限制完成一些之前无法建立的 TCP 连接。

  1、本地转发:                  A主机借助AB主机的SSH通道,实现A与C之间有防火墙时的telnet通信

      A:  ssh -L A_port:C_IP:C_port -N B_IP          需要输入B主机的密码,不连接至B主机shell

         选项:

            -f 后台启用

            -N 不开远程shell

            -g 启用网关功能

            A_port:自己指定

            C_port:telnet服务端口23

      示例:

      A:    telnet 127.0.0.1 A_port              需要输入C主机的密码,连接至C主机

                     WAN                                               |                                      LAN 

                                                                             |

          hostA lo:A_port–>hostA IP:port   –>   |   –>   hostB IP:22–>hostB IP:port   –>   hostC IP:23

                                                                            |

                                                                            |

           A本机访问回环的telnet服务的指定端口,经ssh加密后转发到B的ssh服务,解密后用telent转发到C的telnet服务

          以A主机的身份登陆到B主机,以B主机的身份登陆到C主机

    

  2、远程转发:                   B主机借助AB主机的SSH通道,实现A与C之间有防火墙时的telnet通信

      B:     ssh -R A_port:C_IP:C_port -N A_IP              需要输入A主机的密码,连接至A主机shell

                  选项:

                    -f 后台启用

                    -N 不开远程shell

                    -g 启用网关功能

                    A_port:自己指定

                    C_port:telnet服务端口23

      示例:

      A:    telnet 127.0.0.1 A_port              需要输入C主机的密码,连接至C主机

                     WAN                                              |                                      LAN 

                                                                            |

           hostA IP:22                                   <–    |   <–   hostB IP:port   

          hostA lo:A_port–>hostA IP:port   –>  |   –>   hostB IP:22–>hostB IP:port   –>   hostC IP:23          

                                                                           |

                                                                           |

          A本机访问回环的telnet服务的指定端口,经ssh加密后转发到B的ssh服务,解密后用telent转发到C的telnet服务

          以B主机的身份登陆到A主机,以B主机的身份登陆到C主机

  3、动态转发: C主机借助B主机做网络代理访问A主机

        当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet

        C:   ssh -D C_port [root@]hostB             需要输入B主机的密码   

                  C_port:自己指定

        C:   在本机firefox-选项-高级-网络-设置-手动设置代理-SOCKS Host:127.0.0.1:C_port

                     WAN                                |                       LAN 

                                                              | 

          hostA   IP:80                     <–   |   <–   hostB IP:22    <–   hostC IP:port<–hostC lo:C_port

                                                              |

  4、X协议转发

        所有图形化应用程序都是X客户程序,本机可以不启动图形界面

        能够通过tcp/ip连接远程X服务器

        数据没有加密机,但是它通过ssh连接隧道安全进行

    ssh -X user@remotehost gedit

        remotehost主机上的gedit工具,将会显示在本机的X服务器上

        传输的数据将通过ssh连接加密

      注:Xmanager Enterprise 5

            打开xtart

            输入会话名、主机IP、协议ssh、用户名、身份验证password、命令8GNOME(Gnome-session)

            运行

            接受并保存

            输入密码

             

ssh服务器

  服务器端:

  sshd, 配置文件: /etc/ssh/sshd_config

  常用参数:

      Port

      ListenAddress ip

      PermitRootLogin yes

      ClientAliveInterval 0

      UseDNS yes

  限制可登录用户的办法:

      AllowUsers user1 user2 user3

      DenyUsers

      AllowGroups

      DenyGroups

ssh服务的最佳实践  

    1、不要使用默认端口

    2、禁止使用protocol version 1

    3、限制可登录用户

    4、设定空闲会话超时时长

    5、利用防火墙设置ssh访问策略

    6、仅监听特定的IP地址

    7、基于口令认证时,使用强密码策略

        tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs

    8、使用基于密钥的认证

    9、禁止使用空密码

    10、禁止root用户直接登录

    11、限制ssh的访问频度和并发在线数

    12、做好日志,经常分析

编译安装dropbear示例

  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"

      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 -F E #前台运行

          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 (指定对哪些文件进行检测)

      /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 命令

      1. sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员

      2. sudo可以提供日志,记录每个用户使用sudo操作

      3. sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机

      4.sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”

      5、通过visudo命令编辑配置文件,具有语法检查功能

  配置文件:/etc/sudoers, /etc/sudoers.d/

  时间戳文件:/var/db/sudo

  日志文件:/var/log/secure

  配置文件支持使用通配符glob:

      ?:前面的字符或词可出现一次或无

      * :前面的字符或词出现零次或多次

      [wxc]:匹配其中一个字符

      [^wxc]:除了这三个字符的其它字符

      \x : 转义

      [[alpha]] :字母 示例: /bin/ls [[alpha]]*        此处没有冒号:冒号在此处有特殊用途

  配置文件规则有两类;

      1、别名定义:不是必须的

      2、授权规则:必须的

 

 sudoers

    授权规则格式:

         用户 登入主机=(代表用户) 命令

    示例:root      ALL=(ALL)       ALL

  格式说明:

      user: 运行命令者的身份

      host: 通过哪些主机

      (runas):以哪个用户的身份

      command: 运行哪些命令

别名

  Users和runas:

      username

      #uid        #代表UID,不表示注释

      %group_name

      %#gid

      user_alias|runas_alias

  host:

      ip或hostname       单个IP或主机名

      network(/netmask)       某个网段的所有主机

      host_alias

  command:

      command name    可以执行的的命令

      directory    可以执行该目录下的所有命令

      sudoedit       授权用户可以编辑sudoers文件

      Cmnd_Alias

sudo别名和示例

  别名有四种类型:User_Alias, Runas_Alias, Host_Alias,Cmnd_Alias

  别名格式:[A-Z]([A-Z][0-9]_)*      大写字母开头,字母或数字组成

  别名定义:Alias_Type NAME = item1, item2, item3 : NAME = item4, item5

    示例1:

        Student

        %wheel

        ALL=(ALL) ALL

        ALL=(ALL)

        ALL

    示例2:

        student ALL=(root)

        /sbin/pidof,/sbin/ifconfig

        %wheel ALL=(ALL) NOPASSWD: ALL     免密码执行

    示例3

        User_Alias NETADMIN= netuser1,netuser2

        Cmnd_Alias NETCMD = /usr/sbin/ip

        NETADMIN ALL=(root) NETCMD

    示例4

        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

        DISKADER ALL=(OP) DSKCMD

        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

    示例5

        Defaults:wang runas_default=tom    wang用户的默认身份切换为ton

        wang ALL=(tom,jerry) ALL

    示例6

        wang 192.168.175.136,192.168.175.138=(root)

        /usr/sbin/,!/usr/sbin/useradd

    示例7

        wang ALL=(ALL) /bin/cat /var/log/message*   会查看包括日志在内的所有的文件

sudo命令

  ls -l /usr/bin/sudo

  sudo -i -u wang 切换身份相当于 su

  sudo [-u user] COMMAND

      -V 显示版本信息等配置信息

      -u user 默认为root

      -l,ll 列出用户在主机上可用的和被禁止的命令

      -v 再延长密码有效期限5分钟,更新时间戳

      -k 清除时间戳,下次需要重新输密码

      -K 与-k类似,还要删除时间戳文件

      -b 在后台执行指令

      -p 改变询问密码的提示符号

      如 -p ”password on %h for user %p"


原创文章,作者:anonymous,如若转载,请注明出处:http://www.178linux.com/49098

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-26 12:15

    行与行之间的间距是不是太宽了?看起来太离散了,建议紧密一点哦。