天天看點

linux -對稱加密、 非對稱加密

對稱加密

加密和解密用的是相同的密碼。

安全強度依賴密碼的強度。

加密和解密效率非常快。

非對稱加密

加密和解密用的是不相同的密鑰。

效率非常低,不适合對大尺寸資料進行處理。

私鑰

是鑰匙持有人自己生成并且自行保管,絕對不能洩漏的。它是用于對資料的“簽名”---其實最終效果也就是加密。使用私鑰對經過公鑰加密後的資料進行解密,這個過程叫“校驗”。

公鑰

是在私鑰的基礎上生成對應的密鑰檔案,是對簽名的資料進行“解密”---對資料解密。也能使用公鑰處理明文資料,這個過程叫“加密”。

證書

通過ca的私鑰對某個公鑰和公鑰持有人的資訊進行簽名得來。--- 其實就是用ca的私鑰“加密” 某個公鑰和公鑰資訊得到的加密檔案。

例子: 部署一個https的加密網站

一個IP隻能支援建立一個加密網站。

1、安裝apache的ssl子產品

# yum install mod_ssl -y

安裝玩之後,預設會自定成生配置檔案。

2、編輯

# vim /etc/httpd/conf.d/ssl.conf

LoadModule ssl_module modules/mod_ssl.so

Listen 443

...

<VirtualHost _default_:443>

DocumentRoot "/share/weeken_03" <---修改

ServerName 10.1.1.21:443 <---修改

SSLEngine on

..

SSLCertificateFile /etc/httpd/conf.d/tanpao.crt

SSLCertificateKeyFile /etc/httpd/conf.d/tanpao.key

....

</VirtualHost>

我們生成的證書:

smtp+ssl == smtps

pop3 +ssl == pop3s

imap + ssl == imaps

=========================================================================

本地磁盤資料加密

加密前:

普通檔案--> 挂載(調用檔案系統驅動讀取分區上的對應格式資料)---格式化---sda7

加密後:

普通檔案--> 挂載----普通檔案系統格式化--->加密驅動--初始化-->sda7

1、準備一個沒有重要資料的分區進行加密初始化

初始化後,原有的資料是不可恢複

# cryptsetup -y luksFormat /dev/sda10

WARNING!

========

This will overwrite data on /dev/sda10 irrevocably.

Are you sure? (Type uppercase yes): YES

Enter LUKS passphrase:

Verify passphrase:

2、使用密碼打開被加密驅動保護的分區

# cryptsetup luksOpen /dev/sda10 sda10_crypt

Enter passphrase for /dev/sda10: <---輸入密碼

# ll /dev/mapper/sda10_crypt <---被加密驅動監視的裝置檔案,所有資料讀寫都必須經過該裝置檔案,而對該裝置檔案的資料讀寫都是經過加密驅動的解密和加密。

3、首次使用加密分區,需要使用普通檔案系統進行首次的格式化

# mkfs.ext4 /dev/mapper/sda10_crypt

4、挂載、測試

# mount /dev/mapper/sda10_crypt /mnt

使用完畢,就取消挂載并且關閉加密裝置

# umount /mnt

# cryptsetup luksClose /dev/mapper/sda10_crypt

修改密碼: 先增加一個新密碼,再删除原有的其中一個舊密碼

# cryptsetup luksAddKey /dev/sda10

Enter any passphrase: <---輸入原來的任意一個舊密碼

Enter new passphrase for key slot:  <---輸入新密碼

# cryptsetup luksRemoveKey /dev/sda10

Enter LUKS passphrase to be deleted: <--輸入之前的舊密碼

==========================================================================================

工具:cryptsetup(預設已經安裝)

常用參數:luksFormat、luksOpen、luksClose、luksAddKey

使用cryptsetup對分區進行了加密後,這個分區就不再允許直接挂載。LUKS也是一種基于device mapper 機制的加密方案。如果要使用這個分區,必須對這個分區做一個映射,映射到/dev/mapper這個目錄裡去,我們隻能挂載這個映射才能使用。然而做映射的時候是需要輸入解密密碼的。

Crypsetup工具加密的特點:

加密後不能直接挂載

加密後硬碟丢失也不用擔心資料被盜

加密後必須做映射才能挂載

步驟:

1.  建立分區并加密分區

2.  映射分區

3.  格式化分區并挂載使用

4. 關閉映射分區

建立一個磁盤分區/dev/sdb1,不進行格式化

1、 加密分區 www.2cto.com

# cryptsetup -v -y -c aes-cbc-plain luksFormat /dev/sdb1

This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type uppercase yes): YES --> 注意這裡必須是大寫的YES

Command successful.

#

2、 映射分區

# cryptsetup luksOpen /dev/sdb1 sx_disk //把sdb1映射為sx_disk

Enter passphrase for /dev/sdb1:

# ll -d /dev/mapper/sx_disk

lrwxrwxrwx. 1 root root 7 6月 25 03:24 /dev/mapper/sx_disk -> ../dm-0

# cryptsetup status /dev/mapper/sx_disk //檢視映射分區狀态

/dev/mapper//dev/mapper/sx_disk is active.

type: LUKS1

cipher: aes-cbc-plain

keysize: 256 bits

device: /dev/sdb1

offset: 4096 sectors

size:  16767701 sectors

mode:  read/write

# www.2cto.com

3、挂載使用

# mkdir /mnt/sx_disk

# mkfs.ext3 /dev/mapper/sx_disk

# mount /dev/sdb1 /mnt/sx_disk/  //直接挂載是不可以的

mount: unknown filesystem type 'crypto_LUKS'

# mount /dev/mapper/sx_disk /mnt/sx_disk/ //挂載映射裝置,挂載成功

4、關閉映射,先解除安裝後關閉

# umount /mnt/sx_disk/

# cryptsetup luksClose sx_disk //關閉映射

# ll /dev/mapper/ //映射裝置已經不見了

總用量 0

crw-rw----. 1 root root 10, 58 6月 25 03:01 control

5、設定開機自動挂載

生成密鑰檔案,如果想開機時手動輸入密碼可以不生成

# touch /root/cryptpasswd

# cryptsetup luksAddKey /dev/sdb1 /root/cryptpasswd

Enter any passphrase:

# cat /root/cryptpasswd //直接檢視密鑰為空

設定開機啟動

# vim /etc/crypttab

# cat /etc/crypttab

sx_disk /dev/sdb1 /root/cryptpasswd

//sx_disk為映射名稱,/dev/sdb1是加密裝置裝置,/root/cryptpasswd為密碼檔案,如果想開機手動輸入密碼,密碼檔案處空着即可

# vim /etc/fstab

# tail -1 /etc/fstab

/dev/mapper/sx_disk    /mnt/sx_disk       ext4 defaults  0 0

webshell ---> 是否能夠被傳到伺服器,關鍵還是看程式員寫的web程式是否存在相關的漏洞

webshell帶來的危害:

跨目錄的通路:

解決: 對apache、php設定

開啟selinux

針對apache,php設定,防止webshell跨目錄

<VirtualHost *:8081>

DocumentRoot /share/weeken_03

。。。。

<IfModule mod_php5.c>

php_admin_value open_basedir "/share/weeken_03:/var/lib/php/session:/tmp"

</IfModule>

<VirtualHost *:8082>

DocumentRoot /share/weeken_06

php_admin_value open_basedir "/share/weeken_06:/var/lib/php/session:/tmp"

webshell可以通過php執行一些危險函數:運作指令、結束程序等等

# vim /etc/php.ini

disable_functions = exec,shell_exec,system,passthru,popen

webshell可以通過編譯程式,執行危險的程式,例如:進行反向連接配接、提權。

解決:

上線的伺服器,一般會把編譯工具解除安裝掉,就算不解除安裝,也要把權限修改成700,隻有root可以執行。

如果确定伺服器不會主動向外連接配接,那麼建議在iptables上的filter--> OUTPUT添加一條規則,記錄所有主動向外發起連接配接規則

# iptables -t filter -A OUTPUT -m state --state NEW -j LOG --log-prefix "hacker"

建議:

一個獨立的應用就有具有一個獨立的資料庫和資料庫帳号,千萬不能使用root帳号。

做好日志統計:

哪些頁面不應該被通路到,卻被通路。

www.upl.com/admin/login.php 404 報錯

哪些頁面隻有限定IP才能通路,卻被其他IP通路了。

      本文轉自crazy_charles 51CTO部落格,原文連結:http://blog.51cto.com/douya/1275962,如需轉載請自行聯系原作者