加密和安全
Posted 黑夜天星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密和安全相关的知识,希望对你有一定的参考价值。
目录:
- 安全机制
- 安全算法
- gpg
- PKI和CA
- openssl
- 证书管理
- ssh服务和dropbear
- aide
- Sudo
- TCP Wrappers
- PAM模块。
1--[安全机制]
信息安全防护的目标 保密性 Confidentiality 完整性 Integrity 可用性 Usability 可控制性Controlability 不可否认性 Non-repudiation
安全防护环节 物理安全:各种设备/主机、机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务、应用程序
网络安全:对网络访问的控制、防火墙规则 数据安全:信息的备份与恢复、加密解密
管理安全:各种保障性的规范、流程、方
安全设计原则:使用成熟的安全系统 以小人之心度输入数据 外部系统是不安全的 最小授权 减少外部接口 缺省使用安全模式 安全不是似是而非
从STRIDE思考 在入口处检查 从管理上保护好你的系统
2--[安全算法]
常用安全技术
认证
授权
安全通信
审计
密码算法和协议: 对称加密 公钥加密 单向加密 认证协议
Linux系统:OpenSSL, gpg(pgp协议的实现)
不安全的传统协议 • telnet、FTP、POP3等等;
不安全密码 • http、smtp、NFS等等;
不安全信息 • Ldap、NIS、rsh等等;不安全验证
对称加密:加密和解密使用同一个密钥
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))
结合签名和加密
分离签名
单向散列:将任意数据缩小成固定大小的“指纹”
密钥交换:IKE( Internet Key Exchange )公钥加密: DH (Deffie-Hellman):生成会话密钥
DH:
- 1、A: a,p 协商生成公开的整数a, 大素数p
- 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,生成为密钥
3--[gpg]
1.使用gpg实现对称加密:gpg -c file ;输入密码;
2.在另一台主机上解密:gpg -o file -d file.gpg
3.使用gpg实现公钥加密:在hostB主机上用公钥加密,在hostA主机上解密
- 在hostA主机上生成公钥/私钥对 gpg --gen-key
- 在hostA主机上查看公钥 gpg --list-keys
- 在hostA主机上导出公钥root.pubkey gpg -a --export -o root.pubkey
- 从hostA主机上复制公钥文件到需加密的B主机上 scp root.pubkey hostB:
- 在需加密数据的hostB主机上生成公钥/私钥对 gpg --list-keys gpg --gen-key
- 在hostB主机上导入公钥 gpg --import root.pubkey gpg --list-keys
- 用从hostA主机导入的公钥,加密hostB主机的文件file,生成 file.gpg gpg -e -r mima file file file.gpg
- 复制加密文件到hostA主机 scp fstab.gpg hostA:
- 在hostA主机解密文件 gpg -d file.gpg gpg -o file -d file.gpg
- 删除公钥和私钥 gpg --delete-keys mima gpg --delete-secret-keys mima
4--[PKI和CA]
PKI: Public Key Infrastructure
- 签证机构: CA(Certificate Authority)
- 注册机构:RA
- 证书吊销列表:CRL
X.509:定义了证书的结构以及认证协议标准、 版本号、 序列号、 签名算法 、颁发者 、有效期限 、主体名称。
证书类型: 证书授权机构的证书 、服务器、 用户证书
获取证书两种方法:
• 使用证书授权机构 生成签名请求(csr ) 将csr发送给CA 从CA处接收签名
• 自签名的证书 自已签发自己的公钥
5--[openssl]
对称加密:
工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
enc命令:
帮助:man enc
加密: openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
解密: openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile
生成用户密码:passwd命令:
帮助:man sslpasswd openssl passwd -1 -salt SALT(最多8位)
openssl passwd -1 –salt centos
生成随机数:
帮助:man sslrand
openssl rand -base64|-hex NUM NUM: 表示字节数;-hex时,每个字符为十六进制,相 当于4位二进制,出现的字符数为NUM*2
公钥加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
数字签名:
算法:RSA, DSA, ELGamal
密钥交换:
算法:dh
DSA: Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:生成密钥对儿:
生成私钥 openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
(umask 077; openssl genrsa –out test.key –des 2048)
从私钥中提取出公钥 openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
Openssl rsa –in test.key –pubout –out test.key.pub
6--[证书管理]
创建私有CA: openssl的配置文件:/etc/pki/tls/openssl.cnf
三种策略:匹配、支持和可选
匹配指要求申请填写的信息跟CA设置信息必须一致,支持指必 须填写这项申请信息,可选指可有可无
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)
3、生成自签名证书 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: 证书的保存路径
4、颁发证书
• 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
• B 将证书请求文件传输给CA
• C CA签署证书,并将证书颁发给请求者 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 查看指定编号的证书状态
5、吊销证书
• 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
7--[ssh服务和dropbear]
ssh: secure shell, protocol, 22/tcp, 安全的远程登录
具体的软件实现: OpenSSH: ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现
两种方式的用户登录认证: 基于password
基于key
基于用户名口令登录验证原理:
基于key认证原理:
(1) 在客户端生成密钥对 ssh-keygen -t rsa [-P \'\'] [-f “~/.ssh/id_rsa"]
(2) 把公钥文件传输至远程服务器对应用户的家目录 ssh-copy-id [-i [identity_file]] [user@]host
(3) 测试
(4) 在SecureCRT或Xshell实现基于key验证 在SecureCRT工具—>创建公钥—>生成Identity.pub文件 转化为openssh兼容格式
(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中, 注意权限必须为600,
在需登录的ssh主机上执行: ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys 47 基于key认证
(5)重设私钥口令: ssh-keygen –p
(6)验证代理(authentication agent)保密解密后的密钥 • 这样口令就只需要输入一次 • 在GNOME中,代理被自动提供给root用户
否则运行ssh-agent bash
(7)钥匙通过命令添加给代理 ssh-add
ssh客户端组件:ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN StrictHostKeyChecking no 首次登录不显示检查提示
格式: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
其他工具:scp(传发文件)、rsync(增量备份转发文件)、sftp(基于数据安全加密的ftp)、pssh(方便批量处理的远程连接工具)
ssh最佳实践:不要使用默认端口
禁止使用protocol version 1
限制可登录用户
设定空闲会话超时时长
利用防火墙设置ssh访问策略
仅监听特定的IP地址
基于口令认证时,使用强密码策略 tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登录
限制ssh的访问频度和并发在线数
做好日志,经常分析
ssh的另一种实现:dropbear
• 1、安装开发包组:
• 2、下载dropbear-2017.75.tar.bz2
• 3、tar xf dropbear-2017.75.tar.bz2
• 4、less INSTALL README
• 5、./configure
• 6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" (INSTALL)
• 7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install 60 dropbear (INSTALL)
启动ssh服务: • 8、ls /usr/local/sbin/ /usr/local/bin/
• 9、/usr/local/sbin/dropbear -h
• 10、mkdir /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 #后台运行
客户端访问: • 14、ssh -p 2222 root@127.0.0.1
• 15、dbclient -p 2222 root@127.0.0.1
8--[AIDE]
AIDE(Adevanced Intrusion Detection Environment) • 高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的 完整性,
审计计算机上的那些文件被更改过了。 AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配 置文件。AIDE数据库能够保
存文件的各种属性,包括:权限 (permission)、索引节点序号(inode number)、所属用户(user)、 所属用户组(group)、文件大小、最
后修改时间(mtime)、创建时间 (ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE 还能够使用下列算法:sha1、md5、
rmd160、tiger,以密文形式 建立每个文件的校验码或散列号. • 这个数据库不应该保存那些经常变动的文件信息,例如:日志文件 、邮
件、/proc文件系统、用户起始目录以及临时目。aide也是一款免费的但功能也很强 大的工具。
安装 yum 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
生成检查数据库(建议初始数据库存放到安全的地方)
cd /var/lib/aide mv aide.db.new.gz aide.db.gz
检测: /usr/local/bin/aide --check
更新数据库 aide --update
9--[Sudo]
sudo能够授权指定用户在指定主机上运行某些命令。如果 未授权用户尝试使用 sudo,会提示联系管理员
sudo可以提供日志,记录每个用户使用sudo操作
sudo为系统管理员提供配置文件,允许系统管理员集中地 管理用户的使用权限和使用的主机
sudo使用时间戳文件来完成类似“检票”的系统,默认存 活期为5分钟的“入场券”
通过visudo命令编辑配置文件,具有语法检查功能 visudo –c 检查语法
配置文件:/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: 运行哪些命令
10--[TCP Wrappers]
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编 译时是否针对libwrap进行编译的
判断服务程序是否能够由tcp_wrapper进行访问控制的方法: ldd /PATH/TO/PROGRAM|grep libwrap.so
配置文件:/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
***EXCEPT用法: 示例:vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1 76
示例:只允许192.168.1.0/24的主机访问sshd /etc/hosts.allow -----------(sshd: 192.168.1. /etc/hosts.deny sshd :ALL)
示例:只允许192.168.1.0/24的主机访问telnet和vsftpd服务 /etc/hosts.allow ---------(vsftpd,in.telnetd: 192.168.1. /etc/host.deny vsftpd,in.telnetd: ALL)
11--[PAM]
PAM:Pluggable Authentication Modules
认证库:文本文件,mysql,NIS,LDAP等
PAM 是关注如何为服务验证用户的 API,通过提供一些动 态链接库和一套统一的API,将系统提供的服务和该服务的 认证方式分开,使得系统管理员
可以灵活地根据需要给不同 的服务配置不 同的认证方式而无需更改服务程序 一种认证框架,自身不做认证.
提供了对所有服务进行认证的中央机制,适用于login,远 程登录(telnet,rlogin,fsh,ftp,点对点协议(PPP)),su等 应用程序中。系统管理员通过
PAM配置文件来制定不同应 用 程序的不同认证策略;应用程序开发者通过在服务程序中使 用PAM API(pam_xxxx( ))来实现对认证方法的调用;而
PAM服务模块的开发者则利用PAM SPI来编写模块(主要是 引出一些函数pam_sm_xxxx( )供PAM接口库调用),将不 同的认证机制加入到系统中;
PAM接口库(libpam)则读取 配置文件,将应用程序和相应的PAM服务模块联系起来。
PAM架构:
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文 件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配 置文件(位于/etc/pam.d下),最后调用认证文件(位于 /lib/security下)进行安全认证
PAM认证过程: 1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始呼叫PAM模块,PAM模块会搜寻passwd程序的 PAM相关设定文件,这个设定文件一般是在/etc/pam.d/里 边的
与程序同名的文件,即PAM会搜 寻/etc/pam.d/passed 这个设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提 供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会 根据PAM回传的结果决定下一个动作(重新输入密码或者通 过验证)
PAM相关文件 ----模块文件目录:/lib64/security/*.so
---- 环境相关的设置:/etc/security/
---- 主配置文件:/etc/pam.conf,默认不存在
---- 为每种应用模块提供一个专用的配置文件: /etc/pam.d/APP_NAME (注意:如/etc/pam.d存在,/etc/pam.conf将失效)
通用配置文件/etc/pam.conf格式 application type control module-path arguments
专用配置文件/etc/pam.d/* 格式 type control module-path arguments
说明: 服务名(application) telnet、login、ftp等,服务名字“OTHER”代表所有没 有在该文件中明确配置的其它服务
模块类型(module-type)
control PAM库该如何处理与该服务相关的PAM模块的成 功或失败情况
module-path 用来指明本模块对应的程序文件的路径名
Arguments 用来传递给该模块的参数
模块类型(module-type)-----Auth 账号的认证和授权
-----Account 与账号管理相关的非认证类的功能,如:用来限 制/允许用户对某个服务的访问时间,当前有效的系统资源
(最多可以有多少个用户),限制用户的位置(例如:root用 户只能从控制台登录)
-----Password 用户修改密码时密码复杂度检查机制等功能
-----Session 用户获取到服务之前或使用服务完成之后需要进 行一些附加的操作,如:记录打开/关闭数据的信息,监视 目录等
-----type 表示因为缺失而不能加载的模块将不记录到系统日 志,对于那些不总是安装在系统上的模块有用
Control: PAM库如何处理与该服务相关的PAM模块成功或失败情况
两种方式实现: 简单和复杂
简单方式实现:一个关健词实现
required :一票否决,表示本模块必须返回成功才能通过 认证,但是如果该模块返回失败,失败结果也不会立即通 知用户,
当-type中的所有模块全部执行完毕 再将失败结果返回给应用程序。即为必要条件
requisite :一票否决,该模块必须返回成功才能通过认证, 但是一旦该模块返回失败,将不再执行同一type内的任何模 块,
而是直接将控制权返回给应用程序。是一个必要条件
sufficient :一票通过,表明本模块返回成功则通过身份认 证的要求,不必再执行同一type内的其它模块,但如果本模 块
返回失败可忽略。即为充分条件
optional :表明本模块是可选的,它的成功与否不会对身份 认证起关键作用,其返回值一般被忽略
include: 调用其他的配置文件中定义的配置信息。
module-path: 模块路径
相对路径: /lib64/security目录下的模块可使用相对路径 如:pam_shells.so、pam_limits.so
绝对路径: 模块通过读取配置文件完成用户对系统资源的使用控制 /etc/security/*.conf (注意:修改PAM配置文件将马上生效)
建议:编辑pam规则时,保持至少打开一个root会话,以防止 root身份验证错误 Arguments 用来传递给该模块的参数
以上是关于加密和安全的主要内容,如果未能解决你的问题,请参考以下文章