sudo详解
sudo COMMAND
某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令
sudo的配置文件:/etc/sudoers
一个sudo条目:
who which_hosts=(runas) TAG:command
NOPASSWD
who : User_Alias
which_hosts:Host_Alias
runas:Runas_Alias
command:Cmnd_Alias
别名必须全部而且只能使用大写英文字母的组合
visudo命令编辑配置文件
用户别名:
User_Alias USERADMIN=
用户的用户名
组名,使用%引导
还可以包含其它已经定义的用户别名
Host_Alias
主机名
IP
网络地址
其它主机别名
Runas_Alias:
用户名
%组名
其它的Runas别名
Cmnd_Alias:
命令路径
目录(此目录内的所有命令)
其它事先定义过的命令别名
列:
User_Alias USERADMIN = hadoop, $hadoop, $useradmin
Cmnd_Alias USERADMINCMND = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel , /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
USERADMIN ALL=(root) NOPASSWD: USERADMINCMND
sudo命令:
-l:列出当前用户可以使用的所有sudo类命令
-k:让认证信息失败
TCP/IP 安全:
A-->B
机密性:明文传输(ftp , http , smtp ,telnet)
完整性:10 (100)
身份验证:
机密性:plaintext --> 转换规则 --> ciphertext
ciphertext --> 转换规则 --> plaintext
转换算法:密钥
对称加密:算法
数据完整性:A-->B
单向加密算法:提取数据特征码
输入一样:输出必然相同
雪崩效应:输入的微小改变,将会引起结果的巨大改变
定长输出:无论原始数据是多大,结果大小都是相同的
不可逆:无法根据特征码还原原来的数据
协商生成密码:密钥交换(Internet Key Exchange , IKE)
Diffie-Hellman协议
A --> B
p ,g ( 大素数 ,生成数 )
A : x
B : y
A : g^x%p -- >B
B : g^y%p -->A
g , p g^x%p ,g^y%p
A : (g^y%p)^x=g^yx%p
B : (G^X%p)^y=g^xy%p
公钥加密算法:非对称加密算法
密钥对:
公钥:p
私钥:s
发送方用自己的私钥加密数据,可以实现身份验证
发送方用对方的公钥加密数据,可以保证数据的机密性
公钥加密算法很少用来加密数据:速度太慢
Linux openSSH
telnet:远程登录协议,23/tcp
c/s
s:telnet服务器
c:telnet客户端
ssh:secure Shell ,应用层协议,22/tcp
通信过程及认证过程是加密的,主机认证
用户认证过程加密
数据传输过程加密ssh v1 ,v2
man-in-middle
ssh2
认证过程:
基于口令认证
基于密钥认证协议:规范
实现:服务器端、客户端
Linux:openSSH
C/S
服务器端:sshd,配置文件/etc/ssh/ssh_config
客户端:ssh ,配置文件/etc/ssh/ssh_config
windows远程工具:putty , SecureCRT() , SSHSecureShellClient , Xmanger
ssh-keygen:密钥生成器
ssh-copy-id:将公钥传输至远程服务器
scp:跨主机安全复制工具ssh:
基于口令认证
ssh USERNAME@HOST
ssh -l USERNAME HOST
ssh USERNAME@HOST 'COMMAND'-p 指定端口
scp:基于ssh的远程复制命令,可以实现在主机之间传输数据
scp SRC DEST
-r 复制目录
-ascp USERNAME@HOST:/path/to/somefile /path/to/local
scp /path/to/local USERNAME@HOST:/apth/to/somefile基于密钥的认证
ssh-keygen
-t {}rsa|dsa} #指定加密算法
~/.ssh/id_rsa
~/.ssh/id_rsa.pub-f /path/to/KEY_FILE
-N '' :指定加密私钥的密码
公钥追加保存到远程主机某用户的家目录下的.ssh/authorized_keys文件.ssh/authorized_key2文件中ssh-copy-id
-i ~/.ssh/id_rsa.pub
ssh-copy-id -i ~/.ssh/id_rsa.pub USERNAME@HOSTsftp命令:
dropbear:嵌入式系统专用的ssh服务器端和客户端工具
服务器端:
dropbear
dropbearkey客户端:dbclient
drobear默认使用nsswitch实现名称解析
/etc/nsswitch.conf
/lib/libnss_files*
/usr/lib/libnss3.so
/usr/lib/libnss_filesdropbear会在用户登录检查默认shell是否当前系统的安全shell
/etc/shells
主机密钥默认位置:
/etc/dropbear/
RSA:dropbear_rsa_host_key
长度可变,只要是8的整数倍,默认为1024
DSS:dropbear_dss_hots_key
长度固定,默认为1024
dropbearkey:
-t rsa|dsa
-f /path/to/KEY_FILE
-s SIZEPKI:public Key Infrastructure
CA : Certificate Authority
x509 ,pkcs12
x509:
公钥及其有效期限
证书的合法拥有者
证书该如何被使用
CA的信息
CA前面的校验码
PKI : TLS/SSL: x509
PKI : OpenGPG
TLS/SSL Handshake
对称加密:
DES:Date Encrption Standard , 56bit
3DES :
AES : 高级加密标准 128bit
AES192 , AES256 , AES512
单向加密:
MD4
MD5
SHA1
SHA192,SHA256,SHA384
CRC-32
公钥加密:(加密/签名)
身份认证(数字签名)
数据加密
秘钥交换
RSA : 加密、签名
DSA : 签名
ElGamal
OpenSSL : SSL的开源实现
libcrypto:加密库
libssl : TLS/SSL的实现
基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库
openssl:多用途命令行工具
实现私有证书颁发机构
子命令:
openssl实现私有CA:
1、生成一对密钥
私钥:openssl genrsa -out server1024.key(保存的文件名称) 2014(长度)
公钥:openssl rsa -in server1024.key -pubout
2、生成自签署证书
生成证书:openssl req -new -x509 -key server2014.key -out server.crt(保存的文件名称) -days 365(保存时间)
查看证书:openssl x509 -text -in server.crt
配置文件:/etc/pki/tls/openssl.cnf
私有CA认证机构
1、cd /etc/pki/CA
2、(umask 077; openssl genrsa -out private/cakey.pem) #创建CA,自己生成一对密钥
3、openssl req -new -x509 -key private/cakey.pem -out cacert.pem #生成自签证书
认证证书
1、cd /etc/httpd/ssl
2、(umask 077; openssl genrsa -out httpd.key 1024) #客户端生成一对密钥
3、openssl req -new -key httpd.key -out httpd.csr #生成证书颁发请求(然后将请求发给CA)
4、openssl ca -in httpd.csr -out httpd.crt -days 365 #CA端 签署此证书,然后传送给客户端
总结:
1、密码应该经常换
2、使用非默认端口登录
3、限制登录客户地址
4、禁止管理员直接登录
5、仅允许有限用户登录
6、使用基于秘钥的认证
7、禁止使用版本1