安全和加密
不加密流量的易受攻击性
密码/数据嗅探
数据操作
验证操作
相当于邮寄明信片
不安全的传统协议
telnet、FTP、POP3等等;不安全密码
http、smtp、NFS等等;不安全信息
Ldap、NIS、rsh等等;不安全验证
NIST(美国国家标准与技术研究院)定义的安全属性:
保密性:
数据保密性
隐私性
完整性:不可篡改
数据完整性
系统完整性
可用性
安全攻击: STRIDE
Spoofing(假冒)、Tampering(篡改)、Repudiation(否认)、Information Disclosure(信息泄漏)、Denial of Service(拒绝服务)和 Elevation of Privilege(提升权限)
安全机制:
加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证
安全服务:
认证
访问控制
数据保密性
连接保密性
无连接保密性
选择域保密性
流量保密性
数据完整性
不可否认性
设计基本原则
使用成熟的安全系统
以小人之心度输入数据
外部系统是不安全的
最小授权
减少外部接口
缺省使用安全模式
安全不是似是而非
从STRIDE思考
在入口处检查
从管理上保护好你的系统
常用安全技术
认证
授权
安全通信
审计
密码算法和协议:
对称加密
公钥加密
单向加密
认证协议
Linux系统:OpenSSL, gpg(pgp协议的实现)
1、对称加密
特性:
1、加密、解密使用同一个密钥,效率高
2、将原始数据分割成固定大小的块,逐个进行加密
算法:
DES:Data Encryption Standard,56bits
3DES:使用DES加密三次
AES:Advanced (128, 192, 256bits)
Blowfish,Twofish
IDEA,RC6,CAST5
缺陷:
1、密钥过多
2、密钥分发困难
3、数据来源无法确认
2、非对称加密算法(公钥加密)
公钥:公开给所有人;public key
私钥:自己留存,必须保证其私密性;secret key
特点:密钥成对出现;用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
数字签名:主要在于让接收方确认发送方身份
对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
数据加密:适合加密较小数据
缺点:密钥长,加密解密效率低下
算法:RSA(加密,数字签名),DSA(数字签名),ELGamal
(1)实现数字签名:使用自己的私钥加密
发送者A
生成公钥/私钥对:P和S
公开公钥P,保密私钥S
使用自己的私钥S来加密消息data
将S(data)发送给接收者B
接收者B
使用发送者A的公钥P来解密data=P(S(data))
(2)实现加密:使用对方的公钥加密
接收者B
生成公钥/私钥对:P和S
公开公钥P,保密私钥S
发送者A
使用接收者B的公钥P来加密消息data
将P(data)发送给接收者A
接收者B
使用自己的公钥S来解密:data=S(P(data))
3、单向加密
特点:
将任意数据缩小成固定大小的“指纹”
任意长度输入
固定长度输出
若修改数据,指纹也会改变(“不会产生冲突”)
无法从指纹中重新生成数据(“单向”)
功能:确保数据完整性
算法:md5: 128bits、sha1: 160bits、sha224sha256、sha384、sha512
4、密钥交换:IKE( Internet Key Exchange )
公钥加密:
DH (Deffie-Hellman):
1、A: a,p 协商生成公开的整数a, 大素数p
B: a,p
2、A:生成隐私数据 :x (x<p ),计算得出 a^x%p,发送给B
B:生成隐私数据 :y (y<p ),计算得出 a^y%p,发送给A
3、A:计算得出 (a^y%p)^x = a^xy%p,生成为密钥
B:计算得出 (a^x%p)^y = a^xy%p, 生成为密钥
CA和证书
PKI: Public Key Infrastructure
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509:定义了证书的结构以及认证协议标准
版本号
主体公钥
序列号
CRL分发点
签名算法
扩展信息
颁发者
发行者签名
有效期限
主体名称
证书获取
证书类型:
证书授权机构的证书
服务器
用户证书
获取证书两种方法:
使用证书授权机构
生成签名请求(csr)
将csr发送给CA
从CA处接收签名
自签名的证书
自已签发自己的公钥
安全协议
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 RFC( Request For Comments ) 4346
2008:TLS 1.2 当前使用
2015: TLS 1.3
功能:机密性,认证,完整性,重放保护
两阶段协议,分为握手阶段和应用阶段
握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。
应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信。
SSL/TLS
Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
ChangeCipherSpec 协议:一条消息表明握手协议已经完成
Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输
OpenSSL:开源项目
三个组件:
openssl: 多用途的命令行工具
libcrypto: 加密算法库
libssl:加密模块应用库,实现了ssl及tls
openssl命令:
两种运行模式:交互模式和批处理模式
openssl version:程序版本号
标准命令、消息摘要命令、加密命令
标准命令:enc, ca, req, …
注:查看支持的加密算法:openssl ?
1、对称加密
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
-e:加密
-d:解密
-des3:指明des3加密算法
-a:编码为文本,可放于文件中,默认编码为二进制文件
-salt [xxxx]:杂质,可手动指明字母或数字,默认随机添加,最长8位
-in:输入文件
-out:输出文件
注:
回车后键入密码
加密不会删除源文件
2、非对称加密(公钥加密)
genrsa命令:man genrsa
# 生成私钥 openssl genrsa {-out|>} /PATH/TO/PRIVATEKEY.FILE [-des] NUM 键入回车后设置私钥密码
# 提取公钥 openssl rsa -in /PATH/TO/PRIVATEKEY.FILE -pubout -out /PATH/TO/PUBLICKEYFILE 键入回车后输入私钥密码
-des:对私钥进行des加密保护
NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2
注:
生成的私钥权限应仅自己有读写权限可使用以下命令,括号表示在子shell中运行生成私钥,并设置其umask权限,此时生成的私钥仅属主有读写权限
(umask 077; openssl genrsa -out key.pri -des 2048)
3、单向加密
dgst命令:man dgst
# 计算文件特征码 openssl dgst -md5 [-hex] filename
注:md5sum filename
4、生成用户密码:
passwd命令:man sslpasswd
# openssl passwd -1 -salt [xxxx] 密码口令
-1:指明加密算法(1表示md5算法)
-salt [xxxx]:杂质,可手动指明字母或数字,默认随机添加,最长8位
示例:openssl passwd -1 salt centos
openssl passwd -1 salt $(openssl rand -hex 4) 使用随机数生成器结果作为杂质
5、生成随机数:
sslrand命令:man sslrand
# openssl rand {-base64|-hex} NUM
-base64:使用base64编码,所有文本均可
-hex:使用十六进制数字编码使用,只使用0-f之间的字符进行编码,默认
NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2
注:默认生成的随机数为二进制编码
linux系统上的随机数生成器
/dev/random:仅从熵池返回随机数;随机数用尽,将阻塞后面的进程,等待更多的随机数生成
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞,伪随机数不够安全
熵池:运行中的内核在内存维护的地址空间,从中存储大量的随机数,开机时为空,剪切使用
来源:各种I/O中断之间的时间间隔
键盘和鼠标:相邻击键间的时间差
块设备中断:硬盘IO中断时间间隔
1、使用gpg实现对称加密
在hostB主机加密,在hostA主机上解密;在同一台主机上操作时无需密码即可解密
加密:在hostB主机加密
gpg -c file 回车后输入密码
ls file.gpg
解密:在hostA主机上解密
gpg -o file -d file.gpg 回车后输入密码
-o:解密后保存在文件
2、使用gpg工具实现公钥加密
在hostB主机上用hostA的公钥加密,在hostA主机上解密
(1)在hostA主机上生成公钥/私钥对
gpg –gen-key 回车后选择加密算法,密钥长度,有效期,确认信息y/N,user_id,属主邮箱,描述,是否接受,密钥密码
(2)在hostA主机上查看公钥
gpg –list-keys
(3)在hostA主机上导出公钥到keyA.pub
gpg -a –export -o keyA.pub
(4)从hostA主机上复制公钥文件到需加密的B主机上
scp keyA.pub hostB:
(5)在hostB主机上导入hostA主机的公钥
gpg –import keyA.pub
gpg –list-keys
(6)用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg
gpg -e -r user_id file
ls file.gpg
(7)复制加密文件到hostA主机
scp file.gpg hostA:
(8)在hostA主机解密文件
gpg -d file.gpg
gpg -o file -d file.gpg
-o:解密后保存在文件
(9)删除公钥和私钥(公钥与私钥成对存在是,先删除私钥再删除公钥)
gpg –delete-secret-keys user_id 删除该私钥
gpg –delete-keys user_id 删除该公钥
PKI:Public Key Infrastructure 公共密钥加密体系
CA
RA
CRL
证书存取库
建立私有CA:
openssl
OpenCA:开源CA工具,基于openssl
注:在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可
证书申请及签署步骤:
1、生成申请请求
2、RA核验
3、CA签署
4、获取证书
创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.conf 其中定义了CA的各种配置
CA的配置:
/etc/pki/CA/ 工作目录
新建:
/etc/pki/CA/serial 当前主机序列号码
/etc/pki/CA/index.txt 已经颁发的证书索引
/etc/pki/CA/private/cakey.pem CA自己的私钥
/etc/pki/CA/cacert.pem CA的自签证书
存在:
/etc/pki/CA/private/ CA的私钥放置目录
/etc/pki/CA/newcerts/ 尚未签署的证书放置处
/etc/pki/CA/certs/ 已经签署的证书
/etc/pki/CA/crl/ 已经吊销的证书
注:policy客户端与CA之间标有match的选项必须相同,countryName,stateOrProvinceName,localityName
(1) 创建所需要的文件
(a) touch /etc/pki/CA/index.txt
(b) echo 01 > /etc/pki/CA/serial
(2) CA自签证书
(a)生成私钥
cd /etc/pki/CA/
(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem [-des] 2048)
注:cakey.pem文件名必须与配置文件中对应,自定义文件名时需修改配置文件使其与之相同
(b)生成自签证书
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 : 证书的保存路径
键入回车后输入country name,state province name,local name,organzation name,organzation unit name,common name(hostname),mail address
(c)查看证书信息:
openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -text|subject|serial|dates
(3) 申请证书
(a) 生成私钥(以web服务为例)
mkdir /etc/httpd/ssl
cd /etc/httpd/ssl
(umask 066; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
(b) 生成申请证书
openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
键入回车后输入country name,state province name,local name,organzation name,organzation unit name,common name(hostname),mail address
(c) 提交申请证书
scp /etc/httpd/ssl/httpd.key CA:/etc/pki/CA/newcerts/
(4) 签署证书
openssl ca -in /etc/pki/CA/newcerts/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
注:默认国家,省 ,公司名称必须和CA一致,主机名hostmane.domain
/tmp/目录下的证书申请文件签署后即可删除
颁发证书
scp /etc/pki/CA/certs/httpd.crt WEB:/etc/httpd/ssl/
(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
注:其中SERIAL.pem要换成证书真正的序列号
(c) 生成吊销证书的编号(第一次吊销证书时才需要执行)
echo 01 > /etc/pki/CA/crlnumber
(d) 更新证书吊销列表:openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl
查看crl文件: openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text
SSH
ssh: secure shell, protocol, 22/tcp, 安全的远程登录
OpenSSH: ssh协议的开源实现
dropbear:另一个开源实现
SSH协议版本
v1: 基于CRC-32做MAC,不安全;man-in-middle
v2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证
两种方式的用户登录认证:
基于password
基于key
OpenSSH: C/S架构
C:
Linux:openssh-clients:ssh, scp, sftp
Windows: xshell, putty, securecrt, sshsecureshellclient
S: openssh-server:sshd
ssh客户端
客户端组件:
ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
ForwardX11Trusted yes 支持信任x11转发
StrictHostKeyChecking no 首次登录不显示检查提示
格式:ssh [user@] host [COMMAND]
ssh [-l user] host [COMMAND]
-p port:远程服务器监听的端口
-b:指定连接的源IP
-v:调试模式
-C:压缩方式
-X: 支持x11转发
-Y:支持信任x11转发
-t: 强制伪tty分配
示例:ssh -t remoteserver1 ssh remoteserver2 其中: remoteserver1为跳板,remoteserver2为目标
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的监听的端口
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 存档模式,相当于 rlptgo,但不保留ACL(-A)和SELinux属性(-X)
sftp命令
交互式文件传输工具
用法能和传统的ftp工具相似
利用ssh服务实现安全的文件上传和下载
使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息。
sftp [user@]host
sftp> help
两种认证方式
1、基于password认证
允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/中的
ssh_host_rsa_key.pub(centos6)
ssh_host_ecdsa_key.pub(centos7)
到客户机的~./ssh/know_hosts中。下次连接时,会比较两处是否有不同。
2、基于key认证
(1) 在客户端生成密钥对
ssh-keygen -t {rsa|dsa} [-P 'passwd'] [-f “/root/.ssh/id_rsa|dsa"]
(2) 把公钥文件传输至远程服务器对应用户的家目录,会自动创建.ssh/authorized_keys并将公钥内容写入
ssh-copy-id [-i /root/.ssh/id_rsa|dsa.pub] [user@]host
或先将公钥文件id_rsa|dsa.pub复制至对应用户家目录下的.ssh/目录下,再更名为authorized_keys
(3) 测试
注:
重设私钥口令 ssh-keygen -p
验证代理(authentication agent)保密解密后的密钥,这样口令就只需要输入一次
在GNOME中,代理被自动提供(自动启用ssh-agent),否则运行ssh-agent bash,钥匙通过命令添加给代理ssh-add,仅当前shell有效
windows中基于key的验证
xshell
新建会话、输入名称、协议、主机IP、端口号
连接、输入用户名、密码、登陆
工具-新建用户密钥生成向导、选择密钥类型{DSA|RSA}、密钥长度1024
输入给用户密钥加密的密码、保存为文件、完成
将公钥上传至服务器并更名为authorized_key
会话属性、类别中选择用户身份验证、选择验证方法为Public key、密钥密码、浏览选择公钥
secureCRT
工具、创建公钥、选择密钥类型{RSA|DSA}、通行短语(密码密钥)、密钥长度1024、选择文件保存路径
将公钥上传至服务器、转换密钥格式
点击快速连接、输入主机名、身份验证方式为公钥、属性选择使用证书、导入私钥文件、导入公钥文件
注:转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
SSH端口转发
SSH 会自动加密和解密所有SSH客户端与服务端之间的网络数据。但是,SSH还能够将其他TCP端口的网络数据通过SSH接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为SSH为其他TCP接提供了一个安全的通
道来进行传输而得名。例如,Telnet,SMTP,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过将TCP端口转发来使用SSH进行通讯
SSH端口转发能够提供两大功能:
加密 SSH Client 端至 SSH Server 端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的 TCP 连接。
1、本地转发: A主机借助AB主机的SSH通道,实现A与C之间有防火墙时的telnet通信
A: ssh -L A_port:C_IP:C_port -N B_IP 需要输入B主机的密码,不连接至B主机shell
选项:
-f 后台启用
-N 不开远程shell
-g 启用网关功能
A_port:自己指定
C_port:telnet服务端口23
示例:
A: telnet 127.0.0.1 A_port 需要输入C主机的密码,连接至C主机
WAN | LAN
|
hostA lo:A_port–>hostA IP:port –> | –> hostB IP:22–>hostB IP:port –> hostC IP:23
|
|
A本机访问回环的telnet服务的指定端口,经ssh加密后转发到B的ssh服务,解密后用telent转发到C的telnet服务
以A主机的身份登陆到B主机,以B主机的身份登陆到C主机
2、远程转发: B主机借助AB主机的SSH通道,实现A与C之间有防火墙时的telnet通信
B: ssh -R A_port:C_IP:C_port -N A_IP 需要输入A主机的密码,连接至A主机shell
选项:
-f 后台启用
-N 不开远程shell
-g 启用网关功能
A_port:自己指定
C_port:telnet服务端口23
示例:
A: telnet 127.0.0.1 A_port 需要输入C主机的密码,连接至C主机
WAN | LAN
|
hostA IP:22 <– | <– hostB IP:port
hostA lo:A_port–>hostA IP:port –> | –> hostB IP:22–>hostB IP:port –> hostC IP:23
|
|
A本机访问回环的telnet服务的指定端口,经ssh加密后转发到B的ssh服务,解密后用telent转发到C的telnet服务
以B主机的身份登陆到A主机,以B主机的身份登陆到C主机
3、动态转发: C主机借助B主机做网络代理访问A主机
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
C: ssh -D C_port [root@]hostB 需要输入B主机的密码
C_port:自己指定
C: 在本机firefox-选项-高级-网络-设置-手动设置代理-SOCKS Host:127.0.0.1:C_port
WAN | LAN
|
hostA IP:80 <– | <– hostB IP:22 <– hostC IP:port<–hostC lo:C_port
|
4、X协议转发
所有图形化应用程序都是X客户程序,本机可以不启动图形界面
能够通过tcp/ip连接远程X服务器
数据没有加密机,但是它通过ssh连接隧道安全进行
ssh -X user@remotehost gedit
remotehost主机上的gedit工具,将会显示在本机的X服务器上
传输的数据将通过ssh连接加密
注:Xmanager Enterprise 5
打开xtart
输入会话名、主机IP、协议ssh、用户名、身份验证password、命令8GNOME(Gnome-session)
运行
接受并保存
输入密码
ssh服务器
服务器端:
sshd, 配置文件: /etc/ssh/sshd_config
常用参数:
Port
ListenAddress ip
PermitRootLogin yes
ClientAliveInterval 0
UseDNS yes
限制可登录用户的办法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups
ssh服务的最佳实践
1、不要使用默认端口
2、禁止使用protocol version 1
3、限制可登录用户
4、设定空闲会话超时时长
5、利用防火墙设置ssh访问策略
6、仅监听特定的IP地址
7、基于口令认证时,使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
8、使用基于密钥的认证
9、禁止使用空密码
10、禁止root用户直接登录
11、限制ssh的访问频度和并发在线数
12、做好日志,经常分析
编译安装dropbear示例
ssh协议的另一个实现:dropbear
安装准备:
1、安装开发包组:
2、ftp://172.16.0.1/pub/Sources/sources/dropbear/dropbear-2013.58.tar.bz2
安装:
3、tar xf dropbear-2013.58.tar.bz2,
4、less INSTALL
5、./configure
6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" 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
AIDE
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有两款:Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具。
AIDE(Adevanced Intrusion Detection Environment)
高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号.这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户起始目录以及临时目录.
安装
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
更改身份
su 切换身份:su -l username -c ‘command'
sudo 命令
1. sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
2. sudo可以提供日志,记录每个用户使用sudo操作
3. sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
4.sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
5、通过visudo命令编辑配置文件,具有语法检查功能
配置文件:/etc/sudoers, /etc/sudoers.d/
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob:
?:前面的字符或词可出现一次或无
* :前面的字符或词出现零次或多次
[wxc]:匹配其中一个字符
[^wxc]:除了这三个字符的其它字符
\x : 转义
[[alpha]] :字母 示例: /bin/ls [[alpha]]* 此处没有冒号:冒号在此处有特殊用途
配置文件规则有两类;
1、别名定义:不是必须的
2、授权规则:必须的
sudoers
授权规则格式:
用户 登入主机=(代表用户) 命令
示例:root ALL=(ALL) ALL
格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命令
别名
Users和runas:
username
#uid #代表UID,不表示注释
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname 单个IP或主机名
network(/netmask) 某个网段的所有主机
host_alias
command:
command name 可以执行的的命令
directory 可以执行该目录下的所有命令
sudoedit 授权用户可以编辑sudoers文件
Cmnd_Alias
sudo别名和示例
别名有四种类型:User_Alias, Runas_Alias, Host_Alias,Cmnd_Alias
别名格式:[A-Z]([A-Z][0-9]_)* 大写字母开头,字母或数字组成
别名定义:Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
示例1:
Student
%wheel
ALL=(ALL) ALL
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
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,
/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*,
!/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,
PASSWD:/usr/sbin/userdel
示例5
Defaults:wang runas_default=tom wang用户的默认身份切换为ton
wang ALL=(tom,jerry) ALL
示例6
wang 192.168.175.136,192.168.175.138=(root)
/usr/sbin/,!/usr/sbin/useradd
示例7
wang ALL=(ALL) /bin/cat /var/log/message* 会查看包括日志在内的所有的文件
sudo命令
ls -l /usr/bin/sudo
sudo -i -u wang 切换身份相当于 su
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳,下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
如 -p ”password on %h for user %p"
原创文章,作者:anonymous,如若转载,请注明出处:http://www.178linux.com/49098
评论列表(1条)
行与行之间的间距是不是太宽了?看起来太离散了,建议紧密一点哦。