墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的,原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择
主要内容:
特性:
缺陷:
常见对称加密算法:
1.7.2.1 非对称加密算法介绍
非对称加密:密钥是成对出现
功能:
缺点:
常见算法:
发送者
接收者
接收者
1.7.2.4 RSA和DSA(了解)
RSA:公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的,RSA取名来自开发他们三者的名字,后成立RSA数据安全有限公司。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥
DSA (Digital Signature Algorithm):1991年7月26日提交,并归属于David W. Kravitz前NSA员工,DSA是Schnorr和ElGamal签名算法的变种,被美国NIST作为SS(DigitalSignature Standard), DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多
1.7.3 1 实现对称加密
对称加密file文件
gpg -c file
在另一台主机上解密file
gpg -o file -d file.gpg
1.7.3.2 实现公钥加密
目标:在hostB主机上用A的公钥加密,在hostA主机上解密 B —> A
在hostA主机上生成公钥/私钥对
gpg --gen-key
在hostA主机上查看公钥
gpg --list-keys
在hostA主机上导出公钥到wang.pubkey
gpg -a --export -o wang.pubkey
从hostA主机上复制公钥文件到需加密的B主机上
scp wang.pubkey hostB:
在需加密数据的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
复制加密文件到hostA主机
scp fstab.gpg hostA:
在hostA主机解密文件
gpg -d file.gpg
gpg -o file -d file.gpg
删除公钥和私钥
gpg --delete-keys wangxiaochun
gpg --delete-secret-keys wangxiaochun
哈希算法:也称为散列算法,将任意数据缩小成固定大小的“指纹”,称为digest,即摘要
特性:
功能:数据完整性
常见算法
md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512
常用工具
数字签名
RPM 文件完整性
rpm --verify package_name (or -V)
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
rpm --checksig pakage_file_name (or -K)
1.7.5.1 实现数据加密
实现数据加密,无法验证数据完整性和来源
1.7.5.2 实现数字签名
不加密数据,可以保证数据来源的可靠性、数据的完整性和一致性
1.7.5.3 综合加密和签名
即实现数据加密,又可以保证数据来源的可靠性、数据的完整性和一致性
方法1:Pb{Sa[hash(data)]+data}
方法2:对称key{Sa[hash(data)]+data}+Pb(对称key)
密钥交换:IKE( Internet Key Exchange )
DH 实现过程:
A: g,p 协商生成公开的整数g, 大素数p
B: g,p
A:生成隐私数据:a (a<p),计算得出 g^a%p,发送给B
B:生成隐私数据:b,(b<p),计算得出 g^b%p,发送给A
A:计算得出 [(g^b%p)^a] %p = g^ab%p,生成为密钥
B:计算得出 [(g^a%p)^b] %p = g^ab%p,生成为密钥
Man-in-the-middle,简称为 MITM,中间人
PKI:Public Key Infrastructure 公共密钥加密体系
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509:定义了证书的结构以及认证协议标准
证书类型:
获取证书两种方法:
1.8.3.1 TLS 介绍
SSL:Secure Socket Layer,TLS: Transport Layer Security
1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布
1995:SSL 2.0 Netscape 开发
1996:SSL 3.0
1999:TLS 1.0
2006:TLS 1.1 IETF(Internet工程任务组) RFC 4346,从2020年3月起,停止支持TLS 1.1及TLS 1.0版本安全协议,谷歌(Chrome)、Mozilla(Firefox)、微软(IE和Edge) 、苹果(Safari) 都会发布新版浏览器执行这个策略
2008:TLS 1.2 当前主要使用
2018:TLS 1.3
功能:
1.8.3.3 TLS实现过程
实现分为握手阶段和应用阶段
目前密钥交换 + 签名有三种主流选择:
实现方式1(了解)
注意:
1.在SSL握手机制中,需要三个随机数(客户端随机数+服务端随机数+预备主密钥)
2.至始至终客户端和服务端只有一次非对称加密动作——客户端使用证书中获得的服务端公钥加密预备主密钥。
3.上述SSL握手机制的前提单向验证,无需验证客户端,如果需要验证客户端则可能需要客户端的证书或客户端提供签名等。
4.Server和Visitor通信,Server把数字证书发给Visitor,最关键的一点是Visitor要保证证书的有效性,通过查看证书状态并去CA的吊销列表查看Server的证书是否被吊销。只有Server的证书可用了,才保证了第一环节的安全性
5.RSA 密钥交换有一个很大的问题:没有前向安全性Forward Secrecy。这意味着攻击者可以把监听到的加密流量先存起来,后续一旦拿到了私钥,之前所有流量都可以成功解密
实现方式2
目前大部分 HTTPS 流量用的都是 ECDHE 密钥交换。ECDHE 是使用椭圆曲线(ECC)的 DH(DiffieHellman)算法
前图中的 Server DH Parameter 是用证书私钥签名的,客户端使用证书公钥就可以验证服务端合法性。相比 RSA 密钥交换,DH 由传递 Premaster Scret 变成了传递 DH 算法所需的Parameter,然后双方各自算出 Premaster Secret
对于这种情况,由于 Premaster Secret 无需交换,中间人就算有私钥也无法获得 Premaster Secret 和Master Secret。当然,使用 ECDHE 后,虽然中间人拿到私钥也无法解密之前的流量,但可以实施MITM 攻击来解密之后的流量,所以私钥还是要保管好。
相比 RSA 既可以用于密钥交换,又可以用于数字签名;ECC 这边就分得比较清楚了:ECDHE 用于密钥交换,ECDSA 用于数字签名
HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL 或 HTTP over TLS ,对http协议的文本数据进行加密处理后,成为二进制形式传输
当一个入侵者进入了你的系统并且种植了木马,通常会想办法隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有两款:Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具
AIDE(Advanced 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
配置范例:
#定义监控项权限+索引节点+链接数+用户+组+大小+最后一次修改时间+创建时间+md5校验值
R=p+i+n+u+g+s+m+c+md5
NORMAL = R+rmd60+sha256
/data/test.txt R
/bin/ps R+a
/usr/bin/crontab R+a
/etc PERMS
!/etc/mtab #“!”表示忽略这个文件的检查
初始化默认的AIDE的库:
/usr/local/bin/aide -i | --init
生成检查数据库(建议初始数据库存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
检测
/usr/local/bin/aide -C | --check
更新数据库
aide -u | --update
sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性
在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。
sudo特性:
包:sudo
配置文件:/etc/sudo.conf
授权规则配置文件:
/etc/sudoers
/etc/sudoers.d
安全编辑授权规则文件和语法检查工具
/usr/sbin/visudo
范例:
#检查语法
visudo -c
#检查指定配置文件语法
visudo -f /etc/sudoers.d/test
授权编辑规则文件的工具:/usr/bin/sudoedit
执行授权命令:/usr/bin/sudo
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
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: "
配置文件格式说明:/etc/sudoers, /etc/sudoers.d/
配置文件中支持使用通配符 glob
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
[[alpha]] 字母
范例:
/bin/ls [[alpha]]*
配置文件规则有两类
1、别名定义:不是必须的
2、授权规则:必须的
sudoers 授权规则格式:
用户 登入主机=(代表用户) 命令
user host=(runas) command
范例:
root ALL=(ALL) ALL
格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命令
sudoers的别名
User和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
sudo别名有四种类型:
别名格式:
[A-Z]([A-Z][0-9]_)*
别名定义:
Alias_Type NAME1 = item1,item2,item3 : NAME2 = item4, item5
案例1:
Student ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
案例2:
student ALL=(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
案例3:
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=(root) NETCMD
案例4:
User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.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
案例5:
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [azA-Z]*, !/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
案例6:
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL
案例7:
wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd
案例8:如何解决?
wang ALL=(ALL) /bin/cat /var/log/messages*
案例9:授权用户修改配置文件,慎重
vim /etc/sudoers/test
Wang ALL=(ALL) sudoedit
wang 可以执行下面命令
sudoedit /etc/sudoers
sudoedit /etc/sudoers.d/test
案例10:修改验证密码间隔为2分钟
[root@centos8 ~]#vim /etc/sudoers
Defaults env_reset , timestamp_timeout=2
[root@centos8 ~]#sudo -V
......
Authentication timestamp timeout: 2.0 minutes......
范例11:ubuntu 默认用户具有sudo权限
root@ubuntu1804:~# grep %sudo /etc/sudoers
%sudo ALL=(ALL:ALL) ALL
root@ubuntu1804:~# id wang
uid=1000(wang) gid=1000(wang)
groups=1000(wang),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd),113(lpadmin),114(sambashare)
#默认的用户wang 属于此sudo组,所以wang有所有权限
范例12: 修改ubuntu的visudo的默认编辑器
root@ubuntu1804:~# export EDITOR=vim
root@ubuntu1804:~# visudo
范例:删除时间戳文件
[root@centos8 ~]#su - wang
Last login: Mon May 25 10:28:14 CST 2020 on pts/1
[wang@centos8 ~]$sudo -K
[wang@centos8 ~]$exit
logout
[root@centos8 ~]#ll /run/sudo/ts
total 4
-rw------- 1 root mage 112 May 25 10:11 mage
范例:修改sudo 提示符格式
[wang@centos8 ~]$sudo cat /var/log/messages
[sudo] password for wang:
[wang@centos8 ~]$sudo -p "password on %h for user %p: " cat /var/log/messages
password on centos8 for user wang:
链接跳转:Linux进阶_PAM认证机制
链接跳转:Linux进阶_OpenSSL
链接跳转:Linux进阶_SSH服务
链接跳转:Linux进阶_时间同步服务