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 (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

(0)
anonymousanonymous
上一篇 2016-09-26
下一篇 2016-09-26

相关推荐

  • 初探linux

    计算机的组成及其功能: 存储器:    实现记忆功能的部件用来存放计算程序及参与运算的各种数据 运算器:    负责数据的算术运算和逻辑运算即数据的加工处理 控制器:    负责对程序规定的控制信息进行分析,控制并协调输入,输出操作或内存访问 输入设备:    实现计算程序和原始…

    Linux干货 2016-10-29
  • linux内核(kernel)版本号的意义

      在linux下有一个目录,即/usr/src/kernels/目录,下面记载着一个linux系统的内核文件, 例如:2.6.18-164.el5-x86_64、2.6.18-8.el5-x86_64和2.6.18-194.el5-x86_64等,这些文件编号意味着什么呢?例如2.6.18代表着什么?el5代表着什么?x86_64又代表着什么? …

    Linux干货 2016-01-14
  • 使用sudo对用户进行权限管理

    使用sudo对用户进行权限管理 因为root用户权限太大,一般在实际应用的时候 ,为了避免造成错误泛滥和找不到责任人都需要对使用服务器人员进行权限分配,除了系统管理员外,其他人禁止使用root,但可以通过sudo命令,给自己提权。同时通过日志审计进行监控操作,操作如下: 1.禁止普通用户使用su命令到root # usermod -g wheel user0…

    Linux干货 2017-03-26
  • linux运维

    linux运维大纲,学习路线图

    Linux干货 2017-10-21
  • Centos6.5利用RubyGems的fpm制作zabbix_agent的rpm包,并使用ansible批量部署

    一、 搭建rpm包制作环境 安装gcc [root@lvs1 ~]# yum install gcc 安装make [root@lvs1 ~]# yum install make 安装ruby源(ruby版本必须要在1.9.3以上,centos自带的是1.8的版本,需要自己编译安…

    Linux干货 2016-08-20
  • N26-第一周博客作业

    1、计算机的组成及功能     CPU: Central Processing Unit 运算与管理控制功能        包括:          &nbsp…

    Linux干货 2017-01-10

评论列表(1条)

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

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