Linux Service and Security(Part 1)

一、知识整理

1、不安全的传统协议:

telnetFTPPOP3等:不安全的密码;

httpsmtpNFS等:不安全信息;

LdapNISrsh等:不安全验证。

设计基本原则:

使用成熟的安全系统;

以小人之心度输入数据;

外部系统是不安全的;

最小授权;

减少外部接口;

缺省使用安全模式;

在入口处检查;

安全不是似是而非;

从管理上保护好系统。

2、对称加密算法:加密和解密使用同一个密钥:

非对称加密算法:密钥成对出现,公钥和私钥;

功能:数字签名:主要用于让接收方确认发送方身份;

对称密钥交换:发送方用对方公钥加密一个对称密钥后发送给对方;

数据加密:适合加密较小数据。

单向加密:即提出数据指纹;只能加密不能解密。

常见算式:md5:128位;sha1:160位;sha224sha256sha384sha512

3、PKIpublic key infrastructure公钥基础设施;

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库

X.509:定义了证书的机构以及认证协议标准;

版本号;序列号;签名算法;颁发者;有效期限;主体名称;主体公钥;CRL分发点;扩展信息;发行者签名。

4、TCP/IP模型中的SSL/TLS协议:

blob.png

Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换。

ChangeCipherSpec协议:一条消息表明握手协议已经完成。

Alert协议:对握手协议中一些异常的错误提醒,分为fatalwarning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告。

Record协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等。

HTTPS协议:就是HTTP协议和SSL/TLS协议的组合。HTTP over SSLHTTP over TLS,对http协议的文本数据进行加密处理后,成为二进制形式传输。

5、命令行中~再按两下tab键可以列出当前系统所有用户。

[root@centos68 CA]# ~
~abrt/   ~bin/  ~games/  ~halt/   ~nfsnobody/  ~oprofile   ~rpcuser/   ~adm  ~daemon/  ~gejingyi/ 
~lp/  ~nobody/   ~apache/ ~dbus/   ~gopher  ~mail/   ~ntp/ ~avahi-autoipd ~ftp  ~haldaemon/  ~mysql/

6、ssh连接:基于非对称加密算法认证:

[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# cat known_hosts 
10.1.252.134 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtFw7wor7A6UqsfoOnfbsbyQ9ibKAz8IHkloNYkFmPiQCFFVcic461vPyu5S5rPDIgZIhEsox7jr21WH3TvPblnBtJby4FZ4QptCt/+rdQrN2Z/fvAyrVgxbvgFe/sa/xLsPhcm/IYJYa1d4pBq3nzKb2oac9ZWMEJL9sHD3kmlTl5ff3AUG+5e8E1PQ+8Bf3e/mLsEreory6ZBuOgz/OA1uzXn+xzATD3XIE3cN5kBzvHLVK7haBhDIBspP1aGWwf3PZDydLNepLsnhZITFyCH9GxX86IXdsmI9XwJpOSYoyRTWTf3ucReEt9+g9kXG3Tv9+MBDtD850QXkKvXgPMw==

若此IP的主机更改,便警告并无法连接。当将文件中之前保留的ssh连接公钥记录删除,便可继续连接。

[root@localhost .ssh]# ssh  10.1.252.134
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
e4:17:b3:40:d1:75:78:27:2b:d5:51:eb:2a:5a:f4:0e.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending RSA key in /root/.ssh/known_hosts:1
RSA host key for 10.1.252.134 has changed and you have requested strict checking.
Host key verification failed.

当有人将服务器端的/etc/ssh/ssh_host_rsa_key的私钥窃取并放入相同目录,再更改IP后,便可冒充客户端。

7、gpg实现对称加密:

对称加密file文件:gpg  -c file

[root@centos68 ~]# ls f1.gpg 
f1.gpg

在另一台主机上解密filegpg  -o file -d file.gpg,然后输入密码解密

[root@localhost tmp]# gpg -o f1 -d f1.gpg 
gpg: 已创建目录‘/root/.gnupg’
gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/root/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/root/.gnupg/pubring.gpg’已建立
gpg: 3DES 加密过的数据
Passphrase ****************
[root@localhost tmp]# cat f1
123654789987745321

gpg实现公钥加密:在B主机上用公钥加密,在A主机上解密:

A主机上生成密钥对:

[root@localhost tmp]# gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

A主机上查看公钥:

[root@localhost tmp]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   1024R/EBC6624E 2016-09-22 [有效至:2017-09-21]
uid                  gejinigyi (ge)
sub   1024R/83B9FD09 2016-09-22 [有效至:2017-09-21]

A主机上导出公钥ge.pubkey

[root@localhost tmp]# gpg -a --export -o ge.pubkey
[root@localhost tmp]# ls
ge.pubkey

A主机上复制到B主机:

B主机上生成密钥对(不生成也可以):

[root@localhost tmp]# gpg --gen-key
[root@localhost tmp]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   2048R/689BEA48 2016-09-21 [expires: 2017-09-21]
uid                  gejingyi (ge)
sub   2048R/589D02E0 2016-09-21 [expires: 2017-09-21]

B主机上导入公钥(注意:时间必须同步,否则报错):

[root@localhost tmp]# gpg --import ge.pubkey 
gpg: key EBC6624E: public key "gejinigyi (ge)" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
[root@localhost tmp]# gpg --list-key
/root/.gnupg/pubring.gpg
------------------------
pub   2048R/689BEA48 2016-09-21 [expires: 2017-09-21]
uid                  gejingyi (ge)
sub   2048R/589D02E0 2016-09-21 [expires: 2017-09-21]
pub   1024R/EBC6624E 2016-09-22 [expires: 2017-09-21]
uid                  gejinigyi (ge)
sub   1024R/83B9FD09 2016-09-22 [expires: 2017-09-21]

加密文件,命令选项中-r之后使用公钥名称:

[root@localhost tmp]# gpg -e -r gejinigyi f1
gpg: 83B9FD09: There is no assurance this key belongs to the named user
pub  1024R/83B9FD09 2016-09-22 gejinigyi (ge)
 Primary key fingerprint: 61AC 5A47 FF21 D5DE 02D6  6DAD 2381 6C42 EBC6 624E
      Subkey fingerprint: BEE9 31F4 9001 184E 6CE2  F573 BD9E 9681 83B9 FD09
It is NOT certain that the key belongs to the person named
in the user ID.  If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N) y
[root@localhost tmp]# ls
f1  f1.gpg  ge.pubkey 
[root@localhost tmp]# file f1.gpg 
f1.gpg: data

解密文件:复制文件到A主机:

[root@localhost tmp]# gpg -d f1.gpg

输入密码;

[root@localhost tmp]# gpg -o f1 -d f1.gpg 
[root@localhost tmp]# ls
f1  f1.gpg  ge.pubkey

删除公钥和私钥:先删除私钥再删除公钥

[root@localhost tmp]# gpg --delete-secret-keys gejinigyi
[root@localhost tmp]# gpg --delete-keys gejinigyi

8、scp命令:会覆盖同名文件,可双向传输。两种方式:

scp [] [user@]host:/sourcefile /destpath

scp [] /sourcefile [user@]host:/destpath

-C 压缩数据流

-r 递归复制

-p 保持原文件属性信息

-q 静默模式

-p PORT 指明remote host的监听的端口

9、rsync命令:基于sshrsh服务实现高效率的远程系统之间复制文件;使用安全的shell作为传输方式。比scp更快,只复制不同的文件

rsync -av /etc server1:/tmp 复制目录和目录下的文件

rsync -av /etc/ server1:/tmp 复制目录下的所有文件。

-n 模拟复制过程

-v 显示详细过程

-r 递归复制目录树

-p 保留权限

-t 保留时间戳

-g 保留组信息

-o 保留所有者信息

-l 把符号链接文件作为符号文件进行复制,也就是只复制链接文件

-L 把软链接文件指向文件复制

-a 存档模式,相当于-rlptgoD,但不保留ACL(-A)SELinux(-X)属性。

etc目录复制到250主机的tmp目录下:

[root@centos68 tmp]# rsync -av /etc 10.1.54.250:/tmp

10、软件包文件:GPG公钥签名:

[root@centos68 serts]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[root@centos68 serts]# rpm -K /media/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm 
/media/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

11DMZdemilitarized zone的缩写:隔离区;非军事化区;是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓冲区。该缓冲区位于企业内部网络和外部网络之间的小网络区域内。在这个小网络区域可以放置一些必须公开的服务器设施,如web服务器、ftp服务器等,另一方面,通过这样一个DMZ区域,更加有效地保护了内部网络。

二、命令详解及事例

1、没有CA情况下基本的非对称加密过程:

发送:用单向加密的算法,计算数据的特征码;并用自己的私钥加密特征码生成数字签名附加在数据后面;用对称加密算法生成密钥加密以上所有数据,用对方的公钥,加密对称加密后的数据,附加在最后(加密密码)。

收到:先用私钥解密附加数据得到对称密钥(密钥交换);用对称密钥解密整段数据;用对方的公钥解密签名(特征码);将同样的(对称加密算法)算法提取特征码,与解密的相对比,若相同则数据没有变化。

2、加密和解密工具:

对称加密:openssl encgpg

支持的算法:3desaesblowfishtowfish

[root@centos68 ~]# echo 123654789987745321 > f1
[root@centos68 ~]# ls
anaconda-ks.cfg  boot.iso  f1  f1.awk  f2.awk  fstab  fstab.ciphertext  fun.awk  myks.cfg
[root@centos68 ~]# openssl enc -e -des3 -a -salt -in f1 -out f1.cipher
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@centos68 ~]# cat f1.cipher 
U2FsdGVkX1+46zCVv8Q9TJd5/BuWQHjRQhOlSkRPY00gMZMxpfYBzg==
[root@centos68 ~]# openssl enc -d -des3 -a -salt -in f1.cipher -out f1
enter des-ede3-cbc decryption password:
[root@centos68 ~]# cat f1
123654789987745321

单向加密:工具:md5sumsha1sumsha224sumsha256sum… openssl dgst

[root@centos68 ~]# openssl dgst -md5 f1
MD5(f1)= c0d4f5b14dda7b6fe892b09211db9310
[root@centos68 ~]# md5sum f1
c0d4f5b14dda7b6fe892b09211db9310  f1

MACMessage Authentication Code,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制。HMAC:使用md5或者sha1算法。

[root@centos68 ~]# openssl passwd -1 -salt centos
Password: 
$1$centos$PRRHdg1EjQzR2loDJwcsq/

生成随机数:openssl rand -base64|-hex NUM

NUM表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2.

[root@centos68 ~]# openssl rand -base64 10
cBMD2C9vkcmaRA==
[root@centos68 ~]# openssl rand -base64 5
2VL8/V8=

3、openssl命令:公钥加密:算法:RSAELGamal;工具:gpgopenssl rsautl

数字签名:算法:RSA,DSA,ELGamal

密钥交换:算法:DHDSA,DSS,RSA

生成密钥对:genrsa

生成私钥:openssl genrsa -out /PATH/PRIVATEKEY.FILE NUM_BITS

[root@centos68 ~]# (umask 077;openssl genrsa -out key.pri -des 1024)
Generating RSA private key, 1024 bit long modulus
...........................++++++
.....++++++
e is 65537 (0x10001)
Enter pass phrase for key.pri:
Verifying - Enter pass phrase for key.pri:
[root@centos68 ~]# cat key.pri 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-CBC,8D2FB0013606D166
a/oUvxzROvOoKtbKJ9XWUDv1ILw1lEYxdbevlwMbkKys3Y0G79KID+uunb4slTpX
hQBwvQLDctxSNoa50AG0EAMfQPa8hJCwn/GvGQ4C1EKW0kzH9CBOx9exAm2qnQE/
n6Q5RM3vmZ7tx1s7ESbxZND9d65xSAXXg8lY4yPbM9iCV4sUdwPyrpR5nm7PgkwP
HdEyHmNGmljP3gpMcMtFB6CZmBeICKs65dCtF44S+l10Uw0GteQG6Pfh1j6rFbJm
5LPMnfHcMzzkIk3oQfQVXEokFIXJUK0dr8tqqIkASazMwAQaqhyFrnPKG3a+pwgc
0pZMtCoQvqGVrvklIu69MYQt0SUmQK7ZUfgfaRnw0BAViOF61hXxscLuhFVQyB19
+j5a3ZZPZw41G2SN5qyRtFjwIxS5XXwiBUEsxBW1rNA0cMuk5c8S2ECQD9UI7pT1
CTWtC4cBtYnphC55xRI0ah0ChiONyd6gt8zKEqlnDH/oaXIeORyKg6cz4g6As/VZ
FenubpJNeGpWEKsNctEQw4hzJyquDa46y6QhWPZ1O+MyiTDLul4HwaaYCF3bCoUf
+h58JRay55R2macrWdzHvdXg78L2nEnYqlvnHW4SZCyGf9SWycrriZJDY4DJMY63
vNvyRJHr2Vlzv524VGjTx9Wp0tEzJPdZ/d27//vNYpnBqp46wGqh3+Mb13XOUi+H
QQCHz7V737hscLy3EovLFOx7lYp7crx5d0Jcx0mkdy+jna5CawVqt27wq3DyBfiF
Xt/C1O/m65dRI7Q3zA3dh54w3WxVRwFwYtqUHmncFGQ=
-----END RSA PRIVATE KEY-----

从私钥中提取公钥:

[root@centos68 ~]# openssl rsa -in key.pri -pubout -out key.pub
Enter pass phrase for key.pri:
writing RSA key
[root@centos68 ~]# cat key.pub 
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsq3OZlydFcnpVYswYSzW3a2Fq
o3CXfzm75ulDLBYMGJBWa0qLYy5Ch9osjCSt4W8eR+HFUVWyWHnCtyZVwbA9Xpwp
2JRq82rznUBOnI2CuMD7GA7UG4CDe+4dqMEeLIQE2kWLWUDki+0vmqe4S91yMOsN
YF2G2DZ/p++5Mvl6MQIDAQAB
-----END PUBLIC KEY-----

后续见第二部分

原创文章,作者:SilencePavilion,如若转载,请注明出处:http://www.178linux.com/49811