Linux ssh安全远程登录

               Linux ssh安全远程登录

本章内容:

    构建SSH远程登录系统

    SSHsecure shell)是标准的网络协议,主要用于实现字符界面的远程登录管理,及远程文件复制功能。SSH协议对通过网络传输的数据进行了加密处理,其中包括了用户登录时输入的用户口令。与早期的Telnet(远程登录)、rsh(远程执行命令)、rcp(远程文件复制)等应用相比,SSH协议提供了更好的安全性,SSH协议监听的端口:tcp22

 

SSH协议支持两种方式的用户登录认证:

   1)基于密码验证的SSH登录体系

   2)基于密钥对儿验证的SSH登录体系

 

openssh

client/server:客户端/服务器

    client:客户端软件有sshscpsftp

    server:服务器软件有sshd

Windows上的远程客户端有:xshell   securecrt   putty  sshsecureshellclinet

 

ssh服务器:

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

   常用参数:

       Port  ####    //监听端口

       AddressFamily any   //监听地址

       PasswordAuthentication yes |no  //是否允许密码验证登录

       protocol           //协议

       LoginGraceTime 2m  //登录等待超时时间

       PermitRootLogin yes |no  //是否允许root登录

       MaxAuthTries 6     //尝试错误密码输入次数(一半)

       MaxSessions 10     //每个网络连接尝试最大会话次数

       AuthorizedKeysFile   .ssh/authorized_keys //key验证默认公钥存放路径

       ClientAliveInterval 0   //用户连接上sshd服务多久不活动就断开连接

       UseDNS yes |no  //是否使用DNS

       #no default banner path  //登录sshd服务时的提示标语

       Banner /etc/ssh.txt       //登录sshd服务时的提示标语

 

   限制可登录用户的办法:

       AllowUsers  zheng  mage  //如果此处没有添加root用户,那么root也就拒绝

       DenyUsers  zhangsan   lisi  //拒绝登录sshd服务的用户,拒绝优先

       AllowGroup                //允许那些组内用户登录

       DenyGroup                //拒绝哪些组内用户登录

 

ssh服务的最佳实践:

1、不要使用默认端口

2、禁止使用protocol  version 1

3、限制可登录用户

4、设定空闲会话超时时长

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

6、仅监听特定的IP地址

7、基于口令认证时,使用强密码celv

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

8、使用基于密钥的认证

9、禁止root用户直接登录

10、禁止使用空密码

11、限制ssh的访问频率和并发在线数

12、做好日志,经常分析

 

ssh客户端:

ssh客户端主配置文件:/etc/ssh/ssh_config

命令行客户端工具:

1)ssh远程登录:使用ssh命令远程登录服务器时,最典型的命令格式如下。

       ssh  username@sshserver  [command]

             或者简写为:

       ssh  ip address

 

       ssh支持的选项:

          -pport远端服务器监听的端口

          -b:指定连接的源ip

          -v:调试模式

          -c:压缩方式

          -X:支持x11转发

          -y:支持信任x11转发 forward x11 trusted yes

          -t:强制伪tty分配

             ssh  -t   remoteserver1 ssh remoteserver2

          -l:直接以谁的身份登录sshd服务器

             ssh   -l  zheng  192.168.3.2 (必须指定用户名)

       

      命令格式中sshserver表示需要登录到的SSH服务器的地址,可以是主机名或者IP地址,而username表示用于登录的用户账号,该账号应该是SSH服务器中的系统用户账号。用户名与服务器地址之间使用“@”符号进行分隔。

 

      当客户端第一次使用ssh客户端命名连接sshd服务器时,在你输入yes的时候,客户机会自动复制sshd服务器/etc/ssh/ssh_host_rsa_key.pub中的公钥到自己家目录./.ssh/known_hosts文件中。下次再连接时,sshd服务器就会发一个私钥签名数据给ssh客户端,如果ssh客户端能解开则证明是原来连接过的sshd服务器,否则客户端则会报警提示。(WARNING REMOTE  HOST IDENTIFICATION CHANGED!)远程主机标识发生改变。

 

修改sshd服务器的监听端口号:

[root@centos7 ssh]# vim /etc/ssh/sshd_config

blob.png 

[root@centos7 ssh]# systemctl reload sshd    //重新加载服务

 

如果selinux是开启状态,还需执行:

[root@centos7 ssh]# semanage port -a -t ssh_port_t -p tcp 2222

 

使用centos6客户机测试:

[root@centos6 ssh]# ssh 192.168.3.11 -p 2222

 

若不想每次ssh连接时都输入指定的端口号2222,我们这是就可以更改客户端(centos6)的配置文件。

    [root@centos6 ssh]# vim /etc/ssh/ssh_config

blob.png 

客户端改完配置文件无需重启服务。

使用centos6客户机测试:

[root@centos6 ssh]# ssh 192.168.3.11

 

 

基于key验证远程登录openssh服务器:

 

   在客户端创建密钥对:

在客户端使用ssh-keygen命令工具为当前用户创建密钥对文件,可以使用的加密算法为rsadsassh-keygen命令的-t选项用于指定算法类型),ssh-keygen命令执行完毕后将密钥文件保存到用户指定的位置,默认位于用户宿主目录下的.ssh/目录下。其中id_rsa.pub是用户的公钥文件,可以提供给ssh服务器;id_rsa是用户的私钥文件,权限默认为600,私钥文件用妥善保管,不能泄露给他人。用户可以在创建密钥对儿的过程中设置一个私钥密码短语或(ssh-keygen  -P  PASSWD)直接指定。

 

   1)在客户端生成密钥对儿;

    ssh-keygen  -t  rsa|dsa  -P  PASSWD

      或者写成:

   2ssh-keygen   (私钥保护密码在创建的过程中填写,默认为rsa加密算法)

 

   3)给私钥保护密码设置密码代理;

         * 这样口令就只需要输入一次;

         * 需先执行ssh-agent bash 启动密码代理服务;

         * 在使用ssh-add命令把私钥保护密码托管给密码代理服务;

         * 如果客户机重启还需重新设置私钥保护密码托管。

 

   上传公钥文件给服务器:

将客户端用户创建的公钥文件发送给openssh服务器,并保存到服务器的授权密钥库中。服务器的授权密钥库文件位于各用户宿主目录下的.ssh/目录,默认的文件名是authorized_keys

 

   1)拷贝公钥文件到远程服务器上;

         ssh-copy-id  -i  public_file绝对路径) [user@]host

 

测试基于key验证远程登录openssh服务器:

   实验环境部署:

     1)在客户端centos7服务器上使用ssh-keygen命令生成密钥对。

     2)使用ssh-copy-id命令把生成的公钥文件发送给openssh服务器。

     3)在客户端centos7上使用ssh命令进行key验证远程登录测试。

 

1、在客户端centos7服务器上使用ssh-keygen命令生成密钥对;

   blob.png

 

查看/root/.ssh目录下生成的public/private文件

blob.png 

 

2、使用ssh-copy-id命令把生成的公钥文件发送给openssh服务器;

 

blob.png 

 

centos6主机上查看/root/.ssh/目录下是否多出了一个授权密钥文件,authorized_keys

blob.png 

 

3、在客户端centos7上使用ssh命令进行key验证远程登录测试。

  blob.png

 

注意:在ssh连接centos6时需要输入一下保护私钥的密码,如果这样决定麻烦,我们也可以启用ssh私钥保护密码托管。

    * 需执行ssh-agent bash 启动密码代理服务;

* 使用ssh-add命令把私钥保护密码托管给密码代理服务;

* 如果客户机重启还需重新设置私钥保护密码托管。

blob.png blob.png

 

使用SecureCRTXshell实现基于key验证:

 

  SecureCRT实现基于key验证:

  SecureCRT工具—–>创建公钥—–>生成Identity.pub文件,并复制到需要远程登录的openssh服务器上相应文件authorized_keys中,需注意新建的authorized_keys文件权限为600,并且要转换Identity.pubopenssh服务器兼容的格式,需在openssh服务器上执行ssh-keygen  -i  -f  Identity.pub  >>  .ssh/authorized_keys.

 

  Xshell实现基于key验证:

  xshell工具中——->新建用户密钥生成向导——–>生产密钥参数——->密钥类型:RSA|DSA———->密钥长度:768|1024|2048|3072——–>下一步——–>生成公钥对——->下一步———>用户密钥信息(密钥名称、输入给用户密钥加密的密码)——–>下一步———>公钥注册—–保存为文件(将公钥文件保存桌面)——>完成。

复制到需要远程登录的openssh服务器上相应文件authorized_keys中,需注意新建的authorized_keys文件权限为600;然后就可以新建会话连接了,输入主机IP,在用户身份验证中选择publickey,输入用户名,选择用户密钥,点击完成。

 

 

scp命令:

 

scp  [options]  SRC  ……..DEST/

两种方式:

scp  [options]  [user@]host:/sourcefile /desrpath

scp  [options]  /sourcefile  [user@]host:/destpat

 常用选项:

          -c:压缩数据流;

          -r:递归复制;

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

          -q:静默模式;

          -Pport 指明 remote host的监听的端口;

      注意:scp命令目标主机中存在的文件也会重新拷贝,效率较低。

   示例:

     [root@centos7 Desktop]# scp 192.168.3.7:/root/f1.sh  ./

     [root@centos7 Desktop]# scp ./linux-3.18.42.tar.xz  192.168.3.7:/root

 

rsync命令:

   rsync命令:基于sshrsh服务实现高效率的远程系统之间复制文件;

   使用安全的shell连接作为传输方式;

   scp命令效率更快,只复制不同的文件;适用于更新网站;

   rsync  -av  /etc  server1:/tmp 把整个目录复制过来

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

   常用选项:

         -n:模拟复制过程

         -v:显示详细过程

         -r:递归复制目录树

         -p:保留权限

         -t:保留时间戳

         -g:保留组信息

         -o:保留所有者信息

         -l:把符号链接文件做为符号文件进行复制(默认)

         -L:将软链接文件指向文件复制

         -a:存档模式,相当于-riptgoD,但不保留ACL-A)和SELinux属性(-x)。

   注意:rsync命令只复制目标服务器上不存在的文件,效率高。

 

  示例:

    [root@centos7 ~]# rsync ./f1.md5  192.168.3.7:/root

[root@centos7 ~]# rsync -rp 192.168.3.7:/etc  ./

 

xftp命令:

交互式文件传输工具;

用法和传统的ftp工具相似;

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

使用 ls  cd  mkdir  rmdir   pwd   get   put等指令;

 

 sftp  [user@]host

 

 示例:

       [root@centos7 ~]# sftp 192.168.3.7

 

ssh端口转发:

   什么是SSH端口转发?

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

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

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

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

 

本地转

-L localport:host:hostportsshserver

sshL 9527:telnetsrv:23 -N sshsrv

telnet 127.0.0.1 9527

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

dataßàlocalhost:9527 ßàlocalhost:XXXXXßàsshsrv:22 ßàsshsrv:YYYYY ßàtelnetsrv:23

   .

      -f 后台启用

      -N 不开远程shell

  -g 启用网关功能

 

远程转发:

-R  sshserverporthosthostport    sshserver

   ssh   -R 9527telnetsrv23   -N  sshsrv

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

Data <—->sshsrv:9527<—–>sshsrv:22<—–>localhost:xxx<—–>localhost:yyyy<—>telnet:23

 

 示例:

  实验环境:centos5使用ssh隧道Telnet  centos7主机。

      centos5 ip192.168.3.5

      centos6 ip192.168.3.6

      centos7 ip192.168.3.7

    1centos6 centos7在同一个局域网内,centos5为互联网上的设备;

    2)局域网内的策略允许centos5访问centos6

    3)使用ssh端口转发实现centos5安全访问centos7

 [root@centos5~]#ssh  -L 9527:192.168.3.7:23  -N 192.168.3.6

 [root@centos5~]#telnet 127.0.0.1 9527 //这样就可以telnetssh安全)连接centos7了。

 

动态端口转发:

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

   在本机firefox设置代理socket proxy127.0.0.1:1080

   #ssh   -D  1080 root@sshserver

 

X协议转发:

  所有图形化应用程序都是x客户程序:

能够通过tcp/ip连接远程x服务器

数据没有加密机,但是它通过ssh连接隧道安全进行

ssh  -X  user@remotehost   gedit

remotehost主机上的gedit工具,将会显示在本机的x服务器上。

传输的数据将通过ssh连接加密。

 

AIDE:高级入侵检测环境

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

 

AIDEadevanced  intrusion  detection  environment)高级入侵检测环境,是一个入侵检测工具,只要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。

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

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

 

安装AIDE

   yum  -y  install   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

 

AIDE的主配置文件:/etc/aide.conf

blob.png 

blob.png 

 

对要监控的目录或文件初始信息生成数据库文件;系统会默认把生成的aide.db.new.gz数据库文件保存到/var/lib/aide目录下:

blob.png 

 

如果要校验的时候,需改名为:aide.db.gz

blob.png 

 

校验aide监控的目录和文件:

blob.png 

 

改变一下f1文件的大小:

blob.png 

 

在次使用aide  –check检测监控的目录和文件:

blob.png 

 

由此可见aide已经检测到了f1文件哈希值发生了改变。

 

如果说现在想监控f3文件了,只需改/etc/aide.conf配置文件,把!/testdir/f1删除。

blob.png 

 

使用aide  –update监控数据库信息:

blob.png 

再次修改新生成的aide.db.new.gz监控数据库文件为aide.db.gz

blob.png 

 

su 切换用户身份:

  在大多数的Linux服务器中,通常并不建议用户直接使用root用户登录系统。这样一方面尽可能地减少了以“超级用户”身份发生误操作的可能性,另一方面也降低了root密码在不安全网络中被泄露(或暴力破解)的风险。

su   -l  username  -c  command

 

sudo命令:

sudo命令提供了一种机制,只要预先在/etc/sudoers配置文件中进行授权,即可以允许特定的用户以超级管理员(或其他普通用户)的身份去执行命令,而该用户不需要知道root用户(或其他普通用户)的密码。

 

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

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

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

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

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

sudo的配置文件/etc/sudoers   或  /etc/sudoers.d/

/etc/sudoers文件的默认权限位440,通常使用专门的visudo命令进行编辑。如果直接使用vi命令编辑,则在保存文件的时候需要使用:wq!,否则系统将提示为只读文件而拒绝保存。

 

sudo命令配置文件支持使用通配符glob

        ?:任意单一字符;

         *:匹配任意长度字符;

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

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

    \x:转义;

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

 

配置文件规则有两类:

1)别名定义:不是必须的

2)授权规则:必须的

 

授权规则格式:

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

 

示例:

root    ALL=(ALL)   ALL

 

格式说明:

user:运行命令者的身份;

host:通过哪些主机

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

command:运行哪些命令;

 

别名:

  userrunas

     #uid

     %group_name

     %#gid

     user_alias | runas_alias

 

host

   iphostname

   network/netmask

   host_ailas

 

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=ALLALL

 

  示例2

student   ALL=root/sbin/pidof,/sbin/ifconfig

%wheel   ALL=(ALL)  nopasswdALL

 

  示例3

     User_Alias  NETADMIN = netuser1,netuser2

     Cmnd_Alias NETCMD = /usr/sbin/ip

     NETADMIN  ALL=rootNETCMD

 

  示例4

     User_Alias  SYSADER = zheng,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

User_Alias  ADMINUSER = adminuser1,adminuser2

Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd,!/usr/bin/passwd root

ADMINUSER  ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel

 

  示例6

Defaultswang  runas_default=tom

wang  ALL = (tom,jerry) ALL

 

  示例7

wang  192.168.175.136,192.168.175.138=(root) /usr/sbin,!/usr/sbin/useradd

 

  示例8

wang  ALL=(ALL) /bin/cat  /var/log/message*

 

sudo [-u user]  command

      -i为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。

      -V:显示版本信息等配置信息;

      -uuser 默认为root

      -l:列出用户在主机上可用的和被禁止的命令

      -v:在延长密码有效期限5分钟,更新时间戳  //认证时间戳目录:/var/db/sudo

      -k:清除时间戳,下次需要重新输入密码  

      -K:与-k类似,还要删除时间戳文件

      -b:在后台执行指令

      -p:改变询问密码的提示符

         -p password on %h for user %p

 

示例1:授权zheng用户以管理员权限:

 [root@centos7 Desktop]# visudo

blob.png 

切换到zheng用户使用sudo  -l 查看:

blob.png 

 

示例2

  zheng   ALL=(root) NOPASSWD:/usr/bin/passwd,!/usr/bin/passwd root

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

(0)
上一篇 2016-10-10 18:25
下一篇 2016-10-11 14:19

相关推荐

  • sed的基本用法详解

    在Linux的世界中,有着一个文本三剑客的称呼,它们分别代表grep(文本过滤),sed(流编辑器),awk(gawk)(报告生成器)。 它们是强大的文本处理工具,了解并掌握它们,可以让你对文本的处理更加从容和轻松。 今天我们主要是围绕sed来进行分析。 一、初识sed sed:Stream Editor 从名字上也可以直观的了解到它是一个流编辑工具。何为流…

    Linux干货 2015-06-08
  • bash 循环和函数

    回顾: 循环 循环控制:break,continuewhile , for循环的特殊用法for (());do     循环体donewhile read VARAIBLE;do     循环体done <&nbs…

    Linux干货 2016-08-24
  • Linux基础指令(1)

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及相关实例演示  文件管理工具:cp mv rm cp命令 : 单源复制: cp [option]… [-T]  SOURCE DEST     -bash-4.1# …

    Linux干货 2016-11-09
  • vim 文本编辑器

    vim 文本编辑器 vi 简介 vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。 vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就…

    Linux干货 2016-08-16
  • N26-肉肉-第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 常用文件管理命令有cp,mv,rm  cp :copy        -i:交互式复制,覆盖之前提醒用户确认;         &n…

    Linux干货 2017-01-03
  • Nginx反向代理、负载均衡的实现

    概述:     上篇介绍了Nginx作为web服务器的一些常用配置的说明,但是在实际生产环境中,Nginx更多是作为前端的负载均衡器,反代前端用户请求到后端真实的web服务器上,完成LNAMP的组合的方式存在。本篇就介绍一些Nginx作为http的反向代理和前端负载均衡调度器的一些常用配置,具体包括:  &n…

    Linux干货 2016-11-01