Linux 数据安全
1.加密 解密    服务:机密性   完整性 不可否认性(数字签名)
对称加密 通信双方有同样的key值, 缺点:钥匙短 长40-256位 安全性低 钥匙管理 钥匙分发    优点:效率高 会话加密
非对称加密 512-4096  
加密: 接收方公钥加密,接收方私钥解密 
签名 :发送方用自己的私钥加密
算法
对称: des(56)块加密(64位)(16轮迭代运算)   3des(48轮迭代运算) aes(高级加密标准)128   192   256    idea RC系列(RC2 RC4 RC5)
非对称加密算法 512-4096   D-H(对称加密中的钥匙传递) RSA
Gpg是一个开源的,跟pgp类似
下面我们来试验一下使用gpg做一个简单的加密通信
在linux上有user1,use2两个用户他们实现pgp加密的通信
(1)为每个用户产生钥匙(必须在系统的终端上使用该命令才有效)
[user1@mail ~]$ gpg --gen-key
 

[user2@mail ~]$ gpg --gen-key   产生钥匙
 

(2)然后分别为两个用户导出他们自己的钥匙(导出的钥匙文件中包含私钥跟公钥)
 
[user2@mail ~]$ cp user2.key /tmp/    分别将钥匙文件放到/tmp目录下,便于对方考取
导入通信的对方公钥
[user1@mail ~]$ gpg --import /tmp/user2.key
gpg: 密钥 90FAAFD7:公钥“user2 <user2@localhost>”已导入
gpg: 合计被处理的数量:1
gpg:           已导入:1
(3)使用gpg加密文件    e(使用加密)a(使用ascii码加密)r(指明接受人)
[user2@mail ~]$ vim f1.txt     产生文件
11111111111111111111111111
 
22222222222222222222222
[user2@mail ~]$ gpg -ear user1 f1.txt    使用gpg对方的公钥加密
gpg: E35CE78A:没有证据表明这把密钥真的属于它所声称的持有者
pub 2048g/E35CE78A 2011-07-17 user1 <user1@localhost>
 主钥指纹: B9D3 1BC2 CEF3 741A C3EF 88E4 BB00 C79C 60B4 359D
 子钥指纹: 3E71 0A8D 3645 F197 89A1 AFD4 67B3 4610 E35C E78A
这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自
己在做什么,您可以在下一个问题回答 yes。
无论如何还是使用这把密钥吗?(y/N)y
[user2@mail ~]$ ll
总计 12
-rw-rw-r-- 1 user2 user2   53 07-17 23:29 f1.txt
-rw-rw-r-- 1 user2 user2 916 07-17 23:29 f1.txt.asc    产生了一个加密文件
-rw-rw-r-- 1 user2 user2 1147 07-17 23:23 user2.key
[user2@mail ~]$ cp f1.txt.asc /tmp/    将该加密文件放到/tmp目录下便于对方得到
 
(4)解密文件
[user1@mail ~]$ cp /tmp/f1.txt.asc f1.txt   将user2产生的加密文件拷过来
[user1@mail ~]$ cat f1.txt      查看该文件发现被加密了
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.5 (GNU/Linux)
hQIOA2ezRhDjXOeKEAgAzyU/MN/vD8M04ZgELShvVu89u5CtqnjWG61fRGlOJuVk
l93Vb3qEvNQG1xxOtTOqwmp19aQXaUo19hQYucZSOuPJVCLvYEJ/Y1t8jUCjP/UE
7SQ0n13wlyGsLkUnveE1WVBWYYoriTXMD7Uy8VQ5f1IlecJtuiP30OITBTilXCEW
OnsMAgC3HXLSP4xFibH44hAAig6onulf07Dz67wVLRyjHUAjwEYDSukP3LcKYHVQ
li/PrEAGbJPBmb1yin4F2Z3bbHjB1DePbbnyInLoQloGjNyCHFDtRLZReSLIHmjZ
8MX91Q3vEpWtdgyl7IAakeluIFgcJxX4N6SwDvh1YQf6A1l2E0zn3XQEHp7uliEZ
SCFgDRfIBFABLbiLGf8M7FEtUbmTFcovUk5gIVbZ+CGDvemFK8j1sJWOo66v1z1a
fEwoDOVrT20U2IVmOVVL3FrRru/JhcBSpYXFwWfM+ag5Ab1cbib+HV43p5GM8Lvb
YlauV7LCSRA+GRPm5iZh/LT+8ovy9/lwGePfJnaFq3WyecZ2FqEA5JrswsFFf84l
iVpUbPzJZzXZHMIJTpLZTTsvKekSJy0iTUoTetJ1UOm02Cnxu5lVgbHRCR5bqopT
6Dj1tweA0b09fpyD0xctkNI1RA6MQ30r9t+gf4WubE61y9vHb4YMfElEVWMnqcHK
ztJLAVaI9iD1LtS758fo60jrO9ryn+D+rBodg6GkX6NPH4o6dNJnJmniDY4eRKwg
2rXw51cfjYLR6gW51wvvqH1wFlapL0zzvd2mI0Yp
=9IH0
-----END PGP MESSAGE-----
[user1@mail ~]$ gpg -d f1.txt>f1   利用自己的私钥解密该文件
您需要输入密码,才能解开这个用户的私钥:“user1 <user1@localhost>”
2048 位的 ELG-E 密钥,钥匙号 E35CE78A,建立于 2011-07-17 (主钥匙号 60B4359D)
gpg: 由 2048 位的 ELG-E 密钥加密,钥匙号为 E35CE78A、生成于 2011-07-17
      “user1 <user1@localhost>”
[user1@mail ~]$ cat f1
11111111111111111111111111
 
22222222222222222222222
 
 
 
 
加密系统 openssl pgp openssh
单项hash函数
MD5 sha
特点:
1.单向性
2.原文不一致,结果不一样
算法MD5sum (128)   sha1sum (160)
rpm -V 服务名 (使用MD5检测本服务与上次是否变化)
数字证书   公钥的完整性,证书的真实性
Pki 公钥基础设施
(CA RA CMP)=PKI
HTTPS
SMTPS
POP3S
IMAPS
 
 
 
 
SELINUX
 enforceing   强制,如果违反selinux安全策略,则强制关掉,并给出警告
Permissive   违反策略时可以通过并给出警告 一般测试时用
Disable   禁用 selinux
在第一次使用时会生成安全策略(给一些文档加上安全标注)
 
保证文件 ,目录 ,进程 ,服务器的安全性
 
改变selinux设置
1.vim /etc/sysconfig/selinux
 # SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=enforcing    selinux的现状态
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.   仅针对网络服务保护
# strict - Full SELinux protection.   对整个文件系统(5系列不支持)保护
SELINUXTYPE=targeted selinux的类型    
查看content值(实施保护的方式)
ll -Z    查看当前目录下的文件或目录的context值
root:object_r:user_home_t   ——》用户(对象的所有者):角色:类型
可以改变content值,但是一旦改错了,就可能导致被selinux拒绝
子目录的Content值是从父目录继承的,主目录conten值是安装时系统分得
chcon -t tmp_t 文件名   更改content值
当应为selinux的安全策略把我们的服务禁止时,我们可以在图形界面中:
该图形界面可以在系统命令行中执行sealert -b 调出
 

但是若是系统没有安装图形界面呢?
我们可以借助日志来解决
[root@mail ~]# tail /var/log/messages
Jul 18 04:24:42 mail pcscd: winscard.c:304:SCardConnect() Reader E-Gate 0 0 Not Found
Jul 18 04:28:02 mail setroubleshoot: SELinux is preventing the httpd from using potentially mislabeled files (/var/www/html/index.html). For complete SELinux messages. run sealert -l 4d015daa-a84a-4fe1-976d-08c732e6812f       在这里给出了解决方案
Jul 18 04:35:30 mail last message repeated 4 times
[root@mail ~]# sealert -l 4d015daa-a84a-4fe1-976d-08c732e6812f    运行该段代码便会出现跟图形界面类似的提示,我们可以照着提示去改变
 
getenforce   查看当前的selinux状态
setenforce 0   更改selinux的模式为警告模式(立即生效)
[root@mail ~]# setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
Selinux的日志在/var/log/messages
进程context值
ps -l -Z
2.使用图形工具(在图形化上更改,最终更改的是文件)
system-config-securitylevel
system-config-selinux(更详细)
文件 目录 进程 使用content值保护 user:role:type 针对文件或者文件夹
 
服务器   使用boolen值保护(是一个功能开关)
查看   getsebool -a 看所有的boolen值
当我们使用服务出错时,我们可以在日志中找到方法tail /var/log/messages
Setsebool -P ftp_home_dir=1     打开boolen开关 (-P为永久打开)
查看目录的boolen值
ll -Z -d 查看目录的content值
grep -i   selinux /var/log/message 在该日志文件中搜索关于selinux的字段
使用的工具 sealert   在setroubleshoot-server-2.0.5-5.el5.noarch.rpm包中
 
 
 
 
 
Pam验证
 
验证的代码与自身的工程代码是分开的,将验证的请求发给pam代理,代理再调用验证模块
/etc/pam.d 目录下有很多借口脚本   这些脚本调用模块
模块说明目录 /usr/share/doc/pam-0.99.6.2/txts/README.pam_模块名   查看它可以得知模块的使用说明及方法
应用程序通过接口调用模块

PAM服务文件
/etc/pam.d/login
auth
required
pam_securetty.so
auth
required
pam_stack.so service=system-auth
auth
required
pam_nologin.so
account
required
pam_stack.so service=system-auth
password
required
pam_stack.so service=system-auth
session
required
pam_stack.so service=system-auth
session
optional
pam_console.so
模块类型:
Auth 看账户是否存在
Account 查看用户信息是否过期
Password 用户修改口令
Session   会话功能 对用户使用资源进行优化
控制标记:
Required 必须通过 通过后还往下看
Requisite 必须通过 通过后就不往下看
Sufficient 若通过就不验证了 否则继续往下验证
Opinion   可选项,可有可无的
System-auth是一个通用接口,被很多接口调用
 
实例应用:
1.pam_access.so 控制访问者地址与账号名称
[root@mail Server]# more /usr/share/doc/pam-0.99.6.2/txts/README.pam_access 查看它的说明文档,找到使用方法
从中得知它的默认的该模块的配置文档为/etc/security/access.conf,里面有语法使用规则
[root@mail Server]# vim /etc/security/access.conf
#       permission : users : origins
#-:user1:192.168.20.1    user1不能从192.168.20.1地址上登录
#-:user1:ALL         除了user1其他都可以登录    (前面不能有空格)
在接口上应用模块:
[root@mail Server]# vim /etc/pam.d/sshd
session    required     pam_access.so     添加该模块
之后便可以直接应用了,同时我们可以通过查看日志得到关于该模块在该接口上的调用信息
[root@mail Server]# tail /var/log/secure
[root@mail Server]# ssh -l user1 服务器ip    
2.pam_listfile.so 控制访问者的账号名称或登录位置(利用文件控制登录)
具体使用方法我们可以查看说明文件:
[root@mail ~]# less /usr/share/doc/pam-0.99.6.2/txts/README.pam_listfile
[root@mail ~]# vim /etc/pam.d/vsftpd    打开接口脚本,查看其中的配置策略
session   optional     pam_keyinit.so    force revoke
auth     required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth     required     pam_shells.so
auth     include      system-auth
account include      system-auth
session   include      system-auth
session   required     pam_loginuid.so
做用户的登录控制,在验证时pam_listfile.so模块验证必须是通过的,验证的是/etc/vsftpd/ftpusers文件中的账号在该文件中列出的用户都是被拒绝ftp登录的
 
做对ssh登录控制的,凡是在文件中用户便可以通过ssh登录
[root@mail ~]# vim /etc/pam.d/sshd   做只许ssh登录的
auth    include   system-auth
account   required     pam_listfile.so   item=user sense=allow file=/etc/sshuser onerr=succeed
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    required     pam_loginuid.so
[root@mail ~]# vim /etc/sshuser     创建该控制登录的文件
test1                            只许test1用户登录(管理员也能拒绝)
 
3.pam_linits.so 控制为用户分配资源
       该模块配置文件中有关于该模块具体的配置方法
[root@mail ~]# vim /etc/security/limits.conf
test1    hard    maxlogins       2 只许test1用户使用ssh开启两个终端登录
[root@mail ~]# vim /etc/pam.d/sshd
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so force revoke
session    required     pam_limit.so      添加引用该模块
session    include      system-auth
session    required     pam_loginuid.so
4.pam_nologin.so 若文件/etc/nologin存在则阻止普通账号登录系统,对管理员账号没有影响
5.pam_securetty.so 针对管理员做的限制,在文件中/etc/securetty定义了允许管理员登录的终端
 
这些模块只要我们配置好,然后在接口脚本配置好久可以使用了