对称加密
加密和解密用的是相同的密码。
安全强度依赖密码的强度。
加密和解密效率非常快。
非对称加密
加密和解密用的是不相同的密钥。
效率非常低,不适合对大尺寸数据进行处理。
私钥
是钥匙持有人自己生成并且自行保管,绝对不能泄漏的。它是用于对数据的“签名”---其实最终效果也就是加密。使用私钥对经过公钥加密后的数据进行解密,这个过程叫“校验”。
公钥
是在私钥的基础上生成对应的密钥文件,是对签名的数据进行“解密”---对数据解密。也能使用公钥处理明文数据,这个过程叫“加密”。
证书
通过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: <---输入新密码
Verify passphrase:
# cryptsetup luksRemoveKey /dev/sda10
Enter LUKS passphrase to be deleted: <--输入之前的旧密码
==========================================================================================
Linux下磁盘加密——luks
LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令。因为它的加密密钥独立于口令,所以如果口令失密,我们可以迅速改变口令而无需重新加密真个硬盘。通过提供一个标准的磁盘上的格式,它不仅方便之间分布的兼容性,而且还提供了多个用户密码的安全管理。必须首先对加密的卷进行解密,才能挂载其中的文件系统。 www.2cto.com
工具: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
WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.
Are you sure? (Type uppercase yes): YES --> 注意这里必须是大写的YES
Enter LUKS passphrase:
Verify passphrase:
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 //直接查看密钥为空
# www.2cto.com
设置开机启动
# 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>
<VirtualHost *:8082>
DocumentRoot /share/weeken_06
。。。。
。。。。
<IfModule mod_php5.c>
php_admin_value open_basedir "/share/weeken_06:/var/lib/php/session:/tmp"
</IfModule>
</VirtualHost>
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,如需转载请自行联系原作者