1)用到证书的主机生成证书签署请求
~]# mkdir /etc/httpd/ssl
~]# cd /etc/httpd/ssl
~]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成证书签署请求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
3)将请求通过可靠方式发送给CA主机
~]# scp
4)在CA主机上签署证书
~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
查看证书中的信息:
~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
吊销证书:
步骤:
1)客户端获取要吊销的证书的serial(序列号)(在使用证书的主机上执行)
~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
2)CA端主机吊销证书
先根据客户端提交的serial和subject信息,对比其本机数据库index.txt中存储的是否一致
吊销:
# openssl ca -revoke /etc/pki/CA /newcerts/SERIAL.pem
其中的SERIAL要换成证书真正的序列号;
3)生成吊销证书的吊销编号(第一次吊销证书时执行)
#echo 01 > /etc/pki/CA/crlnumber
4)更新证书吊销列表
# openssl ca -gencrl -out thisca.crl
查看crl文件:
# openssl crl -in /path/from/crl_file.crl -noout -text
过程示例:
构建私有CA
1)主机生成私钥:
~]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2)生成自签证书:
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
-new:生成新证书签署请求
-x509:生成自签格式证书,专用于创建私有CA时使用
-key:生成请求时用到的私有文件路径
-out:生成的请求文件路径;如果自签证操作,将直接生成签署过的证书
-days:证书的有效时长,单位是day
3)为CA提供所需的目录及文件
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial
要用到证书进行安全通信的服务器,需要向CA请求签署证书(以httpd为例)
1)用到证书的主机生成证书签署请求
~]# mkdir /etc/httpd/ssl
~]# cd /etc/httpd/ssl
~]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成证书签署请求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 3655
3)将请求通过可靠方式发送给CA主机
~]# scp
4)在CA主机上签署证书
~]# openssl ca -in httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 3655
查看证书中的信息:
~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
在CA主机签署证书
将证书发送给申请方,放在其对应的服务目录中
SSH
安全的shell协议,代替传统的不安全的远程登录,默认监听在tcp协议的22号端口,SSH协议的开源实现是基于OpenSSH这个软件,提供SSH服务的另外一个软件是dropbear,这是一个第三方提供的软件,没有rpm包,需要手动编译安装.
openssh
客户端:ssh,scp,sftp 服务端:sshd
ssh命令
格式: ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
-p port:远程服务器监听的端口
-b:指定连接的源IP
-v:调试模式
-C:压缩方式
X: 支持x11转发
-Y:支持信任x11转发
ForwardX11Trusted yes
-t: 强制伪tty分配
ssh -t remoteserver1 ssh remoteserver2
]# ssh -t 10.1.249.190 ssh 10.1.249.191
注意:当初次使用ssh命令连接至一个目标主机时,系统会把这个目标主机的信息保存至当前本机的连接用户的家目录的known_hosts文件中,
这个文件的作用是,当目标主机的信息发生了变化的时候会拒绝连接,比如伪装ip ,登录的时候会发出警告提示,()此次连接的IP和之前连接的ip不是同一台主机).
此种机制的实现是基于密钥对儿实现的,如果删除此文件即可连接.
ssh基于key的认证方式
(1) 在客户端生成密钥对
ssh-keygen -t rsa [-P ”] [-f “/root/.ssh/id_rsa”]
ssh-keygen –t rsa –P ‘’ -f “/root/.ssh/id_rsa” ssh-keygen
(2) 把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [user@]host
(3) 测试
(4) 转化为openssh兼容格式(适合SecureCRT, Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重设私钥口令: #ssh-keygen –p
注意:如果在设定密钥密码的时候为密钥设定了密码的话,每次登录远程主机都要输入密钥密码.可以使用验证代理的方式解决此问题,如下;
验证代理( authentication agent)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供
否则运行ssh-agent bash
钥匙通过命令添加给代理
ssh-add
SSH端口转发
什么是SSH端口转发? SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。 但是, SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发 ,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道” ( tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通 道来进行传输而得名。例如, Telnet, SMTP, LDAP 这些 TCP 应用均 能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此 同时, 如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯 SSH 端口转发能够提供两大功能: • 加密 SSH Client 端至 SSH Server 端之间的通讯数据 • 突破防火墙的限制完成一些之前无法建立的 TCP 连接。
本地转发:
-L localport:host:hostport sshserver
ssh –L 9527:server1:23 -N server2
telnet 127.0.0.1 9527
当访问本机的9527的端口时,被加密后转发到server2的ssh服务,再解密被转发到server1:23
datalocalhost:9527localhost:XXXXXserver2:22server2:YYYYYserver1:23
选项:
-f 后台启用
-N 不开远程shell
-g 启用网关功能
远程转发:
-R sshserverport:host:hostport sshserver
ssh –R 9527:server1:23 –N server2
让server2侦听9527端口的访问,如有访问,就加密后转发请求到本机ssh服务,再由本机解密后转发到serve1:23
Dataserver2:9527server2:22localhost:XXXXXlocalhost:YYYYYserver1:23
动态端口转发
当用firefox访问internet时,本机的1080端口做为代理服务器, firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
在本机firefox设置代理proxy:127.0.0.1:1080
ssh -D 1080 root@sshserver
ssh服务器
服务器端:
sshd, 配置文件: /etc/ssh/sshd_config
常用参数:
Port
ListenAddress ip
PermitRootLogin yes
ClientAliveInterval 0
UseDNS yes
限制可登录用户的办法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroup
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、做好日志,经常分析
示例:设置可登录用户白名单;编辑配置文件]# vim /etc/ssh/sshd_config.添加白名单信息;
用户登录信息获取:
/var/log/wtmp:用户成功登录的日志信息
]# last
/var/log/btmp:用户登录尝试失败的日志信息
]# lastb
lastlog:每个用户最近一次成功登录的信息
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 存档模式,相当于 –rlptgoD,但不保留ACL( -A)和SELinux属性(-X)
sftp命令:基于ssh的ftp协议
交互式文件传输工具
用法能和传统的ftp工具相似
利用ssh服务实现安全的文件上传和下载
使用ls cd mkdir rmdir pwd get put等指令,可用?获取帮助信息。
sftp [user@]host
sftp> help
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文件系统、用户起始目录以及临时目录.
如何使用AIDE:
安装AIDE
yum install aide
修改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 –up
切换身份
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、授权规则:必须的
授权规则格式:
用户 登入主机=(代表用户) 命令
示例:
root ALL=(ALL) ALL
格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命
别名:
Users和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别名和示例
别名有四种类型: User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias
别名格式: A-Z*
别名定义:
Alias_Type NAME = item1, item2, item3 : NAME =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
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/userd
示例5
Defaults:wang runas_default=tom
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*
命令语法选项:
ls -l /usr/bin/sudo
sudo –i –u wang 切换身份
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳,下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
如 -p ”password on %h for user %p”