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 08:55
下一篇 2018-05-28 09:09

相关推荐

  • 第四个礼拜作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。         cp -r /etc/skel /home/tuser1 ;         ll -d /home/tuser1;         chmod -R g-rwx,o-rwx /home/tuser1;   …

    Linux笔记 2018-06-03
  • iptables/netfilter、 tcp_wrapper

    iptables/netfilter: Firewall:防火墙,隔离工具;工作于主机或网络边缘,对于进出本主机或本网络的报文根据事先定义的检查规则作匹配检测,对于能够被规则匹配到的报文作出相应处理的组件; 主机防火墙 网络防火墙 软件防火墙(软件逻辑): 硬件防火墙(硬件和软件逻辑):NetScreen,CheckPoint,。。。 iptables(ne…

    Linux笔记 2018-06-05
  • Linux的学习之旅

    Linux的文件系统层级结构标准FHS image.png /etc=====和主机相关的系统配置文件 edit the configure /home===== 用户家目录 /usr======二层分层的目录。默认是最大的。 /dev=====设备文件 /media======挂载点和可移动的设备, /mnt=====临时挂载点 /var=======可变…

    Linux笔记 2018-04-01
  • LFS实验第一次——第一章

    环境准备:Centos6.8虚拟机 2G内存 2颗CPU 200G硬盘分区情况:/ 50G  /boot 1G  /swap 2G /data 30G 安装时吧开发工具安装上(gcc)

    2018-03-29
  • 手把手系列(四)教你用kickstart自动化安装CentOS系统

    KickStart是一种半自动化的安装方式。安装者完全可以只告诉安装程序从何处获取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。

    2018-05-24