ssh等

SSH端口转发

SSH会自动的加密和解密所有SSH客户端与服务器之间的网络数据;同时也可以将其他TCP端口的数据加密转发,这一过程叫“隧道”,这样也可以减少防火墙开启的端口。

实现过程是数据首先通过连接本机的某一个端口,被当做ssh协议数据发送给ssh服务器,ssh服务器解密再发给远程主机的端口

本地转发

-L localport:remotehost:remotehostport sshserver

locaolport本机端口号、远程主机地址和端口、ssh协议的端口–23端口或25端口

选项:

-f 后台启用

-N 不打开远程shell,处于等待状态(一般搭配f,实现在当前窗口就可传输数据,不需要开新窗口)

-g 启用网关功能

示例

ssh –L 9527:telnetsrv:23  sshsrv

telnet 127.0.0.1 (也可接端口,即指定连接端口)

远程转发:

-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)

还有一种是动态端口转发。

 

ssh服务器

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

常用参数:

ØPort 端口

ØListenAddress ip

ØLoginGraceTime 2m 登录等待时间

ØPermitRootLogin yes是否允许root登录

ØStrictModes yes 检查.ssh/文件的所有者,权限等

ØMaxAuthTries 6最多的验证密码的次数(生效一半)

ØMaxSessions 10 同一个连接最大会话(同一个会话→克隆)

ØPubkeyAuthentication yes 是否支持基于key验证登录

ØPermitEmptyPasswords no

ØPasswordAuthentication yes 是否基于密码验证登录

ClientAliveInterval 60 用户没有操作是最多等待n秒

ClientAliveCountMax 等待结束提醒次数最多为多少后,就退出ssh服务连接

UseDNS yes 改为no可提升访问速度

GSSAPIAuthentication yes 提高速度可改为no

MaxStartups 未认证连接最大值,默认值10(10:30:100 10个以上的连接后开始70%的成功率连接)

Banner /path/file 可以设置提示界面的提示语

限制可登录用户的办法:(直接在配置文件中添加即可生效)

AllowUsers user1 user2 user3

DenyUsers

AllowGroups

DenyGroups

 

ssh服务的最佳实践

u建议使用非默认端口

u禁止使用protocol version 1

u限制可登录用户

u设定空闲会话超时时长

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

u仅监听特定的IP地址

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

tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs

u使用基于密钥的认证

u禁止使用空密码

u禁止root用户直接登录

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

u经常分析日志(last查看日志信息或lastb查看失败登录的信息;在/var/log/下,btmp是失败登录的日志)

 

编译安装dropbear示例

ssh协议的另一种实现方式:dropbear

开始:

  1. 确保已安装开发包组yum groupinstall “Development tools”
  2. 下载dropbear最新的安装包
  3. tar
  4. 了解README等帮助文件
  5. 分配配置文件等文件的各个安装路径:./configure  –prefix=/data/dropbear  –sysconfdir=/etc/dropbear/
  6. 上一步缺什么依赖包就安装什么包,以确保上一步正确完整安装
  7. 开始编译(若是能力允许,其实可以自选)make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvert scp”
  8. make install 和ls  /data/dropbear/ 等查看是否完成;/etc/dropbear/文件夹若是没有,手动创建即可
  9. 在/etc/profile.d/dropbear.sh设置path变量,并且进行生效操作

281

  1. 根据帮助文档中的提示,生成必要的key在/etc/dropbear/中:dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
  2. 然后即可登录,第一次最好在前台测试:dropbear -p :2222 -F –E #前台运行
  3. 客户端访问:dbclient -p 2222 root@127.0.0.1

 

AIDE

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

操作:

初始化默认的AIDE的库:

/usr/local/bin/aide –init

生成检查数据库(建议初始数据库存放到安全的地方)

cd /var/lib/aide

mv aide.db.new.gz aide.db.gz

检测: /usr/local/bin/aide –check

更新数据库

aide –update

 

sudo

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

sudo也可以记录日志;使用时间戳文件默认每隔五分钟检测一次权限

添加权限要写入文件:/etc/sudoers

最好写一个单独的文件放入:/etc/sudoers.d/

visudo可直接添加附加权限,虽然有检查语法功能,但不是彩色的,需修改配置文件:(记得生效)

echo export EDITOR=vim >> /etc/profile.d/env.sh

时间戳文件:/var/db/sudo

日志文件:/var/log/secure

配置文件支持使用通配符glob:

?:任意单一字符

* :匹配任意长度字符

[wxc]:匹配其中一个字符

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

\x : 转义

[[alpha]] :字母 示例: /bin/ls [[alpha]]*

授权规则格式

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

示例:

root ALL=(ALL) ALL

格式说明:

user: 运行命令者的身份

host: 通过哪些主机

(runas):以哪个用户的身份

command: 运行哪些命令

sudo -u wang ….指定具备谁的权限来进行操作

支持别名识别

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

别名有四种类型: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=(root) /sbin/pidof,/sbin/ifconfig

%wheel ALL=(ALL) NOPASSWD: ALL (后面是表示不需要输入密码即可操作)

示例2:

User_Alias NETADMIN= netuser1,netuser2

Cmnd_Alias NETCMD = /usr/sbin/ip

NETADMIN ALL=(root) NETCMD

示例3:(设置默认sudo所要代表的用户)

Defaults:wang runas_default=tom

wang ALL=(tom,jerry) ALL

sudo命令的其他选项:

-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

主要解决对TCP的安全控制

某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否调用该库

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

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

strings PATH/TO/PROGRAM|grep libwrap.so

配置文件:/etc/hosts.allow, /etc/hosts.deny

帮助参考:man 5 hosts_access,man 5 hosts_options

检查顺序:hosts.allow,hosts.deny(默认允许)

注意:一旦前面规则匹配,直接生效,将不再继续

基本语法:

Ø daemon_list@hostip: client_list [ :options :option… ]

Daemon_list@host格式

  • 单个应用程序的二进制文件名,而非服务名,例如vsftpd
  • 以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd
  • ALL表示所有接受tcp_wrapper控制的服务程序
  • 主机有多个IP,可用@hostIP来实现控制

如:in.telnetd@192.168.0.254

客户端Client_list格式

  • 以逗号或空格分隔的客户端列表
  • 基于IP地址:168.10.1 192.168.1.
  • 基于主机名:magedu.com .magedu.com 较少用
  • 基于网络/掩码:168.0.0/255.255.255.0
  • 基于net/prefixlen: 192.168.1.0/24(CentOS7)
  • 基于网络组(NIS 域):@mynetwork
  • 内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID

[:options]选项:

帮助:man 5 hosts_options

deny 主要用在/etc/hosts.allow定义“拒绝”规则

如:vsftpd: 172.16. :deny

allow 主要用在/etc/hosts.deny定义“允许”规则

如:vsftpd:172.16. :allow

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

twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和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.conf,默认不存在

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

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

 

pam认证原理

uPAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so

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

 

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

application type control module-path arguments

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

type control module-path arguments

说明:

模块类型(module-type)

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

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

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

 

模块类型(module-type)

  • Auth 账号的认证和授权
  • Account 与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用户的位置(例如:root用户只能从控制台登录)
  • Password 用户修改密码时密码复杂度检查机制等功能
  • Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作,如:记录打开/关闭数据的信息,监视目录等
  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

 

Control控制:

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

两种方式实现:

简单复杂

简单方式实现:一个关健词实现

  1. required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕再将失败结果返回给应用程序。即为必要条件
  2. requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
  3. sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件
  4. optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
  5. include: 调用其他的配置文件中定义的配置信息

复杂详细实现:使用一个或多个“status=action”

[status1=action1 status2=action …]

Status:检查结果的返回状态

Action:采取行为 ok,done,die,bad,ignore,reset

  1. ok 模块通过,继续检查
  2. done 模块通过,返回最后结果给应用
  3. bad 结果失败,继续检查
  4. die 结果失败,返回失败结果给应用
  5. ignore 结果忽略,不影响最后结果
  6. reset 忽略已经得到的结果

 

module-path: 模块路径

  • 相对路径:

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

如:pam_shells.so、pam_limits.so

  • 绝对路径:

模块通过读取配置文件完成用户对系统资源的使用控制

/etc/security/*.conf

注意:修改PAM配置文件将马上生效

建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误

 

ss -ntl 可查到现已开启的端口号

ss -nt 可查现在登录的客户端

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/99641

(0)
晨嘉晨嘉
上一篇 2018-05-28
下一篇 2018-05-28

相关推荐

  • 源码编译安装 MariaDB

    基础软件 yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel lib…

    Linux笔记 2018-06-24
  • Linux中RAID详解

    RAID简介

    2018-05-05
  • N31-第二周作业—文件的管理

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3、请使用命令行展开功能来完成以下练习:
    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rc.d
    │   │   └── init.d
    │   └── sysconfig
    │   └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │   ├── bin
    │   └── sbin
    └── var
    ├── lock
    ├── log
    └── run
    4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
    12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    2018-07-05
  • Linux文本处理工具

    抽取文本的工具: 文件查看命令: 分页查看文件内容: 显示文本前或后行的内容: 抽取文本cut和合并文件paste cut和paste: 分析文本的工具: 文件排序sort:  

    Linux笔记 2018-04-08
  • AWK

    AWK awk介绍 awk:开发人:Aho, Weinberger, Kernighan, 功能:报告生成器,格式化文本输出     有多种版本:New awk(nawk),GNU awk( gawk) gawk功能:模式扫描和处理语言 awk主要功能:格式化显示文档和打印报表 /usr/bin/awk ===>  gawk   的软链接 &nbs…

    Linux笔记 2018-05-21
  • KeepAlive高可用双主lvs-dr模型集群

    1.环境: RS1  :  192.168.0.117 RS2 :192.168.0.118 VS1 :192.168.0.106 VS2 :  192.168.0.114 VIP1:192.168.0.90     VIP2:192.168.0.99 2.在RS上安装httpd服务:yum install httpd 编辑网页: vi /var/www/h…

    Linux笔记 2018-07-23