加密和安全

常見的加密算法和安全協議

一、對稱加密:加密和解密使用同一個密鑰,依賴于算法和密鑰,其安全性依賴于密鑰而非算法

常見的算法:DES

? 特性:

? 加密、解密使用同一個密鑰

? 將明文分隔成固定的大小塊逐個進行加密

? 缺點:

? 密鑰過多、密鑰分發

二、非對稱加密:采用的是公鑰加密方法,密鑰是成對出現的,公鑰是從私鑰中提取出來的

? 公鑰:公開給所有人;public key

? 私鑰:自己留存,必須保證其私密性;secret key

? 用處:

? (1)身份認證:私鑰擁有者用自己的私鑰加密的數據,只有用其公鑰才能解密

? (2)密鑰交換:通信之前首先獲取對方的公鑰,自己生成一個加密密碼,用對方的公鑰加密,并發送給對方

? (3)數據加密:算法有RSA、DSA、ELGamala

三、單向散列算法(hash算法):

? 用hash算法對數據處理完,得到的結果稱摘要。

hash (data)=digest摘要

摘要的特性: data不同,digest必不同

? digest不可反推算出數據本身

? hash算法確定,digest長度固定大小

常見算式:

? md5:128bits、sha1:160bits、sha224

? sha256、sha384、sha512s

常用工具:

? md5sum | sha1sum |[—check ] file

? openssl、gpg

? rpm -V

四、密鑰交換,IKE:雙方通過交換密鑰來實數據加密解密,密鑰交換有兩種:

? 公鑰加密:將公鑰加密后通過網絡傳輸到對方進行解密,這種方式還有很大可能被截取破解。

? DH(迪菲—赫爾曼):雙方共有一些參數,共同協商加密算法,除此之外雙方還有屬于自己的私有參數,同過共有參數、私有參數和算法信息來進行加密,然后雙方將計算后的結果進程交換,交換完成后在和屬于自己的私有參數進行特殊算法,經雙方計算后的結果是相同的,而這個結果就是密鑰。

? 第一步:A和B協商分別生成的公開的整數a,大素數p

? 第二部:A生成隱私數據:(x<p),計算得出a^x%p,發送給B

? B生成隱私數據:(y<p),計算得出a^y%p,發送給A

? 第三部:A計算得出[(a^y%p)^x]%p=a^xy%p,生成為密鑰

? B計算得出[(a^x%p)^y]%p=a^xy%p,生成為密鑰

A:
a=5
p=23
x=6
5^6%23=8
19^6%23=2
B:
a=5
p=23
y=15
5^15%23=19
8^15%23=2

使用gpg實現對稱加密

? 對稱加密file文件

? gpg -c file

? ls file.gpg

? 在另一臺主機上解密file

? gpg -o file -d file.gpg

使用gpg工具實現公鑰加密

? 在hostB主機上用公鑰加密,在hostA主機上解密

? 在hostA主機上生成公鑰/私鑰對

? gpg —gen—key

? 在hostA主機上查看公鑰

? gpg —list—keys

? 在hostA主機上導出公鑰到Alfred.pubkey

? gpg -a —export -o Alfred.pubkey

? 從hostA主機上復制公鑰文件到需要加密的B主機上

? scp Alfred.pubkey hostB

? 在需要機密數據的hostB主機上生成公鑰/私鑰對

? gpg —list-keys

? gpg —gen-key

? 在hostB主機上導入公鑰

? gpg —import Alfred.pubkey

? gpg —list-keys

? 用從hostA主機導入的公鑰,加密hostB主機的文件

? gpg -e -r Alfred file

? file file.gpg

? 復制加密文件到hostA主機

? scp fstab.gpg hostA

? 在hostA主機解密文件

? gpg -d file.gpg

? gpg -o file -d file.gpg

? 刪除公鑰和私鑰

? gpg —delete-keys Alfred

? gpg —delete-secret-keys Alfred

SSL是為網絡通信提供安全及數據完整性的一種安全協議。

? TSL與SSL在傳輸層對網絡連接進行加密

兩階段協議,分為握手階段和應用階段

? 握手階段(協商階段):客戶端和服務器端認證對方身份(依賴于PKI體系,利用數字證書進行身份認證),并協商通信中使用的安全參數、密碼套件及主密鑰。后續通信使用的所有密鑰都是通過MasterSecret生成。

? 應用階段:在握手階段完成后進入,在應用階段通信雙方使用握手階段協商好的密鑰進行安全通信。

OpenSSL

對稱加密: 工具:openssl enc, gpg

? 算法:3des,aes,blowfish,twofishs

? enc命令:

? 加密:

? openssl enc -e -des3 -a -salt -in testfile -out.cipher

? 解密:

? openssl enc -d -des3 -a salt -in testfile.cipher -out testfile

? openssl ?

單向加密:

? 工具:md5sum,sha1sum,sha224sum,sha256sum…

? openssl dgst

? dgst命令:

? 生成用戶密碼:

? openssl passwd -1 -salt SALT(最多8位)

? openssl passwd -1 -salt centos

? 生成隨機數:

? openssl rand -base64|-hex NUM

? NUM表示字節數;-hex時,每個字符為十六進制,相當于4位二進制,出現的字符數為NUM*2

openssl rand -base64 20 |tr -dc '[:alnum:]' |head -c8   #生成8位長度的隨機口令

公鑰加密:

生成密鑰對兒:man genrsa

生成私鑰

? openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS

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

? openssl rsa -in test.key -out test2.key 將加密key解密

從私鑰中提取出公鑰

? openssl rsa – in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE

? openssl rsa -in test.key -pubout -out test.key.pub

**實驗**向CA申請證書:
?
1、建立私有CA
    openssl的配置文件: /etc/pki/tls/openssl.cnf
    1)生成私鑰對兒
    cd /etc/pki/CA/
    (umask 077;openssl genrsa -out private/cakey.pem 4096)
    2)自簽名證書
    openssl req -new -x509 -key private/cakey.pem  -out     cacert.pem -days 3650
    CN
    beijing
    beijing
    magedu
    M30
    www.magedu.com
    touch  /etc/pki/CA/index.txt
    Echo  0F >  /etc/pki/CA/serial
    查看證書里面的內容:
    Openssl x509 -in cacert.pem -noout -text        (-ssuer,-subject,-dates)
2、用戶或服務器
    1)生成私鑰
    (umask 077;openssl genrsa -out app.key 1024)
    2)生成證書申請
    客戶端:openssl req -new  -key ? app.key -out app.csr
    CN
    beijing
    shanghai
    magedu
    M30
    app.www.magedu.com
    3)將申請文件發給CA
    scp app.csr 172.20.104.88:/etc/pki/CA
3、CA頒發證書
openssl ca -in app.csr -out certs/app.crt -days 100
4、證書發送給客戶端
scp app.csr 192.168.30.7:/etc/pik
openssl ca -in /
5、在應用軟件中使用證書
?

吊銷證書:

openssl ca -revoke newcerts/10.pem

指定第一個吊銷證書的編號,注意:第一次更新證書吊銷列表前,才需要執行

echo > 01 /etc/pki/CA/crnumber

更細證書吊銷列表:

openssl ca -out /etc/pki/CA/crl.pem

查看crl文件:

openssl url -in /etc/pki/CA/crl.pem -noot -text

cat Index.txt

cat serial

SSH

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

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

? ssh [-l user]host[COMMAND]

? -p port:遠程服務器監聽的端口

? -b:指定連接的源IP

? -v:調試模式

? -X:支持x11轉發

? -Y:支持信任x11轉發

? forwardX11Trusted yes

? -t:強制偽tty分配

? ssh -t remoteserver1 ssh remoteserver2

基于key認證

三臺機器基于key的認證
?
(1)在客戶端生成密鑰對
    A
    ssh-keygen -t rsa   #默認rsa算法
(2)把公鑰文件傳輸至遠程服務器對應用戶的家目錄
    ssh-copy-id  172.20.104.88  #自己傳給自己
    scp -pr /root/.ssh B:/root/
    scp -pr /root/.ssh C:/root/
    
(3)測試
    ssh qjz@172.20.104.88
    scp /etc/fstab  qjz@172.20.104.88:/home/qjz
    for ip in `cat ip.txt`;do scp f1.sh $ip:/data/ ;done
    for ip in `cat ip.txt`;do ssh $ip "/data/f1.sh" ;done 
(4)在secuercrt和xshelll實現基于key驗證
    在secureCRT工具-->創建公鑰-->生成Identity.pub文件
    轉化為openssh兼容格式(適合SecureCRT,Xshell不需要轉化格式),并復制到需登錄主機上相應文件authorized_keys中,注意權限必須為600,在需要登錄的ssh主機上執行:
    ssh-keygen -i -f identity.pub >> .ssh/authorized_keys
(5)重設私鑰口令:
    ssh-keygen -p
(6)驗證代理
    ssh-agent bash
(7)鑰匙通過命令添加給代理
    ssh-add
?
?
思考:100臺機器,把腳本推送過去,執行命令(掃描IP腳本)

scp

scp[option]SRC…DEST/

兩種方式:

scp[option][user@host:/sourcefile /destpath]
scp[option]/sourcefile [user@host:/destpath]

常用選項:

? -c:壓縮數據流

? -r:遞歸復制

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

? -q:靜默模式

? -P PORT:指明remote host的監聽的端口

缺點:數據同步的時候,不檢查數據的內容,重復復制,消耗數據流量

rsync命令

基于ssh和rsh服務實現高效率的遠程系統之間復制文件和數據之間的同步

? rsync -av /etc/server1:/tmp #復制目錄和目錄下的文件

? rsync -av /etc/ server1:tmp #只復制目錄下的文件

優點:比scp速度更快,只復制不同的文件

使用安全的shell連接作為傳輸方式

常用選項:

? -c:壓縮數據流

? -r:遞歸復制

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

? -q:靜默模式

? -P PORT:指明remote host的監聽的端口

sftp命令

交互式文件傳輸工具

用法和傳統的ftp工具相似

? sftp [user@]host

? sftp> help

pssh工具

pssh是一個python編寫可以在多臺服務器上執行命令的工具,也可實現文件復制,自動化運維的初級階段,需要啟動epel源,實現并行運行

選項如下:

? —version:查看版本

? -h:主機文件列表,內容格式“

? -H:主機字符串,內容格式“[user@host]

? -A:手動輸入密碼模式

? -l:登錄使用的用戶名

? -p:并發的線程數【可選】

? -o:輸出的文件目錄【可選】

? -i:每個服務器內部處理信息輸出

? -e:錯誤輸入文件【可選】

? -t:TIMEOUT超時時間設置,0無限制【可選】

? -O:SSH選項

? -v:詳細模式

? -x:額外的命令行參數使用空白符號,引號,反斜線處理

? -X:額外的命令行參數,單個參數模式,同-x

? -i:每個服務器內部處理信息輸出

? -P:打印出服務器返回信息

pssh示例:通過pssh批量關閉SELinux

pssh -H root@172.20.104.66 -i “sed -i “s/SELINUX=enforcing/SELINUX=disbaled/” /etc/selinux/config” #批量發送指令

pscp.pssh命令

pscp.pssh功能是將本地文件批量復制到遠程主機

pscp.pssh -h ip.txt /root/f1.sh /data/

pslurp.pssh命令

pslurp.pssh功能是將遠程主機的文件批量復制到本地

選項:

-L:指定從遠程主機下載到本機的存儲的目錄,local是下載到本地后的名稱

-r:遞歸復制目錄

批量下載目標服務器的passwd文件至/app下,并更名為user

pslurp -H 192.168.1.10 -L /app /etc/passwd user

Pslurp -h ip .txt -L /data/ /var/log/message m

ssh端口轉發

ssh會自動加密和解密所有ssh客戶端和服務端之間的網絡數據。但是ssh還能夠將其它TCP端口的網絡數據通過ssh 鏈接來轉發,并且自動提供了相應的加密及解密服務。這一過程也被叫做“隧道”,這是因為ssh為其他TCP鏈接提供了一個安全的通道來進行傳輸而得名。例如:Telnet,SMTP,LDAP,這些TCP應用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。

本地轉發:

-L localport:remotehost:remotehostport sshserver

選項:

? -f 后臺啟用

? -N 不打開遠程shell,處于等待狀態

? -g 啟用網關功能

企業實例:

ssh -L 9527:172.10.104.88:23 -N 172.20.104.99

telnet 172.20.104.66 9527

遠程轉發:

-R sshserverport:remotehost:remotehostport sshserver

企業應用案例:(使用于臨時出差需連接企業內部)

ssh -R 9527:telnetsrv:23 -N sshsrv

動態端口轉發:

ssh -D 1080 root@sshserver

服務器端:sshd,配置文件:/etc/ssh/sshd_config

常用參數:

port

Listenaddress ip

Logingracetime 2m

permitRootlogin yes #允許普通用戶登錄

Strictmodes yes 檢查.ssh /文件的所有者,權限等

常用參數:

? GatewayPorts no

? ClientAliveInterval:單位:秒

? ClientAliveCountMax:默認3

? UseDNS yes

? GSSAPIAups 未認證連接最大值,默認值10

? Banner /path/file

限制可登錄用戶的方法:

? AllowUsers user1 user2 user3

? DenyUsers

? AllowGroups

? DenyGroups

ssh服務的最佳實踐

? 建議使用非默認端口

? 禁止使用protocol version1

? 限制可登錄用戶

? 設定空閑會話超時時長

? 利用防火墻設置ssh訪問策略

? 僅監聽特定的IP地址

? 基于口令認證時,使用強木馬策略

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

? 使用基于密鑰的認證

? 禁止使用空密碼

? 禁止root用戶直接登錄

? 限制ssh的訪問頻度和并發在線數

? 經常分析日志

?

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98030

(0)
what?what?
上一篇 2018-05-10
下一篇 2018-05-10

相關推薦

欧美性久久久久