Skip to content

harden server limit ssh

DreamAndDead edited this page Aug 22, 2017 · 4 revisions

限制ssh

几乎每台服务上都会运行sshd服务。作为每天80%时间都在使用的工具,更需要重视起来

公钥认证取代密码认证

step 1 添加公钥到服务器

参考这里: why ssh key authentication is better

通常我们在使用ssh远程连接服务器特定用户的时候,都要输入远程帐户的密码完成认证。多次输入密码是一个 乏味的工作,而且一般大家为了简便,并不会使用复杂的强度高的密码。虽然ssh已经非常安全,但是使用单向的 密码认证,如果密码被泄露,其它人也就可以连接并控制服务器。

这里我们推荐使用公钥认证的方式,具体的原理就是

将自己的公钥放入服务器端相应帐户的authorized_keys中

做法

ssh-copy-id -i <id_rsa.pub path> <user>@<server.com>
  • id_rsa.pub path: 通常是~/.ssh/id_rsa.pub
  • user: 服务器帐户
  • server.com: 服务器地址

这样每次我们连接服务器,都会得到服务器的认可,不再需要输入密码来认证,方便且更安全

step 2 使用passphase保密私钥

step 1已经是一个不错的改进,使用密码认证时,谁拥有密码就可以登陆;使用认证时,谁使用了你的电脑/拥有你的私钥 才可以登陆。

不乏有这样的情况,如果有人趁你不在操纵你的电脑,或者你的电脑被入侵密钥被他人发现,未知的人就可以随意连接服务器。danger!

措施,参考这里: passphase for rsa key

在使用ssh-keygen生成密钥对的时候,填写passphase字段。即使私钥被泄露,缺少passphase,攻击者
仍不可使用私钥连接服务器

做法

ssh-keygen -t rsa
  • passphase字段一定要填写

这样每次使用公钥认证连接服务器时,都需要passphase来确认连接(和以前输入服务器帐户密码相对比)

step 3 (optional) 不输入passphase来连接服务器

避免了每次输入服务器帐户密码来连接,但是使用了passphase来加密私钥,每次连接都需要输入passphase也 是一件乏味的事情。

ssh为我们提供了ssh-agent, ssh-add工具来避免乏味的工作

做法

启动ssh-agent

ssh-agent

将自己的私钥加入agent托管(需要输入passphase)

ssh-add

只需要在ssh-add的时候输入一次passphase,在之后每次连接服务器,都不需要再输入passphase。wonderful!

记得在操作结束之后,删除私钥托管并退出ssh-agent

ssh-add -D
ssh-agent -k

禁止密码登陆

密码认证相对于公钥认证是不够安全的。我们可以在服务器端禁止所有密码认证的连接

修改配置文件

vi /etc/ssh/sshd_config

修改内容

PasswordAuthentication no

使用SSH-2版本协议

SSH历史上有SSH-1, SSH-2两个版本,SSH-1版本是不够安全的。强制使用SSH-2协议

修改配置文件

vi /etc/ssh/sshd_config

修改内容

Protocol 2

使用常规用户登陆(非root)

在公钥加密连接情况下,强制使用常规用户登陆好像不是那么必要

step 1 禁止root

修改配置文件

vi /etc/ssh/sshd_config

修改内容

PermitRootLogin no
DenyUsers root

step 2 新建用户

新建用户并设置密码

useradd -s /bin/bash <user>
passwd <user>

step 3 sudo权限

建议不给sudo权限,一般普通用户的密码都相对简单随便,加上sudo就不合适了

连接登陆ssh后用su切换root来进行操作,保密root密码

step 4 测试普通用户进行ssh连接

Clone this wiki locally