加密和安全

墨菲定律
墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的,原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择
主要内容:
任何事都没有表面看起来那么简单
所有的事都会比你预计的时间长
会出错的事总会出错
如果你担心某种情况发生,那么它就更有可能发生
安全机制
信息安全防护的目标
保密性 Confidentiality
完整性 Integrity
可用性 Usability
可控制性Controlability
不可否认性 Non-repudiation
安全防护环节3
物理安全:各种设备/主机、机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务、应用程序
网络安全:对网络访问的控制、防火墙规则
数据安全:信息的备份与恢复、加密解密
管理安全:各种保障性的规范、流程、方法
安全攻击: STRIDE
Spoofing 假冒
Tampering 篡改
Repudiation 否认
Information Disclosure 信息泄漏
Denial of Service 拒绝服务
Elevation of Privilege 提升权限
安全设计基本原则
使用成熟的安全系统
以小人之心度输入数据
外部系统是不安全的
最小授权
减少外部接口
缺省使用安全模式
安全不是似是而非
从STRIDE思考
在入口处检查
从管理上保护好你的系统

安全算法
常用安全技术
认证
授权
审计
安全通信
密码算法和协议:
对称加密
公钥加密
单向加密
认证协议
Linux系统:OpenSSL, gpg(pgp协议的实现)
加密需要
不加密流量的易受攻击性
密码/数据嗅探
数据操作
验证操作
相当于邮寄明信片
不安全的传统协议
telnet、FTP、POP3等等;不安全密码
http、smtp、NFS等等;不安全信息
Ldap、NIS、rsh等等;不安全验证
对称加密算法
对称加密:加密和解密使用同一个密钥
DES:Data Encryption Standard,56bits
3DES:三次DES加密
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))
结合签名和加密
分离签名
单向散列
将任意数据缩小成固定大小的“指纹”
任意长度输入
固定长度输出
若修改数据,指纹也会改变(“不会产生冲突”)
无法从指纹中重新生成数据(“单向”)
功能:数据完整性
md5: 128bits、sha1: 160bits、sha224
sha256、sha384、sha512
常用工具
md5sum | sha1sum [ --check ] file
openssl、gpg
rp常见算式
m -V
密钥交换
密钥交换:IKE( Internet Key Exchange )
公钥加密:
DH (Deffie-Hellman):生成会话密钥,参看如下:
https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
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,生成为密钥
应用程序:RPM
文件完整性的两种实施方式
被安装的文件
MD5单向散列
rpm --verify package_name (or -V)
发行的软件包文件
GPG公钥签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
rpm --checksig pakage_file_name (or -K)
使用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主机上导出公钥到wang.pubkey
gpg -a --export -o wang.pubkey
从hostA主机上复制公钥文件到需加密的B主机上
scp wang.pubkey hostB:
使用gpg工具实现公钥加密
在需加密数据的hostB主机上生成公钥/私钥对
gpg --list-keys
gpg --gen-key
在hostB主机上导入公钥
gpg --import wang.pubkey
gpg --list-keys
用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg
gpg -e -r wangxiaochun file
file file.gpg
使用gpg工具实现公钥加密
复制加密文件到hostA主机
scp fstab.gpg hostA:
在hostA主机解密文件
gpg -d file.gpg
gpg -o file -d file.gpg
删除公钥和私钥
gpg --delete-keys wangxiaochun
gpg - 删除密钥wangxiaochun
秘钥是成对出现的,删除私钥时要先删除公钥
CA和证书
PKI:公钥基础设施
签证机构:CA(证书颁发机构)
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法主体公钥
颁发者CRL分发点
有效期限扩展信息
主体名称发行者签名
证书获取
证书类型:
证书授权机构的证书
服务器
用户证书
获取证书两种方法:
使用证书授权机构
生成签名请求(CSR)
将CSR发送给CA
从CA处接收签名
自签名的证书
自已签发自己的公钥
安全协议
SSL:安全套接字层
TLS:传输层安全性
1995年:SSL 2.0 Netscape
1996年:SSL 3.0
1999年:TLS 1.0
2006:TLS 1.1 IETF(Internet工程任务组)RFC 4346
2008:TLS 1.2当前使用
2015年:TLS 1.3
功能:机密性,认证,完整性,重放保护:(截获用户名密码不解密直接发给网络实现绕过安全认证)
两阶段协议,分为握手阶段和应用阶段
握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数,密码套件以及主密钥后续通信使用的所有密钥都是通过MasterSecret生成。
应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信

SSL / TLS
握手协议:包括协商安全参数和密码套件,服务器身份认证(客户端身份认证可选),密钥交换
ChangeCipherSpec协议:一条消息表示握手协议已经完成
Alert协议:对握手协议中的某些异常的错误提醒,分为致命和警告两个级别,致命类型错误会直接中断SSL链接,而警告级别的错误SSL链接仍可继续,只是会给出错误警告
记录协议:包括对消息的分段,压缩,消息认证和完整性保护,加密等
HTTPS协议:就是“HTTP协议”和“SSL / TLS协议”的组合.HTTP overSSL“或”HTTP over TLS“,对于http协议的文本数据进行加密处理后,成为二进制形式传输
OpenSSL的
OpenSSL的:开源项目
三个组件:
openssl:多用途的命令行工具,包openssl
libcrypto:加密算法库,包openssl-libs
的libssl:加密模块应用库,实现了SSL及TLS,包NSS
OpenSSL的命令:
两种运行模式:交互模式和批处理模式
openssl版本:程序版本号
标准命令,消息摘要命令,加密命令
标准命令:
enc,ca,req,...
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测试文件
openssl?
单向加密:
工具:md5sum,sha1sum,sha224sum,sha256sum ...
openssl dgst
DGST命令:
帮助:man dgst
openssl dgst -md5 [-hex默认] / PATH / SOMEFILE
openssl dgst -md5 testfile
md5sum / PATH / TO / SOMEFILE
MAC:消息认证码,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制
CBC-MAC
HMAC:使用MD5或SHA-1算法
生成用户密码:
passwd的命令:
帮助:man sslpasswd
openssl密码-1 - 盐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:数字签名算法
DSS:数字签名标准
RSA:
生成密钥对儿: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将加密密钥解密
从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE
openssl rsa -in test.key -pubout -out test.key.pub
随机数生成器:伪随机数字
键盘和鼠标,块设备中断
的/ dev /随机:仅从熵池返回随机数;随机数用尽,阻塞
的/ dev / urandom的:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
OpenSSL的
PKI:公钥基础设施
CA
RA
CRL
证书存取库
建立私有CA:
OpenCA
OpenSSL的
证书申请及签署步骤:
1,生成申请请求
2,RA核验
3,CA签署
4,获取证书
向CA申请证书



1.创建Root CA
在服务器端操作
1)生成私钥
(umask 066; openssl genrsa -out cakey.pem 4096)
2)自签名证书
openssl req -new -x509 -key private / cakey.pem -out cacert.pem -days 3650

2.用户或服务器
1)生成私钥
到客户端进行一下操作
在/ MNT下生成私钥
(umask 077; openssl genrsa -out app.key 1024)
2)生成证书申请
openssl req -new -key app.key -out app.csr

3)申请文件发给CA
scp app.csr 192.168.30.110:/etc/pki/CA

3.CA颁发证书
回到服务器端
创建index.txt和串行文件后颁发文件否则会报以下错误

触摸/etc/pki/CA/index.txt
回声01>序列
4.证书发送客户端
openssl ca -in app.csr -out certs / app.crt -days 100

5.应用软件中使用证书
创建CA和申请证书
创建私有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)
生成自签名证书
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:证书的保存路径
3,颁发证书
在需要使用证书的主机生成证书请求
给网络服务器生成私钥
(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
将证书请求文件传输给CA
CA签署证书,并将证书颁发给请求者
openssl ca -in /tmp/test.csr -out
/etc/pki/CA/certs/test.crt-天365
注意:默认国家,省,公司名称三项必须和CA一致
创建CA和证书管理
查看证书中的信息:
openssl x509 -in / PATH / FROM / CERT_FILE -noout -text | issuer | subject | serial | dates
openssl ca -status SERIAL查看指定编号的证书状态
4,吊销证书
在客户端获取要吊销的证书的序列
openssl x509 -in / PATH / FROM / CERT_FILE -noout -serial -subject
在CA上,根据客户提交的序列与主题信息,对比检验是否与index.txt文件中的信息一致,吊销证书:
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行
echo 01> / etc / pki / CA / crlnumber
更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl.pem
查看CRL文件:
openssl crl -in /etc/pki/CA/crl.pem -noout -text
SSH
ssh:secure shell,protocol,22 / tcp,安全的远程登录
具体的软件实现:
OpenSSH:ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现
SSH协议版本
v1:基于CRC-32做MAC,不安全; man-in-middle
V2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证
两种方式的用户登录认证:
基于密码
基于关键
OpenSSH的软件组
OpenSSH的介绍
相关包:
OpenSSH的
OpenSSH的客户机
的OpenSSH服务器
工具:
基于C / S结构
客户端:ssh,scp,sftp,slogin
的Windows客户端:
xshell,putty,securecrt,sshsecureshellclient
服务器:sshd
SSH客户端
客户端组件:
ssh,配置文件:/ etc / ssh / ssh_config
主机模式
StrictHostKeyChecking no首次登录不显示检查提示
格式:ssh [user @] host [COMMAND]
ssh [-l用户]主机[COMMAND]
-p port:远程服务器监听的端口
-b:指定连接的源IP
-v:调试模式
-C:压缩方式
-X:支持x11转发
-Y:支持信任X11转发
ForwardX11Trusted是的
-t:强制伪tty分配
ssh -t remoteserver1 ssh remoteserver2
SSH客户端
允许实现对远程系统经验证地加密安全访问
当用户远程连接SSH服务器时,会复制SSH服务器/etc/ssh/ssh_host*key.pub(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的〜/ SSH / know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
SSH服务登录验证
SSH服务登录验证方式:
用户/口令
基于密钥
基于用户和口令登录验证
1客户端发起ssh请求,服务器会把自己的公钥发送给用户
2用户会根据服务器发来的密钥进行加密
3加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则
用户登录成功
SSH服务登录验证
基于密钥的登录方式
1首先在客户端生成一对密钥(ssh-keygen)
2并将客户端的公钥ssh-copy-id拷贝到服务端
3当客户端再次发送一个连接请求,包括ip,用户名
4服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:acdf
5服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
7服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
基于密钥认证
(1)在客户端生成密钥对
ssh-keygen -t rsa [-P''] [-f“〜/ .ssh / id_rsa”]
(2)将公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [user @]主机
(3)测试
(4)在SecureCRT或Xshell实现基密钥验证
在SecureCRT的工具 - >创建公钥 - >生成Identity.pub文件
转化为OpenSSH的兼容格式(适合的SecureCRT,XSHELL不需要转化格式),并复制到需登录主机上相应文件的authorized_keys中,注意权限必须为600,在需登录的SSH主机上执行:
ssh-keygen -i -f Identity.pub >> .ssh / authorized_keys
(5)重设私钥口令:
ssh-keygen -p
(6)验证代理(验证代理)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供给根用户
否则运行ssh-agent bash
(7)钥匙通过命令添加给代理
SSH-ADD
SCP命令
scp [选项] SRC ... DEST /
两种方式:
scp [options] [user @] host:/ sourcefile / destpath
scp [options] / sourcefile [user @] host:/ destpath
常用选项:
-C:压缩数据流
-r:递归复制
-p:保持原文件的属性信息
-q:静默模式
-P PORT:指明远程主机的监听的端口
rsync的命令
基于SSH和RSH服务实现高效率的远程系统之间复制文件
使用安全的外壳连接做为传输方式
rsync -av / etc server1:/ tmp复制目录和目录下文件
rsync -av / etc / server1:/ tmp只复制目录下文件
比SCP更快,只复制不同的文件
选项:
-n模拟复制过程
-v显示详细过程
-r递归复制目录树
-p保留权限
-t保留时间戳
-g保留组信息
-o保留所有者信息
-l将软链接文件本身进行复制(默认)
-L将软链接文件指向的文件复制
-a存档,相当于-rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
SFTP命令
交互式文件传输工具
用法和传统的FTP工具相似
利用SSH服务实现安全的文件上传和下载
使用ls cd mkdir rmdir pwd get put等指令,可用?或帮助获取帮助信息
sftp [user @]主机
sftp>帮助
PSSH工具
PSSH是一个Python的编写可以在多台服务器上执行命令的工具,也可实现文件复制
选项如下:
--version:查看版本
-h:主机文件列表,内容格式” [用户@]主机[:端口]”
-H:主机字符串,内容格式” [用户@]主机[:端口]”
-l:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输入文件【可选】
-t:TIMEOUT超时时间设置,0无限制【可选】
-O:SSH的选项
-v:详细模式
-A:手动输入密码模式
-x:额外的命令行参数使用空白符号,引号,反斜线处理
-X:额外的命令行参数,单个参数模式,同-x
-i:每个服务器内部处理信息输出
-P:打印出服务器返回信息
PSCP.PSSH命令
pscp.pssh功能是将本地文件批量复制到远程主机
pscp [-vAr] [-h hosts_file] [-H [user @] host [:port]] [-l user] [-p par] [-o outdir] [-e errdir]
[-t超时] [-O选项] [-x参数] [-X参数]本地远程
PSCP-PSSH选项
-v显示复制过程
-a复制过程中保留常规属性
-r递归复制目录
将本地curl.sh复制到/ app /目录
pscp.pssh -H 192.168.1.10 /root/test/curl.sh / app /
pscp.pssh -h host.txt /root/test/curl.sh / app /
将本地多个文件批量复制到/应用/目录
pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh / app /
将本地目录批量复制到/应用/目录
pscp.pssh -H 192.168.1.10 -r / root / test / / app /
PSLURP.PSSH命令
pslurp.pssh功能是将远程主机的文件批量复制到本地
pslurp [-vAr] [-h hosts_file] [-H [user @] host [:port]] [-l user] [-p par] [ - o
outdir] [-e errdir] [-t timeout] [-O选项] [-x args] [-X arg] [-L localdir]
remote local(本地名)
Pslurp-PSSH选项
-L指定从远程主机下载到本机的存储的目录,本地是下载到本地后的名称
-r递归复制目录
批量下载目标服务器的passwd的文件至/应用下,并更名为用户
pslurp -H 192.168.1.10 -L / app / / etc / passwd用户
SSH端口转发
SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。但是,SSH还能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密和解密服务。过程也被叫做“隧道”(tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过将TCP端口转发来使用SSH进行通讯
SSH端口转发能够提供两大功能:
加密SSH Client端至SSH Server端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的TCP连接
本地转发:
-L localport(监听服务器端口):remotehost(serverIP地址):remotehostpor(服务器端口号)t sshserver(ssh服务器地址)
选项:
-f后台启用
-N不打开远程shell,处于等待状态
-g启用网关功能
示例
ssh -L 9527:telnetsrv:23 -N sshsrv
telnet 127.0.0.1 9527
当访问本机的9527的端口时,被加密后转发到sshsrv的SSH服务,再解密被转发到telnetsrv:23
数据--->本地主机:9527 --->本地主机:XXXXX ---> sshsrv:22 ---> sshsrv:YYYYY ---> telnetsrv:23
远程转发:
-R sshserverport:remotehost:remotehostport sshserver
动态端口转发:
当用火狐访问互联网时,本机的1080端口做为代理服务器,火狐的访问请求被转发到sshserver上,由sshserver替之访问互联网
ssh -D 1080 root @ sshserver
在本机firefox设置代理套接字代理:127.0.0.1:1080
curl --socks5 127.0.0.1:1080 http://www.qq.com
X协议转发
所有图形化应用程序都是X客户程序
能够通过TCP / IP连接远程X服务器
数据没有加密机,但是它通过SSH连接隧道安全进行
ssh -X user @ remotehost gedit
远程主机主机上的的gedit工具,将会显示在本机的X服务器上
传输的数据将通过SSH连接加密
SSH服务器
服务器端:sshd,配置文件:/ etc / ssh / sshd_config
常用参数:
Port连接端口
ListenAddress ip指定连接ip地址
LoginGraceTime 2m登录不输入密码最长等待时间
PermitRootLogin yes是否允许root登录
StrictModes是检查.ssh /文件的所有者,权限等
MaxAuthTries 6最大的密码验证次数的一半
MaxSessions 10同一个连接最大会话,一个会话能克隆几次
PubkeyAuthentication是是否能通过公钥的验证方式
PermitEmptyPasswords no
PasswordAuthentication yes是否能通过密码的验证方式
GatewayPorts no
ClientAliveInterval:单位:秒是否允许客户端活动间隔0表示不限制
ClientAliveCountMax:默认3设置探测活动间隔超时次数
UseDNS yes是否启用DNS解析
GSSAPIAuthentication yes基于GSSAPI的登录验证,提高速度可改为no
MaxStartups未认证连接最大值,默认值10(并发连接数的控制,选择性断开,超过最大值全部断开)
banner / path / file ssh的登录后提示文档路径
限制可登录用户的办法:
AllowUsers user1 user2 user3白名单
DenyUsers黑名单
AllowGroups白组
DenyGroups黑组
白名单和黑名单中用户冲突时黑名单优先
助手
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉系统上的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行的crontab作业,也有可能替换掉的crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有
两款:绊和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具
•AIDE(高级入侵检测环境)
•高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。
•AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件.AIDE数据库能够保存文件的各种属性,包括:权限(权限),引用节点序号(inode编号),所有用户(用户) ,所属用户组(组),文件大小,最后修改时间(修改时间),创建时间(的ctime),最后访问时间(atime的),增加的大小以及连接数.AIDE还能够使用下列算法:SHA1,MD5,rmd160 ,虎,以密文形式建立每个文件的校验码或散列号。
•这个数据库不应该保存那些经常变化的文件信息,例如:日志文件,邮件,/ proc文件系统,用户起始目录以及临时目录。
安装
yum安装助手
修改配置文件
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
更新数据库
助手 - 更新
更改身份
su切换身份:su -l username -c'command'
须藤
须藤
来自须藤包
男人5个sudoers
sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo,会提示联系管理员。
须藤可以提供日志,记录每个用户使用sudo的操作。
须藤为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。
须藤使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”。
通过visudo命令,命令编辑配置文件,具有语法检查功能。
visudo -c检查语法
配置文件:/ etc / sudoers,/etc/sudoers.d/
时间戳文件:/ var / db / sudo(centos6)/ var / db / sudo / lectured(centos7)
日志文件:/无功/日志/安全
配置文件支持使用通配符水珠:
?:任意单一字符
*:匹配任意长度字符
[WXC]:匹配其中一个字符
[!WXC]:除了这三个字符的其它字符
\ x:转义
[α]:字母示例:/ bin / ls [α] *
配置文件规则有两类;
1,别名定义:不是必须的
2,授权规则:必须的
sudoers文件
授权规则格式:
用户登入主机=(代表用户)命令
示例:
根ALL =(ALL)ALL
格式说明:
user:运行命令者的身体
主持人:通过哪些主机
(运行方式):以哪个用户的身份
命令:运行哪些命令

别名
用户运行方式状语从句:
用户名
#uid
%团队名字
%#GID
user_alias | runas_alias
主办:
IP或主机名
网络(/网络掩码)
host_alias
命令:
命令名称
目录
sudoedit
Cmnd_Alias
别名有四种类型:User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias
别名格式:[AZ]([AZ] [0-9] _)*
别名定义:
Alias_Type NAME1 = item1,item2,item3:NAME2 = item4,item5
%轮ALL =(ALL)NOPASSWD(不用输入密码):ALL
sudo的命令
ls -l / usr / bin / sudo
sudo -i -u wang切换身份
sudo [-u用户]命令
-V显示版本信息等配置信息
-u用户默认为root
-l,ll列出用户在主机上可用的和被禁止的命令
-v再延长密码有效期限5分钟,更新时间戳
-k清除时间戳(1970-01-01),下次需要重新输密码
-K与-k类似,还要删除时间戳文件
-b在后台执行指令
-p改变询问密码的提示符号
TCP_Wrappers的介绍
作者:Wieste Venema,IBM,Google
工作在第四层(传输层)的TCP协议
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的
判断服务程序是否能够由tcp_wrapper的进行访问控制的方法:
ldd / PATH / TO / PROGRAM | grep libwrap.so
字符串PATH / TO / PROGRAM | grep libwrap.so
TCP_Wrappers的的使用
配置文件:/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 @主机格式
单个应用程序的二进制文件名,而非服务名,例如VSFTPD
以逗号或空格分隔的应用程序文件名列表,如:sshd的,VSFTPD
ALL表示所有接受tcp_wrapper控制的服务程序
主机有多个IP,可用@hostIP来实现控制
客户端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
[:options]选项:
帮助:man 5 hosts_options
deny 主要用在/etc/hosts.allow定义“拒绝”规则
如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定义“允许”规则
如:vsftpd:172.16. :allow
spawn 启动一个外部程序完成执行的操作
twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端,默认至/dev/null
测试工具:
tcpdmatch [-d] daemon[@host] client
-d 测试当前目录下的hosts.allow和hosts.deny
PAM认证机制
PAM:Pluggable Authentication Modules
认证库:文本文件,MySQL,NIS,LDAP等
Sun公司于1995 年开发的一种与认证相关的通用框架机制
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相关文件
模块文件目录:/lib64/security/*.so
环境相关的设置:/etc/security/
主配置文件:/etc/pam.conf,默认不存在
为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf将失效
PAM认证过程:
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
通用配置文件/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: 调用其他的配置文件中定义的配置信息
复杂详细实现:使用一个或多个“status=action”
[status1=action1 status2=action …]
Status:检查结果的返回状态
Action:采取行为 ok,done,die,bad,ignore,reset
ok 模块通过,继续检查
done 模块通过,返回最后结果给应用
bad 结果失败,继续检查
die 结果失败,返回失败结果给应用
ignore 结果忽略,不影响最后结果
reset 忽略已经得到的结果
module-path: 模块路径
相对路径:
/lib64/security目录下的模块可使用相对路径
如:pam_shells.so、pam_limits.so
绝对路径:
模块通过读取配置文件完成用户对系统资源的使用控制
/etc/security/*.conf
注意:修改PAM配置文件将马上生效
建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误
Arguments 用来传递给该模块的参数
pam认证原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
pam_limits.so
<domain> 应用于哪些对象
Username 单个用户
@group 组内所有用户
* 所有用户
<type> 限制的类型
Soft 软限制,普通用户自己可以修改
Hard 硬限制,由root用户设定,且通过kernel强制生效
- 二者同时限定
<item> 限制的资源
nofile 所能够同时打开的最大文件数量,默认为1024
nproc 所能够同时运行的进程的最大数量,默认为1024
<value> 指定具体值




猜你喜欢

转载自blog.csdn.net/qq_35242906/article/details/80396552