关于ssh:服务器安全设置

11次阅读

共计 7034 个字符,预计需要花费 18 分钟才能阅读完成。

平安的 SSH 连贯

形式

  • 端口
  • 协定
  • 用户
  • 明码
  • 密钥对
  • ssh-agent
  • 二次认证

默认配置文件

# 设置 ssh 监听的端口号,默认 22 端口
Port 22

#指定监听的地址,默认监听所有;ListenAddress ::
ListenAddress 0.0.0.0

 #指定反对的 SSH 协定的版本号。'1' 和 '2' 示意仅仅反对 SSH- 1 和 SSH- 2 协定。#"2,1" 示意同时反对 SSH- 1 和 SSH- 2 协定。#
Protocol 2,1

#HostKey 是主机私钥文件的寄存地位;
"rsa1" 仅用于 SSH-1,"dsa" 和 "rsa" 仅用于 SSH-2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key

#密钥门路
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key    

#是否通过创立非特权子过程解决接入申请的办法来进行权
#限分 离。默认值是 "yes"。认证胜利后,将以该认证用户的身份创另一个子过程。这样做的目标是
#为了避免通过有缺点的子过程晋升权限,从而使零碎更加平安。UsePrivilegeSeparation yes

#在 SSH- 1 协定下,长寿的服务器密钥将以此指令设置的时
#间为周期(秒),一直从新生成;这个机制能够尽量减小密钥失落或者黑客攻击造成的损失。设为 0 
#示意永不从新生成为 3600(秒)。KeyRegenerationInterval 3600

#指定服务器密钥的位数
ServerKeyBits 1024

#指定 将日志音讯通过哪个日志子系统 (facility) 发送。有效值是:#DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3,LOCAL4, LOCAL5, 
#LOCAL6, LOCAL7
SyslogFacility AUTH

#指定日志等级(具体水平)。可用值如下:QUIET, FATAL, ERROR, INFO
#(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3,DEBUG 与 DEBUG1 等价;DEBUG2,# 和 DEBUG3 则别离指定了更具体、更罗嗦的日志输入。比 DEBUG 更具体的日志可能会透露用户
# 的敏感信息,因而拥护应用。LogLevel INFO

#限度登陆工夫 120 秒,0 示意无限度, 登陆失败需期待 120s
LoginGraceTime 120

#是否容许 root 登录
#"no" 示意禁止。"without-password"
#示意禁止应用明码认证登录。"forced-commands-only"
#示意只有在指定了 command 选项的状况下才容许应用公钥认证登录,同时其它认证办法全副被禁止。#这个值罕用于做近程备份之类的事件。PermitRootLogin yes  可用值如下:"yes"(默认) 示意容许。#指定是否要求 sshd(8) 在承受连贯申请前对用户主目录和相干的配
#置文件 进行宿主和权限查看。强烈建议应用默认值 "yes" 来预防可能呈现的低级谬误。StrictModes yes

#是否容许应用纯 RSA 公钥认证。仅用于 SSH-1。默认值是 "yes"。RSAAuthentication yes

#是否容许公钥认证。仅能够用于 SSH-2。默认值为 "yes"。PubkeyAuthentication yes

#是否勾销应用 ~/.ssh/.rhosts 来做为认证。举荐设为 yes。IgnoreRhosts yes

#这个选项是专门给 version 1 用的,应用 rhosts 档案在 /etc/hosts.equiv 配合 RSA 演算形式来进行认证!举荐 no。RhostsRSAAuthentication no

#这个与下面的我的项目相似,不过是给 version 2 应用的
HostbasedAuthentication no

#是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中疏忽用户的 ~/.ssh/known_hosts 文件。默认值是 "no"。为了进步安全性,能够设为 "yes"。IgnoreUserKnownHosts no

#是否容许明码为空的用户近程登录。默认为 "no"。PermitEmptyPasswords no

#是否容许质疑 - 应答 (challenge-response) 认         
#证。默认值是 "yes",所有 login.conf 中容许的认证形式都被反对。ChallengeResponseAuthentication no

# 是否容许应用基于明码的认证。默认为 "yes"。PasswordAuthentication yes

#是否要求用户为 PasswordAuthentication 提供的明码必须通 过 Kerberos KDC 认证,也就是是否应用 Kerberos 认证。应用 Kerberos 认证,服务器须要一个能够校验 KDC identity 的 Kerberos servtab。默认值是 "no"。KerberosAuthentication no

#如果应用了 AFS 并且该用户有一个 Kerberos 5 TGT,那么开启该指令后, 将会在拜访用户的家目录前尝试获取一个 AFS  token。默认为 "no"。KerberosGetAFSToken no  

#如果 Kerberos 明码认证失败,那么该明码还将要通过其它的 认证机制(比方 /etc/passwd)。默认值为 "yes"。KerberosOrLocalPasswd yes

#是否在用户退出登录后主动销毁用户的 ticket。默认 "yes"
KerberosTicketCleanup yes

#是否容许应用基于 GSSAPI 的用户认证。默认值为 "no"。仅用 于 SSH-2
GSSAPIAuthentication no。#是否在用户退出登录后主动销毁用户凭证缓存。默认值是 "yes"。仅用于 SSH-2。GSSAPICleanupCredentials yes

#是否容许进行 X11 转发。默认值是 "no",设为 "yes" 示意容许。如果
#容许 X11 转发并且 sshd 代理的显示区被配置为在含有通配符的地址 (X11UseLocalhost) 上监听。#那么将可能有额定的信息被透露。因为应用 X11 转发的可能带来的危险,此指令默认值为 "no"。需
#要留神的是,禁止 X11 转发并不能禁止用户转发 X11 通信,因为用户能够装置他们本人的转发器。如
#果启用了 UseLogin,那么 X11 转发将被主动禁止。X11Forwarding no

#指定 X11 转发的第一个可用的显示区 (display) 数字。默认值是 10。这个能够用于避免 sshd 占用了实在的 X11 服务器显示区,从而产生混同。X11DisplayOffset 10

#登陆信息显示例如上次登入的工夫、地点等等,预设是 yes,然而,如果为了平安,能够思考改为 no!PrintMotd no

#指定是否显示最初一位用户的登录工夫。默认值是 "yes"
PrintLastLog yes

#指定零碎是否向客户端发送 TCP keepalive 音讯。默认值是 "yes" 这种音讯能够检测到死连贯、连贯不当敞开、客户端解体等异样。能够设为 "no" 敞开这个个性。TCPKeepAlive yes

#是否在交互式会话的登录过程中应用 login。默认值是 "no"。# 如果开启此指令,那么 X11Forwarding 将会被禁止,因为 login 不晓得如何解决 xauth 
#cookies。须要留神的是,login 是禁止用于近程执行命令的。如果指定了 
#UsePrivilegeSeparation,那么它将在认证实现后被禁用。UseLogin no

#最大容许放弃多少个未认证的连贯。默认值是 10。达到限度后,# 将不再承受新连贯,除非先前的连贯认证胜利或超出 LoginGraceTime 的限度。MaxStartups 10

#指定每个连贯最大容许的认证次数。默认值是 6。如果失败认证的次数超过这个数值的一半,连贯将被强制断开,且会生成额定的失败日志音讯。MaxAuthTries 6

#指定是否应该对近程主机名进行反向解析,以查看此主机名是否与其 IP 地址实在对应。UseDNS no

#将这个指令指定的文件中的内容在用户进行认证前显示给近程用户。这个个性仅能用于 SSH-2,默认什么内容也不显示。"none" 示意禁用这个个性。Banner /etc/issue.net   
Subsystem sftp /usr/lib/openssh/sftp-server   

#配置一个内部子系统(例如,一个文件
#传输守   护过程)。仅用于 SSH- 2 协定。值是一个子系统的名字和对应的命令行(含选项和参数)。#是否应用 PAM 模块认证
UsePAM yes

过程

#centso
#编辑 ssh 配置文件
vim /etc/ssh/sshd_config

#RedHat- 还须要
#没有装置的话须要先装置
yum install policycoreutils-python
# 增加端口
semanage port -a -t ssh_port_t -p tcp 10254
# 验证是否增加胜利
semanage port -l | grep ssh 

#Debian 系的零碎中间接批改端口就可
# 批改端口
    Port 10254
#SSH2 协定要比 SSH1 平安, 如果没有就开端增加, 近程连贯(须要 ssh -2 username@ip)
    Protocol 2
#超时断开
    # 以秒为单位,超过 60s 未操作主动断开
        ClientAliveInterval 60
    # 如果客户端没有响应则判断一次超时,该参数设置容许超时的次数
        ClientAliveCountMax 0
#禁止 root 用户
    PermitRootLogin no
#指定用户登陆
    AllowUsers uesr
#禁用特定用户登录
    DenyUser testuser
#是否容许 (空明码) 登陆
    PermitEmptyPasswords no
#是否运行明码的登陆形式, 设置为 no, 须要公钥密钥
    PasswordAuthentication no
#最大谬误次数, 默认最多容许 3 次明码谬误 (须要除 2) 批改为 2 则示意若明码输出谬误一次即断开。MaxAuthTries 6
#被动断散会话(秒 / 分钟)-LoginGraceTime 2m/2s
    LoginGraceTime 120
#具体日志
    LogLevel VERBOSE

小贴士:

# 同权限账号
useradd aa
passwd aa
vim /etc/sudoers

# 重启服务
systemctl restart sshd

密钥对

生成密钥对

下面曾经设置了不能应用明码登录,那么,换句话说须要应用密钥登录,生成密钥并不难:

ssh-keygen -t rsa

只须要指定算法即可,默认为 3072 位,可选 4096 位。

然而,相比起传统的 RSA,在OpenSSH 6.5 中引入了另一种叫 Ed25519 的更加平安的算法,应用椭圆曲线进行加密。Ed25519相比起 RSA 的长处有:

  • 体积更小:相比起 RSA 3072544个字符,Ed25519只有 68 个字符
  • 更快:生成速度比 RSA 快,同时签名速度也比 RSA
  • 更平安:签名过程不依赖随机数生成器,不依赖哈希函数的防碰撞个性,没有工夫通道攻打的问题

生成形式很简略:

ssh-keygen -a 1024 -t ed25519 -f ~/.ssh/ed25519

参数阐明如下:

  • -a:指定KDFKey Derivation Function)的轮数
  • -t:指定算法,可选dsaecdsaecdsa-sked25519ed25519-skrsa
  • -f:指定地位

生成之后复制公钥即可:

ssh-copy-id -i ~/.ssh/ed25519.pub user@ip

私钥明码

比方按上述形式生成密钥对时,会提醒输出私钥明码:

这里的明码会在应用私钥连贯的时候提醒:

配合ssh-add

默认状况下每次应用私钥登录的时候都须要输出私钥的明码,如果不想每次输入,能够应用ssh-add

ssh-add ~/.ssh/test # ~/.ssh/test 替换成对应的私钥门路

这样只须要输出一次私钥明码,下一次连贯的时候就不须要输出私钥明码连贯了。

应用不同密钥对

假如您有多台服务器:server1server2server3,则能够为不同服务器应用不同的密钥对,而不是应用同一个密钥对:

ssh-keygen -a 1024 -t ed25519 -f ~/.ssh/server1
ssh-keygen -a 1024 -t ed25519 -f ~/.ssh/server2
ssh-keygen -a 1024 -t ed25519 -f ~/.ssh/server3

接着复制公钥到对应的服务器上:

ssh-copy-id user@server1 -i ~/.ssh/server1.pub
ssh-copy-id user@server2 -i ~/.ssh/server2.pub
ssh-copy-id user@server3 -i ~/.ssh/server3.pub

ssh-agent

这是什么?

ssh-agent是一个程序,能够帮忙治理私钥。代理能提供如下用处:

  • 主动抉择密钥:应用不同密钥连贯到不同主机时,须要手动指定密钥(比方下面的 应用不同密钥对 的例子中,连贯到不同服务器时须要加上 -i 参数),ssh-agent能够主动抉择,不须要手动指定
  • 主动输出私钥明码:如果私钥设置了密钥(比方下面的 私钥明码 例子),然而又须要频繁地应用私钥进行认证时,ssh-agent能够帮忙主动输出私钥的明码

应用

首先启动:

eval `ssh-agent` # 留神是反引号

接着增加私钥:

# 以下面“应用不同的密钥对”为例
ssh-add ~/.ssh/server1
ssh-add ~/.ssh/server1
ssh-add ~/.ssh/server1

这样连贯的时候就不须要手动指定 -i 参数了。

如果私钥指定了明码,会在 ssh-add 时进行提醒输出:

这样下次应用带密钥的私钥连贯时就不须要输出明码了。

二次认证

Two-Factor Authentication,缩写 2FA,意为 双重认证 双因子认证 等等,顾名思义就是进行两步认证的操作,可选的利用有:

  • Google Authenticator
  • Authy
  • Yubico
  • Duo

比方Google Authenticator,装置之后,连贯服务器须要进行输出验证码的操作。

具体的话就不演示了,因为笔者须要常常连贯,因而这个选项对笔者来说不太理论,想要实现的话具体能够参考这里。

(2FA)

双重认证(英语:Two-factor authentication,缩写为 2FA),又译为双重验证、双因子认证、双因素认证、二元认证,又称两步骤验证(2-Step Verification,又译两步验证),是一种认证办法,应用两种不同的元素,合并在一起,来确认用户的身份,是多因素验证中的一个特例。

案例

密钥对登陆

Xshell 配置密钥公钥 (Public key) 与私钥 (Private Key) 登录

ssh 登录提供两种认证形式:口令 (明码) 认证形式和密钥认证形式。其中口令 (明码) 认证形式是咱们最罕用的一种,这里介绍密钥认证形式登录到 linux/unix 的办法。

应用密钥登录分为 3 步:
1、生成密钥(公钥与私钥);
2、搁置公钥 (Public Key) 到服务器~/.ssh/authorized_key 文件中;
3、配置 ssh 客户端应用密钥登录。

一、生成密钥公钥(Public key)与私钥(Private Key)

关上 Xshell,在菜单栏点击“tools”,在弹出的菜单中选择“User Key Generation Wizard…”(密钥生成向导),如下图:

弹出“User Key Generation Wizard”对话框,在“Key Type”项抉择“RSA”公钥加密算法,“Key Length”抉择为“2048”位密钥长度,如下图:

点击“Next”,期待密钥生成:

持续下一步,在“Key Name”中输出 Key 的文件名称,我这里为“key”;在“Passphrase”处输出一个明码用于加密私钥(明码任意输出),并再次输出明码确认,如下图:

点击“Next”,密钥生成结束(Public key Format 抉择 SSH2-OpenSSH 格局),这里显示的是公钥,咱们能够复制公钥而后再保留,也能够间接保留公钥到文件,如下图。私钥这里不显示,能够在“User Key Mangager…”导出到文件:

点击“Save as file…”按钮,将公钥 (Public key) 保留到磁盘,文件名为“key.pub”,备用。

二、上传公钥 (Public Key) 到服务器:

应用到 Xshell 登录到服务器,进入到“/root/.ssh/”目录,运行 rz 命令 (如果没有 rz 命令,运行 yum install lrzsz 装置),将 key.pub 发送到服务器,而后运行如下命令,将公钥(Public Key) 导入到“authorized_keys”文件:

# 上传公钥并且写入
 cat key.pub >> authorized_keys
 #赋权限
 chmod 600 authorized_keys
三、配置 Xshell 应用密钥认证形式登录到服务器:

关上 Xshell,点击“New”按钮,弹出“New Session Properties”对话框,在“Connection”栏目中,输出刚刚配置好公钥 (Public Key) 的 IP 地址和端口,如下图所示:

正文完
 0