; 基于key验证和一些自动化运维工具 | Linux运维部落

基于key验证和一些自动化运维工具

pssh pscp.pssh Pslurp.pssh AIDE等

、复习创建CA

定义CA详细的配置信息的文件 /etc/pki/tls/openssl.cnf

1 创建CA,申请证书

1)CA

( umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem )生成私钥文件

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 自签名证书

touch /etc/pki/CA/index.txt

echo 01 > /etc/pki/CA/serial 证书序列号

 

2)client request 客户端申请证书

( umask 066;openssl genrsa -out /etc/app/app.pem ) 申请私钥

openssl req -new -key /etc/app/app.pem -out /etc/app/app.csr 申请证书请求

scp /etc/app/app.csr 复制到CAhost主机上 CAhost:/etc/pki/CA/

 

3)

openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 300 颁发证书

scp /etc/pki/CA/certs/app.crt clienthost:/etc/app/ 证书拷贝的客户端

 

 

Ssh客户端配置文件ssh_config

Ssh服务器端配置文件 sshd_config

客户端配置文件 不需要重启服务,,服务器端配置文件需要重启,因为服务器端不停,需要停下来启动

改端口 port 22—> port 9527

 

Scp命令

只能复制和我相关的文件

Scp[options] [user@]host:/sourcefile /destpath

Scp[options] /sourcefile [user@]host:/destpath

常用选项:

-C压缩数据流

-r 递归复制

-p保持原文件的属性信息

-q 静默模式

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

 

三台主机实现基于key验证,即任何一台主机访问其他主机都不需要提供用户名和密码,

每个主机在自己的主机上生成自己的公钥私钥文件,然后把各自的公钥文件传到同一台主机上,最后把公钥文件分别传到各主机,

生成公钥私钥对 ssh-keygen

复制到一个主机 ssh-copy-id

Ssh-copy-id -i id_rsa.pub 192.168.27.7

将改文件复制到其他主机上:scp authentized_kyes 192.168.27.7[5,6]:/root/.ssh.

 

Scp 复制特点,无论文件动不动,都会原封不动的给复制过去,即使一样的文件,也会覆盖一遍

 

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)和SElinus属性(-X)

例如scp /etc/fstab 192.168.27.120:/app 将/etc/fstab文件复制到主机192.168.27.120上的/app 中

 

 

只复制发生增量的文件

实现A和B服务器自动同步,

Sftp命令

交互式文件传输工具

用法和传统的ftp工具相似

利用ssh服务实现安全的文件上传和下载

使用ls cd mkdir rmdir pwd get put 等指令,可用?或help获取帮着信息

Sftp [user@]host

Sftp > help

Pssh工具 用来执行命令的

Pssh是一个Python编写可以在多台服务器上执行命令工具,也可实现文件复制

–version 查看版本

-h 主机文件列表,内容格式“[user@]host[:port]”

-H 主机字符串,内容格式”[user@]host[:port]”

-l:登录使用的用户名

-p: 并发的线程数

-o 输出的文件目录

-e 错误输入文件

-t TIMEOUT 超时时间设置,0无限制

-O SSH的选项

-v 详细模式

-A 手动输入密码模式

-x 额外的命令行参数使用空白符号,引号,反斜线处理

-X 额外的命令行参数,单个参数模式,同-x

-i 每个服务器内部处理信息输出

-P 打印出服务器返回信息

 

看一台主机的状态 pssh -H 192.168.27.5 -i getenforce

看多台主机的状态 pssh -H 192.168.27.5 -H 192.168.27.6 -i getenforce

使用文本文件,pssh看主机的状态

vim ip.txt ip地址文本

pssh -h ip.txt -i getenforce

 

通过pssh批量关闭SELinux

Pssh -H root@192.168.1.10-i “sed -i s/SELINUX=enforcing/SELINUX=disabled/”

批量发送指令 pssh -H root@192.168.1.10-ihostname

当不支持ssh的key认证时,通过-A选项,使用密码认证批量执行指令

Pssh -H xuewb@192.168.1.10-A -i hostname

将标准错误和标准正确重定向都保存至/app目录下

Pssh -H 192.168.1.10 -o /app -e /app -i “hostname”

 

看每个主机的日志

Pssh -h ip.txt -i cat /var/log/secure

Pssh -h ip.txt -o /app -i cat /var/log/secure 生成日志放在专门的目录中

 

pscp.pssh命令

功能是将本地文件批量复制到远程主机

pscp.pssh -h ip.txt /etc/selinux/config /etc/selinux 复制并覆盖

Pscp.pssh选项

-v 显示复制过程

-a 复制过程中保留常规属性

-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/目录

Psch.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app

将本地目录批量复制到/app/目录

Psch.pssh – H 192.168.1.10 -r /root/text/ /app/

 

Pslurp.pssh 功能是将远程主机的文件批量复制到本地

Pslurp.pssh选项

-L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称

-r 递归复制目录

批量下载目标服务器的passwd文件至/app下,并更名为user

Pslurp -H 192.168.1.10 -L /app/ /etc/passwd user

 

SSH 端口转发

 

SSH 会自动加密和解密所欲SSH客户端与服务端之间的网咯数据。但是,SSH还能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling)这是因为SSH为其他TCP连接提供了一个安全的通道来进行传输而得名。例如,telnet,smtp,ldap这些tcp应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过将tcp端口转发来使用SSH 进行通讯

SSH端口转发能够提供两大功能:

加密SSH Client端至SSH Server 端之间的通讯数据

突破防火墙的限制完成一些之前无法建立的tcp连接

 

在公司外部,想连接一个不安全的网络服务telnet,企业里面防火墙策略不允许telnet连接,因为telnet不安全不加密,担心泄露数据,通常来讲,互联网的防火墙策略会允许ssh的访问,,A可以走ssh协议进入到B主机,

A 可以通过ssh服务连接到B,但是A不可以通过telnet服务连接到C,可以通过隧道功能实现,把telnet的不安全的流量封装到ssh内,随着ssh协议,A到达了B,B再 转包,转发到C上,该段走的是telnet协议,

 

 

 

 

 

 

 

 

 

 

 

 

 

基于ssh的端口转发功能

 

systemctl enable telnet.socket 设置开机启动

systemctl start telnet.socket 启动服务

Ss -nt 查看谁在连主机

Ss -ntl 查看端口 开没开 有没有人用

 

 

iptables -A INPUT -s 192.168.27.A -j REJECT C对A设防火墙策略

ssh -L 9527:192.168.27.C:23 192.168.27.B-Nf 在A上,建立与B连接的隧道

telnet 127.0.0.1 9527 连自己,因为监听的是自己的9527端口等价于telnet 192.168.27.C

 

 

 

 

Ssh -L localport: remotehost:remotehostport sshserver

本地端口(9527) 远程主机telnetsrv(V) (B)

本机端口(在A机器上开端口9527,该端口专门监听A向C发起的请求),一旦执行完该命令之后,会打开9527端口,当A连接本机的9527端口的时候,实际上是自动把请求发送到B,利用ssh封装,到达B,再转到C上

最终实现的效果

Data发送到本机的9527端口,本机打开一个随机端口,(因为要当ssh的客户端),把数据发送到目标的服务器22端口(中间把数据封装到协议中),sshsrv(B),,,这台机器收到之后把SSH拆开,获取数据,再充当telnet的客户端,所以要打开一个随机端口,利用telnet流量发送到目标telnetsrv23(C)端口服务器

 

选项:

-f 后台启用

-N 不打开远程shell,处于等待状态

-g 启用网关功能

实例

Ssh -L 9527:telnetsrv:23 -N sshsrv

Telnet 127.0.0.1 9527

当访问本机的端口9527时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23

Data—–localhost:9527——–localhost:xxxxxx——sshsrv:22———-sshsrv:yyyy—–telnetsrv:23

?Ps aux 查看进程

邮件服务对应的配置文件 vim /etc/postfix/main.cf 默认不让连接

Inet_interfaces=all

Systemctl restart postfix

?远程转发

-R sshserverport:remotehost:remotehostport sshserver

实例

Ssh -R 9527 :telnetsrv:23 -N sshsrv

让sshsrv 侦听9527端口的访问,如有访问,就加密后通过上述服务转发请求到本机上述客户端,再由本机解密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到

Telnetsrv:23

Data—–sshsrv:9527——sshsrv:22——localhost:xxxxx—–localhost:yyyyy—–telnetsrv:23

 

动态端口转发

当用firefox访问Internet时,本机的1080端口作为代理服务器,Firefox的访问请求被转发到sshserver上,由sshserver替之访问Internet

Ssh -D1080 root@sshserver

在本机Firefox设置代理socket proxy:127.0.0.1:1080

Curl –socks5 127.0.0.1:1080 http://www.qq.com

 

 

 

 

 

 

 

 

 

 

 

 

Iptables -F 清空防火墙策略

Iptables -vnL 查看防火墙策略

定义一个goole网站 vim /var/www/html/index.html <h1>welcome to MagEdu!</h1>

[root@centos7 ~]# yum install httpd -y 当web服务器将来对外提供服务

[root@centos7 ~]# systemctl start httpd 启动服务

[root@centos7 ~]# systemctl enable httpd 开机启动

iptables -A INPUT -s 192.168.27.6 -j REJECT 禁止6访问

 

Centos6

-D效果,在本机打开一个代理端口,当我们把请求发送到1080端口的时候,它会自动的把请求发送到跳板机,然后由跳板机转发的目标服务器上

ssh -D 1080 192.168.27.5 -N

在网络中,connect设置socks host127.0.0.1 port:1080

 

 

Curl命令访问

Curl –socks5 127.0.0.1:1080 http://192.168.27.7/

 

Ssh服务器端:sshd,配置文件:/etc/ssh/sshs_config

常用参数:

Port

Listenaddress ip

Logingracetime 2m

Permitrootlogin yes

Strictmodes yes 检查.ssh/文件的所有者、权限等

Maxauthtries 6

Maxsessions 10 同一个连接最大会话

Pubkeyauthentication yes

Permitemptypassword no

Passwordauthentication yes

Gatewayports no

Clientaliveinterval 单位 秒

Clientalivecountmax 默认3

Usedns yes

Gssapiauthentication yes

提高速度可改为no

Maxstartups 未认证连接最大值,默认10

Banner /path /file

限制可登陆用户的办法

Allowusers user1 user2 user3

Denyusers

allowgroups

Denygroups

Ssh服务的最佳实践

建议使用非默认端口

禁止使用protocol version1

限制可登陆用户

设定空闲会话超时时长

利用防火墙设置ssh访问策略

仅监听特定的ip地址

基于口令认证时,使用强密码策略

使用基于密钥的认证

禁止使用过空密码

禁止root用户直接登录

限制ssh的访问频度和并发在线数

经常分析日志

 

 

 

 

 

 

 

 

 

AIDE

高级入侵检测环境工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了

AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(iNode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号

这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户其实目录以及临时目录。

当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己进过修改的ps程序来替换掉你系统上的ps程序,,以使用ps命令查不到正在运行的木马程序。如果入侵者发现发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的由两款:tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具

安装AIDE

Yum install aide

Rpm -ql aide

修改配置文件

Vim /etc/aide.conf

/app 对app关心custom代表的属性

!/app f3 不关注app下的f3

初始化默认的数据AIDE的库

aide –init 数据库放在/var/lib/aide/

比对文件需改名 mv aide.db.new.gz aide.db.gz

进行比对 aide –check

 

更改身份

Su 切换身份:su -l username -c ‘command’

Sudo

来自sudo包

Man 5 sudoers

Sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo,会提示联系管理员

Sudo可以提供日志,记录每个用户使用sudo操作

Sudo可以提供日志,记录每个用户使用sudo操作

Sudo为 系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机

Sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”

通过visudo命令编辑配置文件,具有语法检查功能

Visudo -c 检查语法

授权wang用户挂载光盘,需要编辑配置文件

Vim /etc/sudoers

用户 登录主机=(代表用户)命令

Root ALL = (ALL) ALL

Visudo 等价于 vi /etc/sudoers

Visudo 具有语法检查功能

e 继续编辑

:set nu 添加行号

x不保存,直接退出

 

修改,使vi带颜色 vim /etc/profile.d/env.sh

export EDITOR =vim

授权wang用户可以挂载

Wang ALL =(root) /usr/bin/mount /dev/sr0 /mnt/cdrom

执行

Sudo mount /dev/sr0 /mnt/cdrom

 

个人配置文件

Vim /etc/sudoers.d

检查语法的工具 visudo -c

 

授权组 %wheel ALL=(ALL) ALL

Usermod -aG wheel wang 把wang加入组中 wang即具有root的权限

Wang账号从新登陆,就具有权限

Usermod -G ““wheel

 

Wang ALL =(root) sudoedit 授权wang用户代表root能编辑suders文件

Sudoedit /etc/sudoers.d/wang

配置文件 /etc/sudoers, /etc/sudoers.d/

时间戳文件 /var/db/sudo

日志文件 /var/log/secure

配置文件支持使用通配符golb

?任意单一字符

*:匹配任意长度字符

[wxc] 匹配其中一个字符

[!wxc]除了这三个字符的其他字符

\x 转义

[[alpha]]:字母

配置文件规则有两类 1别名定义:不是必须的

2 授权规则:必须的

授权规则格式

用户 登录主机=(代表用户)命令

示例 root ALL =(ALL) ALL

格式说明

User 运行命令者的身份

Host 通过哪些主机

Runas 以哪个用户的身份

Command 运行哪些命令

别名

Users和runas

#uid

%group_name

%#gid

User_aliad|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]([A-Z][0-9]_)*

别名定义

Alias_Type NAME1=item1,item2,item3:NAME2=item4,item5

示例1:

Student ALL =(ALL) ALL

%wheel ALL =(ALL) ALL

示例2

Student ALL =(root) /sbin/pidof,/sbin/ifconfig

%wheel ALL=(ALL) ALL NOPASSWD :ALL

示例3

User_Alias NETADMIN=netuser1,netuser2

Cmnd_Alias NETCMD =/usr/sbin/ip

NETADMIN ALL =(root)NETCMD

示例4

User_Alias SYSASER=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

示例5

Defaults:wang runas runas_default=tom

Wang ALL =(tom,jerry)ALL

示例6

Wang 192.168.175.136,192.168.175.138=(root)

/usr/sbin,!/usr/sbin/userad

示例7

Wang ALL =(ALL) /bin/cat /var/log/messages*

Sduo命令

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 改变询问密码的提示符号

例子,wang ALL =(ALL) /bin/cat /var/log/secure*,!/bin/cat /var/log/secure* * 可以看secure文件,不可以看其他文件

 

TCP_Wrappers介绍

工作在第四层(传输层)的tcp协议

对有状态连接的特定服务进行安全检测并实现访问控制

以库文件形式实现

某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的

判断服务程序是否能够由tcp_wrapper进行访问控制的方法

Which sshd 服务器程序的路径 /usr/sbin/sshd

ldd /PATH/TO/PROGRAM|grep libwrap.so

Strings PATH/TO/PROGRAM|grep libwrap.so

调该模块了,就可以间接通过该模块控制该服务的访问

在centos7上面控制centos的访问 vim /etc/hosts.deny sshd:地址

 

Hosts.deny hosts.allow 的基本的作用

先看/etc/hosts.allow,如果这个文件定义的规则是不匹配的,满足就不看deny了,不满足的才看、

/hosts.deny. Deny 文件中如果匹配了,就生效了,如果不匹配,就默认允许了

 

实现192.168.27网段都及拒绝,有一个网址192.168.27.7可以访问

Vim hosts.allow sshd:192.168.27.7

Vim /etc/host.deny sshd:192.168.27

Windows 默认192.168.27.1

Vim hosts.deny sshd:192.168.27.EXCEPT 192.168.27.7

Vim /etc/hosts.deny sshd: 192.168. EXCEPT 192.168.27 EXCEPT 192.168.27.7

在deny中 192.168.网段拒绝,但是27这个网段是允许的,但是大网段中的ip被拒绝了

Deny 主要用在/etc/hosts.allow定义 拒绝

Allow主要用在/etc/hosts.deny中,定义 允许

Spawn 启动一个外部程序完成执行的操作

Sshd :192.168.27.8 :spawn echo `date +%F` client login > /app/tcpwrapper.log

把登录的时间记录在日志中,在这里面涉及%用法需要使用%%

Sshd:192.168.27. :spawn echo `date +”%%F %%T”` client\: %c login on server\:%s > /app/tcpwrapper.log

Twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准IO和ERROR发送到客户端,默认至/dev/null

测试工具

Tcpdmatch [-d] daemon [@host] client

-d 测试当前目录下的hosts.allow和hosts.deny

 

PAM认证机制

它提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp,点对点协议(ppp))su等应用程序中。系统管理员通过pam配置文件来指定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx())来实现对认证方法的调用;而pam服务模块的开发者则利用PAM SPI 来编写模块(主要是引出一些函数pam_sm_xxxx()供PAM接口库调用),将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来

PAM相关文件

模块文件目录:/lib64/security/*.so

环境相关的设置:/etc/security/

主配置文件:/etc/pam.conf,默认不存在

为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME

注意:如/etc/pam.d存在,/etc/pam.conf将失效

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pam认证原理

PAM认证一般遵循这样的顺序:service(服务)—PAM(配置文件)—–pam__*.so

PAM 认证首先要确认那一项服务,然后加载相应的PAMd配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证

PAM认证过程:

1使用者执行/usr/bin/passwd程序,并输入密码

2passwd开始调用PAM模块,PAM模块会搜索passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d里边的与程序同名的文件,即PAM会搜索/etc/pam.d/passwd此设置文件

3经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证

4将验证结果回传给passwd这个过程,而passwd这个过程会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)

通用配置文件/etc/pam.conf格式

Application type control module-path arguments

专用配置文件/etc/pam.d/*格式

type control module-path arguments

说明

服务名(application)

Telnet,login,ftp,服务名字“OTHER”代表所有没有在该文件中明确配置的其他服务

模块类型

Control PAM库该如何处理与该服务相关的PAM模块的成功或失败

Module-path 用来指明本模块对应的程序文件的路径名

Arfuments 用来传递给该模块的参数

模块类型

Auth

Account

Password

Session

-type

简单方式实现

Required

Requisite

Sufficient

Optional

Include

复杂详细实现

Ok

Done

Bad

Die

Ignore

Reset

Module-path:模块路径

相对路径

/lib/security 目录下的模块可使用相对路径

绝对路径

 

实现如果访问ssh的身份验证进过pam_shells.so检查失败了,就登录失败

Vim sshd auth required pam_shells.so

Getent passwd wang

Chsh -s /bin/csh wang

Vim /etc/shells 注释掉 #/bin/csh

只是影响ssh

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:/91155

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:guoqibee.com  guoqibee.com  万达娱乐注册  万达娱乐直属QQ  万达娱乐直属  万达娱乐平台  万达直属QQ  万达娱乐主管  万达招商  测试