加密和安全

对称加密算法

对称加密:加密和解密使用同一个密钥
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced (128, 192, 256bits)
Blowfish,Twofish
IDEA,RC6,CAST5
 
加密、解密使用同一个密钥,效率高

 

对称加密

公钥加密:密钥是成对出现
公钥:公开给所有人;public key
私钥:自己留存,必须保证其私密性;secret key
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
数字签名:主要在于让接收方确认发送方身份
对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
数据加密:适合加密较小数据
 

非对称加密

基于一对公钥/密钥对
• 用密钥对中的一个加密,另一个解密

实现加密

• 接收者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S
• 发送者
使用接收者的公钥来加密消息M
将P(M)发送给接收者
• 接收者
使用密钥S来解密:M=S(P(M))
 

实现数字签名:确认身份真实性

• 发送者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S
使用密钥S来加密消息M
发送给接收者S(M)
• 接收者
使用发送者的公钥来解密M=P(S(M))
结合签名和加密
分离签名
 
银行U盾里放置的是自己的私钥 /密钥   加密信息发送给银行使用自己的公钥解密来核实身份真实性
 
插上U盘输口令 (公钥加密)U盘丢失防止他人冒充  
 
key(Sa) 对称密钥来加密私钥
Pb{Sa(data)}
算法:
RSA(加密,数字签名)
DSA(数字签名)
ELGamal

 

 

hash 加密

hash(data)=digist 摘要  

data不同 digist 摘要必不同

digist不同逆推出data

任意长度输入
 固定长度输出

如果固定位某种算法 长度也固定

md5 算法 128位 

sha1 160位

sha5 512位

 

md5sum -c 检查单个文件的完整性

比较hash

rpm -v 查看 hash 值 rpm -k  

来源:数字签名

 

 

 

 

 

检查文件真实完整性 

ma5sum文件重定向md5后缀的加密

md5sum重定向不同文件写入md5.log 日志

 md5sum -c         md5.log日志 比较检查完整性

               --check

 

key(data+Sb[hash(data)]) + Pa(key)

本机操作 对称加密 gpg -c

gpg -d -o  生成新文件

 gpg --gen-key

a发给b b的公钥加密 6发给7

 

 

gpg --list 导出公钥列表

gpg -a --export - o 文件导出文字文件 以 base二进制文件转换可见格式文件

- e加密  

gpg --delete -keys magedu

gpg --delete-secret-keys wange

 

A 的私人信息

 

B-A

 

使用gpg工具实现公钥加密
在hostB主机上用公钥加密,在hostA主机上解密
在hostA主机上生成公钥/私钥对
gpg --gen-key   Pa Sa
在hostA主机上查看公钥
gpg --list-keys
在hostA主机上导出公钥到wang.pubkey
gpg -a --export -o wang.pubkey    Pa
从hostA主机上复制公钥文件到需加密的B主机上 
scp wang.pubkey hostB:
使用gpg工具实现公钥加密
在需加密数据的hostB主机上生成公钥/私钥对
gpg --list-keys Pb Sb
gpg --gen-key
在hostB主机上导入公钥
gpg --import wang.pubkey   Pa
gpg --list-keys
用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg Pa
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 --delete-secret-keys wangxiaochun

 

openssl命令

对称加密:

工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
enc命令:
帮助:man enc
加密:
openssl enc -e -des3(对称算法) -a(ASCII乱码转换base64编码) -salt(每次生成的不一样避免密码整体的重复性) -in testfile  -out testfile.cipher(生成新文件)
base64 6位编码 2的6次方 64种组合

 


ASCII6位一组重新组合成BASE64编码 不够6位0来补齐 可见的为=

解密:
openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile (生成新文件)
 

 

单向加密

工具: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算法openssl命令

生成用户密码:

passwd命令:
帮助:man sslpasswd
openssl passwd -1(md5加密) -salt SALT(最多8位)
随机salt生成随机密码  

$$内为salt

openssl passwd -1 –salt (指定 salt 指定使用上次密码)centos

生成随机数:

帮助:man sslrand

openssl rand -base64|-hex NUM

NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,
出现的字符数为NUM*2openssl命令

生成8位随机口令

公钥加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
数字签名:
算法:RSA, DSA, ELGamal
密钥交换:
算法:dh
DSA:Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:openssl命令
生成密钥对儿:man genrsa
生成私钥
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
(umask 077; openssl genrsa –out test.key –des 2048)(加密位数)对称加密加密私钥

 

()开启子shell 仅对当前文件设置提高访问权限 防止丢失他人窃取密码(字符串)

 
 
openssl rsa -in test.key –out test2.key 将加密key转换位新文件(没有对称加密)
 
 
 
从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
openssl rsa –in test.key –pubout –out test.key.pub
 
 
随机数生成器:伪随机数字
键盘和鼠标,块设备中断
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机
数,非阻塞OpenSSL
 

 

 

 

 

PKI:Public Key Infrastructure

CA
RA
CRL
证书存取库
建立私有CA:
OpenCA
openssl
证书申请及签署步骤:
1、生成申请请求
2、RA核验
3、CA签署
4、获取证书

 

 A——B

Pb  Sb 加密

Sa  Pa 来源性

每个用户的公钥 私钥 加密解密一一对应  PaSa   SaPa            PbSb SbPb

 公钥公开发放不具有唯一性   无法拿到保证对方真实公钥

 

 

 

 

 

Public Key Algorithm: rsaEncryption

Public Key Algorithm: rsaEncryption

Ca核对公钥

openssl -dgst -md5 -1 testfile    -1指定盐

openssl rand -base64 12

 umask 066 :openssl genrsa -out 

openssl命令
生成密钥对儿: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 将加密key解密
从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
openssl rsa –in test.key –pubout –out test.key.pub
随机数生成器:伪随机数字
键盘和鼠标,块设备中断
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机
数,非阻塞
 
证书申请及签署步骤:
1、生成申请请求
2、RA核验 注册机构 测试可省
3、CA签署 
4、获取证书
 
创建CA和申请证书
创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
三种策略:match匹配、optional可选、supplied提供
match:要求申请填写的信息跟CA设置信息必须一致
optional:可有可无,跟CA设置信息可不一致
supplied:必须填写这项申请信息,
1、创建所需要的文件
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号
2、 CA自签证书
生成私钥
cd /etc/pki/CA/
(umask 066; openssl genrsa -out private/cakey.pem 2048)

  

  

1、创建所需要的文件touch /etc/pki/CA/index.txt 生成证书索引数据库文件echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号
 
 
 
 
2、 CA自签证书生成私钥cd /etc/pki/CA/ (umask 066; openssl genrsa -out private/cakey.pem 2048)创建CA和申请证书生成自签名证书openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem-days 3650 -out /etc/pki/CA/cacert.pem
 
 
、颁发证书
在需要使用证书的主机生成证书请求
给web服务器生成私钥
(umask 066; openssl genrsa –out /data/test.key 2048)
生成证书申请文件
位nssl req -new -key /data/test.key -out /data/test.csr
将证书请求文件传输给CA
CA签署证书,并将证书颁发给请求者
openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 100
注意:默认要求 国家,省,公司名称三项必须和CA一致创建CA和证书管理
 查看证书中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
openssl ca -status SERIAL 查看指定编号的证书状态

 

 

 实验:私有ca的建立

一 建立CA

cd /etc/pki/CA

1进入系统专门存放ca0  相关文件夹 /etc/pki/CA

touch index.txt   证书信息

echo 0F > serial

2(umask 077;openssl genrsa -out private/cakey.pem 4096 )

生成私钥

()表示开启子 shell   仅对当前生成的私钥(没有加密的字符串)设置最高访问权限 不影响其他文件的访问  ;表示两条命令同一子shell内进行

openssl genrsa(非对称加密算法) -out private/cakey.pem  4096 生成指定位数(4096位)private/系统私钥文件夹下.pemsi 结尾的私钥

 利用私钥自签名

openssl req -new 申请 -x509 (自申请) -key private/cakey.pem  (利用私钥)-out cacert.pem (证书)-days 3650 (有限期)

 

 

 二在客户端生成证书申请

 (umask 066;openssl genrsa -out test.key 1024)

openssl req -new  -key test.key -out test.csr

scp test.csr  192.168.36.7:/data

 

三 CA给客户端颁发证书

openssl ca -in /data/test.csr  -out certs/test.crt -days 100

 

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
基于keyOpenssh软件组成
OpenSSH介绍
相关包:
openssh
openssh-clients
openssh-server
 
 
 
 查看服务    
 启动服务

 

 
 
 
 

工具:

基于C/S结构
Linux Client: ssh, scp, sftp,slogin
Windows Client:xshell, putty, securecrt, sshsecureshellclient
Server: sshdssh客户端
 客户端组件:
 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转发
-t:强制伪tty分配
ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3ssh客户端
 
 
 
 
 
允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub
(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的
~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒
绝连接公钥交换公钥交换
 
冒充偷私钥
 

 

 移动一模一样  复制新的MAC地址
 
给私钥加口令
 
 
 ROOT口令
 
ssh -keygen -p 口令 -f id_rsa

 

 

私钥的口令

 
 
客户端发起链接请求
服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
客户端生成密钥对
客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到
客户端公钥)
最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,
之后的所有通讯都会被加密ssh加密通讯ssh服务登录验证
 
ssh服务登录验证方式
 
1用户/口令
 
2基于密钥
 
 

基于用户和口令登录验证

 
1 客户端发起ssh请求,服务器会把自己的公钥发送给用户
2 用户会根据服务器发来的公钥对密码进行加密
3 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,
则用户登录成功基于用户名口令登录验证ssh服务基于密钥登录验证
 
 
 

基于密钥的登录方式

 
1 首先在客户端生成一对密钥(ssh-keygen)
2 并将客户端的公钥ssh-copy-id 拷贝到服务端
3 当客户端再次发送一个连接请求,包括ip、用户名
4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的
IP和用户,就会随机生成一个字符串,例如:magedu
5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的
字符串发送给服务端
7服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一
致,就允许免密码登录基于密钥的登录方式基于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基于key认证
(5)重设私钥口令:
ssh-keygen –p
(6)验证代理(authentication agent)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供给root用户
否则运行ssh-agent bash
(7)钥匙通过命令添加给
ssh-add
 
每次都要手动输入
 
换终端换代理
 
 

所有主机KEY验证的脚本

三台一样的密码

 

 

 

 

 

scp命令
scp命令:
scp [options] SRC... DEST/
 
两种方式:
scp [options] [user@]host:/sourcefile /destpathscp [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 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)

  带斜线也复制文件夹本身

 不带只复制文件

 计划任务 

***   .sh

 

 

轻量级自动化运维工具

pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh和scp的多个并行工具项目:http://code.google.com/p/parallel-ssh/
pdsh:Parallel remote shell program,是一个多线程远程shell客户端,可以并行执行多个远程主机上的命令。 pdsh可以使用几种不同的远程shell服务,包括标准的“rsh”,Kerberos IV和ssh项目: https://pdsh.googlecode.com/
mussh:Multihost SSH wrapper,是一个shell脚本,允许您使用一个命令在多个主机上通过ssh执行命令或脚本。 mussh可使用ssh-agent和RSA / DSA密钥,以减少输入密码项目:http://www.sourceforge.net/projects/mussh
说明:以上工具都包含在EPEL源中pssh工具
 
 
 选项如下:
 --version:查看版本
 -h:主机文件列表,内容格式”[user@]host[:port]”
 -H:主机字符串,内容格式”[user@]host[:port]”  -A:手动输入密码模式
 -i:每个服务器内部处理信息输出
 -l:登录使用的用户名
 -p:并发的线程数【可选】
 -o:输出的文件目录【可选】
 -e:错误输出文件【可选】
 -t:TIMEOUT 超时时间设置,0无限制【可选】
 -O:SSH的选项
 -P:打印出服务器返回信息
 -v:详细模式pssh示例
 
 
 
 
通过pssh批量关闭seLinuxpssh -H root@192.168.1.10 -i ‘sed -i"s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config’
批量发送指令pssh -H root@192.168.1.10 -i setenforce 0 pssh -H wang@192.168.1.10 -i hostname
当不支持ssh的key认证时,通过 -A选项,使用密码认证批量执行指令pssh -H wang@192.168.1.10 -A -i hostname
将标准错误和标准正确重定向都保存至/app目录下pssh -H 192.168.1.10 -o /app -e /app -i “hostname”pscp.pssh命令
pscp.pssh功能是将本地文件批量复制到远程主机
pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote
pscp-pssh选项-v 显示复制过程-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/
将本地多个文件批量复制到/app/目录pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/
将本地目录批量复制到/app/目录pscp.pssh -H 192.168.1.10 -r /root/test/ /app/pslurp命令
pslurp功能是将远程主机的文件批量复制到本地
pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local(本地名)
pslurp选项-L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称-r 递归复制目录
批量下载目标服务器的passwd文件至/app下,并更名为userpslurp -H 192.168.1.10 -L /app /etc/passwd userSSH端口转发
SSH端口转发SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯
SSH 端口转发能够提供两大功能:
加密 SSH Client 端至 SSH Server 端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的 TCP 连接SSH端口转发
本地转发:-L localport:remotehost:remotehostport sshserver
 
 
 
选项:-f 后台启用-N 不打开远程shell,处于等待状态-g 启用网关功能
示例ssh –L 9527:telnetsrv:23 -Nfg sshsrvtelnet 127.0.0.1 9527当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23data
  localhost:9527
  localhost:XXXXX
  sshsrv:22
 sshsrv:YYYYY
  telnetsrv:23SSH端口转发远程转发: -R sshserverport:remotehost:remotehostport sshserver
示例:ssh –R 9527:telnetsrv:23 –Nf sshsrv让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23Data
  sshsrv:9527
  sshsrv:22
  localhost:XXXXX
 localhost:YYYYY
  telnetsrv:23SSH端口转发动态端口转发:
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internetssh -D 1080 root@sshserver -fNg在本机firefox设置代理socket proxy:127.0.0.1:1080curl --socks5 127.0.0.1:1080 http://www.google.comX 协议转发
所有图形化应用程序都是X客户程序• 能够通过tcp/ip连接远程X服务器• 数据没有加密机,但是它通过ssh连接隧道安全进行
ssh -X user@remotehost geditremotehost主机上的gedit工具,将会显示在本机的X服务器上传输的数据将通过ssh连接加密ssh服务器
服务器端:sshd, 配置文件: /etc/ssh/sshd_config
 
 
 
 
 
 
 
 
常用参数:
Port
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes
StrictModes yes 检查.ssh/文件的所有者,权限等
MaxAuthTries 6
MaxSessions 10 同一个连接最大会话PubkeyAuthentication yes
PermitEmptyPasswords noPasswordAuthentication yes常用参数GatewayPorts no
ClientAliveInterval 单位:秒 ClientAliveCountMax 默认3
UseDNS yes
GSSAPIAuthentication yes 提高速度可改为no
MaxStartups 未认证连接最大值,默认值10Banner /path/file
限制可登录用户的办法:AllowUsers user1 user2 user3DenyUsersAllowGroupsDenyGroupsssh服务的最佳实践
建议使用非默认端口
禁止使用protocol version 1
限制可登录用户
设定空闲会话超时时长
利用防火墙设置ssh访问策略
仅监听特定的IP地址
基于口令认证时,使用强密码策略tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登录
限制ssh的访问频度和并发在线数
经常分析日志编译安装dropbear示例

 

修改SSH速度

 

 

 

 

编译安装dropbear示例ssh协议的另一个实现:dropbear
 
源码编译安装•
1、安装相关包:yum install gcc•
2、下载dropbear-2019.78.tar.bz2•
3、tar xf dropbear-2019.78.tar.bz2•
4、less INSTALL README•
5、./configure•
6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvertscp" •
7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvertscp" install
 

 挂载不加斜线

 

 

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(模块支持)

作者:Wieste Venema,IBM,Google
工作在第四层(传输层)的TCP协议
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对
libwrap进行编译的
判断服务程序是否能够由tcp_wrapper进行访问控制的方法:
ldd /PATH/TO/PROGRAM|grep libwrap.so
strings PATH/TO/PROGRAM|grep libwrap.soTCP_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@host格式
单个应用程序的二进制文件名,而非服务名,例如vsftpd
以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd
ALL表示所有接受tcp_wrapper控制的服务程序
主机有多个IP,可用@hostIP来实现控制
如:in.telnetd@192.168.0.254TCP_Wrappers的使用
客户端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)
超过3次的IP写入黑名单AWK写法

 

EXCEPT用法:
示例:
vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1示例
示例:只允许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 TCP_Wrappers的使用
[:options]选项:
帮助:man 5 hosts_options
deny 主要用在/etc/hosts.allow定义“拒绝”规则
如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定义“允许”规则
如:vsftpd:172.16. :allow
spawn 启动一个外部程序完成执行的操作
twist 实际动作是拒绝访问,使用指定操作替换当前服务,标准输出和ERROR
发送到客户端,默认至/dev/null
测试工具:
tcpdmatch [-d] daemon[@host] client
-d 测试当前目录下的hosts.allow和hosts.deny示例
sshd: ALL :spawn echo "$(date +%%F) 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”
 
 
PAM认证机制
PAM相关文件
模块文件目录:/lib64/security/*.so
环境相关的设置:/etc/security/
 
为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf将失效pam认证原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于
/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证PAM认证机制
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回传的
结果决定下一个动作(重新输入密码或者通过验证)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 用来传递给该模块的参数PAM认证机制
模块类型(module-type)
Auth 账号的认证和授权
Account 与账号管理相关的非认证类的功能,如:用来限制/允许用户对某
个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用
户的位置(例如:root用户只能从控制台登录)
Password 用户修改密码时密码复杂度检查机制等功能
Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作,
如:记录打开/关闭数据的信息,监视目录等
-type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是
安装在系统上的模块有用PAM认证机制
Control:
PAM库如何处理与该服务相关的PAM模块成功或失败情况
两种方式实现:
简单和复杂
简单方式实现:一个关健词实现
required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该
模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所
有模块全部执行完毕再将失败结果返回给应用程序,即为必要条件PAM认证机制
requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返
回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程
序。是一个必要条件
sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执
行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件
optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,
其返回值一般被忽略
include: 调用其他的配置文件中定义的配置信息PAM认证机制
复杂详细实现:使用一个或多个“status=action”
[status1=action1 status2=action …]
Status:检查结果的返回状态
Action:采取行为 ok,done,die,bad,ignore,reset
ok 模块通过,继续检查
done 模块通过,返回最后结果给应用
bad 结果失败,继续检查
die 结果失败,返回失败结果给应用
ignore 结果忽略,不影响最后结果
reset 忽略已经得到的结果PAM认证机制
module-path: 模块路径
相对路径:
/lib64/security目录下的模块可使用相对路径
如:pam_shells.so、pam_limits.so
绝对路径:
模块通过读取配置文件完成用户对系统资源的使用控制
/etc/security/*.conf
注意:修改PAM配置文件将马上生效
建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误
Arguments 用来传递给该模块的参数pam文档说明
/user/share/doc/pam-*
rpm -qd pam
man –k pam_
man 模块名 如man rootok
《The Linux-PAM System Administrators' Guide》PAM模块示例
模块:pam_shells
功能:检查有效shell
man pam_shells
示例:不允许使用/bin/csh的用户本地登录
vim /etc/pam.d/login
auth required pam_shells.so
vim /etc/shells
去掉 /bin/csh
useradd –s /bin/csh testuser
testuser将不可登录
tail /var/log/securePAM模块示例
模块:pam_securetty.so
功能:只允许root用户在/etc/securetty列出的安全终端上登陆
示例:允许root在telnet登陆
vi /etc/pam.d/remote
#auth required pam_securetty.so #将这一行加上注释
或者/etc/securetty文件中加入
pts/0,pts/1…pts/nPAM模块示例
模块:pam_nologin.so
功能:
如果/etc/nologin文件存在,将导致非root用户不能登陆
如果用户shell是/sbin/nologin 时,当该用户登陆时,会显示/etc/nologin
文件内容,并拒绝登陆PAM模块示例
 
 
 
 
 
 
模块:pam_limits.so
 ulimit
功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,
可运行的进程数量,可用内存空间
 
修改限制的实现方式:
(1) ulimit命令,立即生效,但无法保存
 
-n 每个进程最多的打开的文件描述符个数
-u 最大用户进程数
-S 使用 soft(软)资源限制
-H 使用 hard(硬)资源限制
 
 
 
(2) 配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf
配置文件:每行一个定义;
<domain> <type> <item> <value>PAM认证机制pam_limits.so
<domain> 应用于哪些对象
Username 单个用户
@group 组内所有用户
* 所有用户
<type> 限制的类型
Soft 软限制,普通用户自己可以修改
Hard 硬限制,由root用户设定,且通过kernel强制生效
- 二者同时限定
<item> 限制的资源
nofile 所能够同时打开的最大文件数量,默认为1024
nproc 所能够同时运行的进程的最大数量,默认为1024
<value> 指定具体值示例:pam_limits.so
限制用户最多打开的文件数和运行进程数
/etc/pam.d/system-auth
session required pam_limits.so
vim /etc/security/limits.conf
apache – nofile 10240 用户apache可打开10240个文件
student hard nproc 20 用户student不能运行超过20个进程生产案例
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft memlock 32000
* hard memlock 32000
* soft msgqueue 8192000
 
 telnet root 登录 模块内添加终端
 
生产案例
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft memlock 32000
* hard memlock 32000
* soft msgqueue 8192000
* hard msgqueue 8192000

 

 

 

  

 

posted @ 2019-06-22 17:54  jayhenry7  阅读(320)  评论(0编辑  收藏  举报
levels of contents