个人工具

“OpenSSH高级教程”的版本间的差异

来自Ubuntu中文

跳转至: 导航, 搜索
(有的地方把配置文件中的指令都翻译了。这OpenSSH可不懂中文写的配置文件。)
允许和拒绝用户和用户组
 
(未显示16个用户的63个中间版本)
第1行: 第1行:
== OpenSSH 高级教程 ==
+
= '''OpenSSH 高级教程'''  =
  
原文出处:官方Wiki
+
原文出处:官方Wiki-[https://help.ubuntu.com/community/AdvancedOpenSSH AdvancedOpenSSH] (已经失效)
  
原文作者:
+
原文作者:  
  
授权许可:
+
授权许可:  
  
* [http://creativecommons.org/licenses/by-sa/2.0/ 创作共用协议Attribution-ShareAlike 2.0]
+
*[http://creativecommons.org/licenses/by-sa/2.0/ 创作共用协议Attribution-ShareAlike 2.0]  
* [http://www.gnu.org/copyleft/fdl.html GNU自由文档许可证]
+
*[http://www.gnu.org/copyleft/fdl.html GNU自由文档许可证]
  
翻译人员:fiftymetre
+
翻译人员:fiftymetre  
  
校正人员:millenniumdark
+
校正人员:millenniumdark  
  
贡献人员:
+
贡献人员:sighforever lxr1234
  
适用版本:
+
适用版本:  
  
文章状态:等待校正
+
文章状态:原文丢失
  
 
----
 
----
  
译者的话:第一次翻译这英文文章,译的不好的地方也许大家包含,我会努力在下一章中尽我所能的提高翻译质量。翻译这篇文章时,还特意找一了本“SSH权威指南”研究了一下,以前在win下都是用SSH Secure Shell来跟ubuntn来传文件的呵呵。但ubuntu6.06桌面版本默认安装却没有安装SSH。
+
译者的话:第一次翻译这英文文章,译的不好的地方也许大家包含,我会努力在下一章中尽我所能的提高翻译质量。翻译这篇文章时,还特意找一了本“SSH权威指南”研究了一下,以前在win下都是用SSH Secure Shell来跟ubuntn来传文件的呵呵。但ubuntu6.06桌面版本默认安装却没有安装SSH。  
  
 
----
 
----
  
<br>
+
<br>  
  
 +
<br>
  
 +
这翻译。。。非常生硬。我改了几句,发现要改的太多了。只好算了。&nbsp; 有的地方把配置文件中的指令都翻译了。这OpenSSH可不懂中文写的配置文件。&nbsp; -- millenniumdark
  
这翻译。。。非常生硬。我改了几句,发现要改的太多了。只好算了。&nbsp; 有的地方把配置文件中的指令都翻译了。这OpenSSH可不懂中文写的配置文件。&nbsp; -- millenniumdark
+
要改的地方实在太多,正好我这两天在学这个,一点点改吧&nbsp; -- sighforever
  
 +
<br>
  
 +
= '''简介'''  =
  
=== 介绍 ===
+
这篇指南在Ubuntu OpenSSH的默认配置基础上,着重介绍了能够大幅增加安全性的高级配置技巧。它详细论述了两方面内容:
 
+
#服务器端的特定配置方式;
介绍 这篇指南由浅入深的介绍属于标准Ubuntu OpenSSH服务的默认配置和高级设置。这篇文章将详细论述服务器端配置指导,并解释了利用Rivest Shamir Adleman (RSA) 算法(注1)生成密钥登陆 OpenSSH 服务器与明文密码的区别.附加的资源为OpenSSH 索引在指南部分。
+
#通过与明文密码相比较,阐述了利用Rivest Shamir Adleman (RSA) 算法(注1)生成密钥登陆 OpenSSH 服务器的过程。<br>
  
 
<br>
 
<br>
  
=== 面向读者 ===
+
= '''目标读者'''  =
  
适当的设定这篇文章里的参数 ,读者应该是一个善于使用命令行程序的Ubuntu用户,使用bash环境,并在基于控制台的文本编辑器程序里把系统配置文件编辑成他们的首选设置,另 外,读者应该知道如何启动和关闭系统,并且基本的了解OpenSSH 程序包的安装,及其目的。
+
为了能够更好的使用本教程 ,读者应该是一个善于使用命令行程序的Ubuntu用户,能够使用bash环境,并能够在基于控制台的文本编辑器中编辑系统配置文件。另外,读者应该知道如何启动和关闭系统守护进程,并且对OpenSSH程序的安装方式和使用目的有一个大致的了解。
  
 
<br>
 
<br>
 
=== 关于 OpenSSH ===
 
 
OpenSSH OpenSSH是一种可以自由获得的安全Shell (SSH)协议族工具用来操作控制电脑,或在电脑之间传送文件。传统的工具要完成这样的功能得使用telnet(终端仿真协议),或极不安全的rcp(注 2),并由此来传送用户的密码口令。OpenSSH 提供一种无交互后台程序服务,和可以容易使用的用户工具,来加密远程控制装置,和传输文件操作,由此来代替原来的类似服务。
 
  
 
<br>
 
<br>
  
=== OpenSSH 服务 (sshd) ===
+
<h1> <b>关于 OpenSSH</b>  </h1>
 +
<p>OpenSSH是安全Shell协议族(SSH)的一个免费版本。SSH协议族可以用来进行远程控件, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议), rcp(注2)都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程的中的数据,并由此来代替原来的类似服务。<br />
 +
</p><p><br />
 +
</p><p><br />
 +
</p>
  
OpenSSH 服务,SSH,是作为代表性地独立守护程序,然而如果愿意的话也可以让该服务成为按需访问的策略(as- needed basis)的网络守护进程,来监视一些网络请求的守护进程(注3),或更进一步的扩展网络守护进程,或同等安全的, xinetd(注 4)。OpenSSH 服务配置经过 file /etc/ssh/sshd_config 目录创建。这部分内容将讨论默认安装配置文件,和告诉他们如 何做某些修改来得到更安全的 sshd。首先来看默认设置(in italics, such as Port 22)的简单说明,根据建议设置 (in bold, such as Protocol 2)介绍来增强安全防护。
+
= '''OpenSSH 服务 (sshd)'''  =
  
给你的OpenSSH 安装中改变 sshd的结构,首先制做备份你的原始 /etc/ssh/sshd_config 文件,在终端shell中输入下列命令:
+
OpenSSH服务,sshd,是一个典型的独立守护进程(standalone daemon),但也可以根据需要通过网络守护进程(Internet Daemon)-inetd(注3)或Ineternet Daemon's more modern-xinted(注4)加载。OpenSSH服务可以通过/etc/ssh/sshd_config文件进行配置。本章将介绍此配置文件中的默认配置,并说明如何修改这些配置来提高sshd的安全性。本章的行文方式为:先使用斜体字简单说明默认设置(如:''Port 22''), 然后在下一行中使用粗体字 (如:'''Protocol 2''')介绍为了增强安全防护而作的修改。
  
<code><nowiki>sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original</nowiki></code>
+
在改变您的sshd配置文件之前,请先备份您的/etc/ssh/sshd_config文件,在终端(shell)中输入下列命令:
  
你可以随意的选择保存原始文件的存取模式 使用下列命令:
+
<code><nowiki>sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original</nowiki></code>
  
<code><nowiki>sudo chmod a-w /etc/ssh/sshd_config.original</nowiki></code>
+
如果这个文件不存在,证明您还没有安装OpenSSH,请通过软件仓库安装OpenSSH-server程序。注
 +
意,在/etc/ssh/文件夹下
 +
还有一个ssh_conf文件,它是SSH客户端的配置文件,在此请不要修改它。
  
以这样备份配置文件的方式被认为是最好的练习管理你的Ubuntu GNU/Linux system的方法。如果因为一些原因你需要恢复到原始 的配置,你可以很方便的,并且无论何时你造成一个错误,或执行了无法返回的错配置应用程序,你将总是可以返回到你的原始文件,以提供你在返回它(原始配置 文件)之前已经向后支持它。
+
如果您愿意,您可以使用下面的命令保护您的配置文件不会被意外的修改。
  
现在你已经保存了原始的 /etc/ssh/sshd_config 文件,你可以修改或替换文件的默认值和设定,和建议设定。在你改变任何设定到产生任何结果,你必须保存 /etc/ssh/sshd_config 文件,和重新启动 sshd 使用下命令:
+
<code><nowiki>sudo chmod a-w /etc/ssh/sshd_config.original</nowiki></code>
  
<code><nowiki>sudo /etc/init.d/ssh restart</nowiki></code>
+
以这种方式备份配置文件是管理您的Ubuntu GNU/Linux系统的最好方法。如果当您需要将应用程序恢复到默认配置或者当您因为操作失误或配置文件修改错误而导致应用程序不能运行的时候,您可以很方便的进行操作。
  
<code><nowiki></nowiki></code>
+
如果您已经保存好了您的/etc/ssh/sshd_config文件,你就可以放心的实验本教程中所提到的配置方法了。当您修改完配置文件后,您必须保存/etc/ssh/sshd_config文件,并使用下面的命令重新启动sshd,才能使更改结果起作用:
  
==== 建议 OpenSSH 服务设定 ====
+
<code><nowiki>sudo /etc/init.d/ssh restart</nowiki></code>
  
Ubuntu的OpenSSH的实现使用的默认 /etc/ssh/sshd_config 配置文件比其他GNU linux发行版还要更安全。但是还可以进一步提高现有的安全程度,而且那些建议在这里实被提到。在特别情况下一些变化对你可能是不适当的。使用提供的设 置来做出最有利的安全性抉择,还有你环境的可用性。
+
<code><nowiki></nowiki></code>
  
===== 登录 =====
+
== OpenSSH服务的建议设定  ==
  
{| cellspacing="0" border="1"
+
Ubuntu中,OpenSSH的默认配置要比其他GNU linux发行版中的配置更为安全,但是,如果按照本章讲解的方式进行配置,其安全程度还可以进一步提高。但是在一些特殊条件下,本文中的配置可能不适合您的环境要求,这时,您就要权衡环境需求与安全性要求,做出折中的配置。<br>  
|-
+
| ''<code><nowiki></nowiki></code>'' ''<tt>LogLevel&nbsp;INFO</tt>''
+
|}
+
  
默认设定允许 sshd 记录 AUTH 设备的syslog(系统日志),在信息级别。如果使用默认设置的 ssh 远程访问你的Ubuntu电脑,你应该考虑直接抛出LogLevel的日志详细级别给VERBOSE,因为这样你可以获得详细的关于所有企图和成功ssh登记。
+
=== 登录  ===
  
<br>
+
<code><nowiki>LogLevel INFO</nowiki></code>
  
{| cellspacing="0" border="1"
+
在默认的设置下,sshd的登录日志以INFO级别写入AUTH系统日志设备(SyslogFacility)。如果ssh作为你远程控制Ubuntu主机的主要方式,您应该考虑将日志级别由INFO提升为VERBOSE。这样,在日志中将会记录更多有关登录成功和登录失败的信息。
|-
+
| '''<tt>LogLevel&nbsp;VERBOSE</tt>'''
+
|}
+
  
<br> 现在所有ssh 登记程序详情,和可能的登录程序将记录在你的AUTH上下文中/var/log/auth.log logfile 详细方式。
+
<br>  
  
===== 验证 =====
+
<code><nowiki>LogLevel VERBOSE</nowiki></code>
  
{| cellspacing="0" border="1"
+
<br> 这样,所有ssh登录成功信息,和未成功登录的信息都以VERBOSE的日志级别记录在你的AUTH文件中(/var/log/auth.log)。
|-
+
| ''<code><nowiki>LoginGraceTime 120</nowiki></code>''
+
|}
+
  
默认设定,Ubuntu's的OpenSSH 服务配置从登录提示被显示的时间起到120 秒 (二分钟),直到在连接被 sshd 结束之前,用户必须开始登录过程。这个行为受登录时间指令的约束。
+
=== 验证  ===
  
<br>
+
<code><nowiki>LoginGraceTime 120</nowiki></code>
  
{| cellspacing="0" border="1"
+
默认设置下,通过sshd登录Ubuntu后,必须在出现操作提示符的120秒(2分钟)内登录系统,不然sshd将会自动切断与主机的连接。这个时间值可以通过LoginGraceTime进行设置
|-
+
| '''<code><nowiki>LoginGraceTime 20</nowiki></code>'''
+
|}
+
  
<br> 在断开远程访问实用程序这前sshd服务将只为用户提供20秒等待。这可以有助于自动化阻遏,或者暴力攻击ssh,和拒绝服务式攻击(Dos)。
+
<br>  
  
LoginGraceTime
+
<code><nowiki>LoginGraceTime 20</nowiki></code>
  
{| cellspacing="0" border="1"
+
将LoginGraceTime设置为20秒。可以有效的防御自动化阻遏(thwarting automated),暴力攻击ssh,和拒绝服务式攻击(DDOS)。
|-
+
| ''<code><nowiki>X11Forwarding yes</nowiki></code>''
+
|}
+
  
<br> 如果计算机提供传统服务,(E-Mail服务或Web服务),而且没有在以任何的形式 (像是 LTSP) 提供 X11 服务,那时X11数据封装将失去修改X11Forwarding指令到去除潜在的攻击向量,特别是连接到 ssh 用户。
+
<br>  
 +
'<code><nowiki>X11Forwarding yes</nowiki></code>
 +
<br>如果你不希望有人能够通过ssh使用图形用户界面的程序(这些程序通过SSH通道-SSH tunnel显示),你可以通过X11Forwarding指令将其关闭,由此来减少很多攻击的可能。<br>
  
<br>
 
  
{| cellspacing="0" border="1"
+
<code><nowiki>X11Forwarding no</nowiki></code>
|-
+
<br> 现在,sshd的X11 forwarding功能被关闭了。
| '''<code><nowiki>X11Forwarding no</nowiki></code>'''
+
|}
+
  
<br> 现在X11 forwarding将无法有效的来自你的 sshd。
+
<br>  
  
<br>
+
https://help.ubuntu.com/community/IconsPage?action=AttachFile&amp;do=get&amp;target=IconWarning3.png '''警告''': 我们并不推荐关闭X11 forwarding,如果某个服务是基于使用X11或LTSP的,将X11 Forwarding关闭将导致此服务不可用。
  
https://help.ubuntu.com/community/IconsPage?action=AttachFile&amp;do=get&amp;target=IconWarning3.png '''警告''': 如果服务是基于使用X11服务的,或来自LTSP,那时X11 Forwarding将关闭,或者你将失去对此能力的支持!
+
<br>
 +
'<code><nowiki>#Banner /etc/issue.net</nowiki></code>
  
<br>
+
<br> 显示一个不欢迎的警示条,或更好的方法对于安全是件好事。它将告知好奇的人,或者未经许可的恶意登录到你的OpenSSH服务器的人,远程访问你的计算机是必须经过许可,并且需要用户授权。
  
{| cellspacing="0" border="1"
+
<br>  
|-
+
| ''<code><nowiki>#Banner /etc/issue.net</nowiki></code>''
+
|}
+
  
<br> 显示一个不欢迎的警示条,或更好的方法对于安全是件好事。它告知好奇的人,或者故意的未经许可的访客到你的OpenSSH服务器,因为远程访问你的计算机是需要经过许可的,并且需要用户授权。
+
有一个的不欢迎警示条目可以帮你成功起诉攻击者,或别的组织未经许可的尝试经由ssh访问你的服务器。
  
<br>
+
<br>  
  
有一个预登陆的条目可以对你成功防范一个攻击者有很大的帮助,或别的组织未经许可的尝试经由ssh访问你的服务器。
+
'<code><nowiki>Banner /etc/issue.net</nowiki></code>
 +
<br> 现在,/etc/ssh/sshd_config中的警示条已经被激活。您可以使用下列的流程创建警句条的实际实际内容。在这里我们给出了一个例子:
  
<br>
+
使用sudo启动你喜欢的文本编辑软件,创建文件/etc/issue,并把下面的文字拷入此文件作为警示条的内容:
 
+
{| cellspacing="0" border="1"
+
|-
+
| '''<code><nowiki>Banner /etc/issue.net</nowiki></code>'''
+
|}
+
 
+
<br> 现在激活那个显示条目 /etc/ssh/sshd_config,使用下列的程序和例子内容来创建实际的条目文件:
+
 
+
使用sudo,和你喜欢的编辑软件,创建文件 /etc/issue,并把下面的文字写在里面作为预登陆告警条的起点:
+
 
<pre>***************************************************************************
 
<pre>***************************************************************************
 
NOTICE TO USERS
 
NOTICE TO USERS
第178行: 第158行:
 
****************************************************************************
 
****************************************************************************
 
</pre>  
 
</pre>  
<code><nowiki>保存文件,并且创建一个符号连结到 /etc/issue.net 文件使用下列命令:</nowiki></code>
+
<code><nowiki>保存文件,并且使用下列命令创建一个到 /etc/issue.net的符号连结:</nowiki></code>  
  
<code><nowiki>sudo ln -s /etc/issue /etc/issue.net</nowiki></code>
+
<code><nowiki>sudo ln -s /etc/issue /etc/issue.net</nowiki></code>  
  
<code><nowiki></nowiki></code>
+
<code><nowiki></nowiki></code>  
  
一旦重新启动sshd,所有的登陆尝试都会遇到上面的警告,并且有登陆提示符在这后面,所有的非授权访问者将受到一个清晰的消息"你的电脑只能通过授权才 能使用,不欢迎非授权使用,上面的警告条是丛US DEPARTMENT OF DEFENCE 的警告条的修改版本生成的,对于专业使用是足够合适的,可能对于个人用户就更加合适了。
+
重新启动sshd后,任何用户想要登陆时都会在登陆提示符前看到上面的信息。所有的非授权访问者将受到一个明确的消息"你的电脑只能通过授权才能使用,不欢迎非授权用户使用。上面例子中的警告条是根据美国国防部(US DEPARTMENT OF DEFENCE)的警告条的修改而成的,完全适合专业用户使用,而且更适合个人用户。
  
做为旁边注解,所有本地控制台应用程序也同样显示来自 /etc/issue 文件的信息,甚至在物理层使用这台电脑的人也会收到这样的警告。如果这不是你想要的行为,然后把条目的内容放在 /etc/issue文件中,而不是做一个到/etc.issue的一个符号联接,/etc/issue中没有任何文本。由于没有文字在 /etc/issue,警告将只出现在那些尝试访问系统的人的面前。
+
另外,当您作了此设定时,本地控制台的登录会同样显示来自/etc/issue文件的信息,也就是说坐到您电脑前使用你电脑的人也会收到同样的警告信息。如果你不想这样,请删除由符号链接生成的issue.net文件,然后新建一个/etc/issue.net文件并将警示信息写入到这个文件中,并且将/etc/issue清空。/etc/issue没有警示信息,警告将只显示给那些远程访问系统的人。
  
=== 额外配置技巧 ===
+
= '''进一步的配置技巧'''  =
  
下面的内容是一些额外的暗示和一些配置一个更加安全的openssh安装的技巧,这些技巧利用一些不包含在默认的ubuntussh配置文件中的指令,并且提出其他加强你的ssh安装安全的方法。
+
下面的内容是一些额外的暗示和一些配置一个更加安全的openssh安装的技巧,这些技巧利用一些不包含在默认的ubuntussh配置文件中的指令,并且提出其他加强你的ssh安装安全的方法。  
  
==== 允许和拒绝用户和用户组 ====
+
==== 允许和拒绝用户和用户组 ====
  
在配置文件中你可以使用一些指令来允许或者拒绝一些特定用户或者用户组用ssh登陆.这个方法更加细致的控制哪些人可以通过ssh来进入你的Ubuntu电脑。
+
在配置文件中你可以使用一些指令来允许或者拒绝一些特定用户或者用户组用ssh登陆.这个方法更加细致的控制哪些人可以通过ssh来进入你的Ubuntu电脑。  
  
例如,如果你想只允许jhendrix和svaughan通过ssh登陆,你可以向这样在你的/etc/ssh中使用allowusers指令。
+
例如,如果你想'''只允许'''jhendrix和svaughan通过ssh登陆,你可以向这样在你的/etc/ssh中使用allowusers指令。  
  
<br>
+
<br>  
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
 
|-
 
|-
| '''<tt>AllowUsers</tt>'''''' jhendrix svaughan'''
+
| '''AllowUsers''' jhendrix svaughan
 
|}
 
|}
  
<br> 如果你不想让所有用户能过 ssh 登陆,除了使用者 wgates,或sballmer然后你可以使用DenyUsers命令添加到/etc/ssh/sshd_config中,像这样:
+
<br> 如果你想让所有用户都能通过 ssh 登陆,'''除了'''使用者 wgates,或sballmer然后你可以使用DenyUsers命令添加到/etc/ssh/sshd_config中,像这样:  
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
 
|-
 
|-
| '''<tt>DenyUsers</tt>''''''wgates sballmer'''
+
| '''DenyUsers''' wgates sballmer
 
|}
 
|}
  
<br> 最后,再看一个例子,你可以这样配置你的OpenSSH服务,只有用户属于系统组才允许通过ssh 登录。在这个例子中,我们将执行一些必要手段只允许SSH的用户都是小组成员sshlogin。 sudo addgroup --gid 450 sshlogin sudo adduser &lt;username&gt; sshlogin。
+
<br> 最后,再看一个例子,你可以这样配置你的OpenSSH服务,只有用户属于系统组才允许通过ssh 登录。在这个例子中,我们将执行一些必要手段只允许SSH的用户都是小组成员sshlogin。  
  
<code><nowiki>sudo addgroup --gid 450 sshlogin</nowiki></code>
+
<code><nowiki>sudo addgroup --gid 450 sshlogin</nowiki></code>  
  
<code><nowiki>sudo adduser &lt;username&gt; sshlogin</nowiki></code>
+
<code><nowiki>sudo adduser <username> sshlogin</nowiki></code>  
  
<code><nowiki></nowiki></code>
+
<code><nowiki></nowiki></code>  
  
在以上的例子中是用'&lt;username&gt;'代替你的用户名加入到sshlogin系统组。最后,编辑你的 /etc/ssh/sshd_config,并增添allowgroups指令:
+
在以上的例子中是用'&lt;username&gt;'代替你的用户名加入到sshlogin系统组。最后,编辑你的 /etc/ssh/sshd_config,并增添allowgroups指令:  
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第229行: 第209行:
 
<br> 重新启动 sshd,并且只有属于sshlogin组的用户才可以通过ssh 登录到你的Ubuntu计算机。
 
<br> 重新启动 sshd,并且只有属于sshlogin组的用户才可以通过ssh 登录到你的Ubuntu计算机。
  
==== 启动 sshd来监听不同的端口 ====
+
==== 启动 sshd来监听不同的端口 ====
  
由于近来自动扫描ssh和暴力攻击工具的大量增长,很多装有ssh的用户和管理员决定给ssh用一个非标准的tcp端口,标准的sshd侦听端口是 tcp/22,并且暴力扫描攻击工具都典型的被配置成侦听这个端口用来查找后门。
+
由于近来自动扫描ssh和暴力攻击工具的大量增长,很多装有ssh的用户和管理员决定给ssh用一个非标准的tcp端口,标准的sshd侦听端口是 tcp/22,并且暴力扫描攻击工具都典型的被配置成侦听这个端口用来查找后门。  
  
尽管从使用简单密码的ssh登陆切换到使用基于键盘方式的登陆,就象在指南中下部分我们要讨论的显著减少了自动工具猜测出一个正确的在你的系统的登陆的机会,一些人觉得加入更多偏僻字的层数可能更会增强安全性。
+
从使用简单密码的ssh登陆切换到使用基于键盘方式的登陆,显著减少了自动工具猜测出一个正确的密码的机会,一些人觉得加入更多偏僻字的办法可能更会增强安全性。
  
如果你曾考虑过在非标准端口上运行的你的sshd分支,例如一个常量需要使用-p或者-P来切换不同的ssh工具,或者通过修改配置文件这种更长久的方式来检验端口改变的正确,并且接受那些协议,然后改变侦听端口是十分琐碎的。
+
如果你曾考虑过在非标准端口上运行的你的sshd分支,例如一个常量需要使用-p或者-P来切换不同的ssh工具,或者通过修改配置文件这种更长久的方式来检验端口改变的正确,并且接受那些协议,然后改变侦听端口是十分琐碎的。  
  
仅仅增加一个或更多的端口在你的 /etc/ssh/sshd_config 文件中,因此:
+
仅仅增加一个或更多的端口在你的 /etc/ssh/sshd_config 文件中,因此:  
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第244行: 第224行:
 
|}
 
|}
  
<br>
+
<br>  
 
+
<br>
+
 
+
<br>
+
 
+
如果你希望侦听tcp/22,和tcp/2222端口,例如,局域网连接使用传统方式,但外部连接使用tcp/2222端口。要完成这些,不需要在你的路由器配置网络地址翻译规则或者类似的东西,只要增加这2条指令到 /etc/ssh/sshd_cfig:&nbsp; <br><br>
+
  
 +
<br>
  
 +
<br>
  
 +
如果你希望侦听tcp/22,和tcp/2222端口,例如,局域网连接使用传统方式,但外部连接使用tcp/2222端口。要完成这些,不需要在你的路由器配置网络地址翻译规则或者类似的东西,只要增加这2条指令到 /etc/ssh/sshd_cfig:&nbsp; <br><br>
  
 +
<br>
  
 +
<br>
  
 +
<br>
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第265行: 第245行:
 
|}
 
|}
  
<br> 不要忘记保存文件,和重新启动你的sshd指令:
+
<br> 不要忘记保存文件,和重新启动你的sshd指令:  
  
<code><nowiki>sudo /etc/init.d/ssh restart</nowiki></code>
+
<code><nowiki>sudo /etc/init.d/ssh restart</nowiki></code>  
  
 
使改变生效。
 
使改变生效。
  
=== 基于RSA key登陆 ===
+
= '''基于RSA key登陆'''  =
  
基于key的授权是可用的ssh授权方法中的一种,因此简单的密码(Ubuntu默认密码)和Kerberos标签。基于Key的验证的几个优点比密码验证更好,至于例子这个key的值就十分明显的很难被暴力破解,或以大量的关键字为条件来猜测弱密码。
+
基于key的授权是可用的ssh授权方法中的一种,因此简单的密码(Ubuntu默认密码)和Kerberos标签。基于Key的验证的几个优点比密码验证更好,至于例子这个key的值就十分明显的很难被暴力破解,或以大量的关键字为条件来猜测弱密码。  
  
数字键也是如此,是对极其相似事物的一个比方,所以可以在可能出现弱密码的地方显示密码安全的程度。使用基于Key登录的ssh 是比使用弱密码的登录,普遍认为更安全的。
+
数字键也是如此,是对极其相似事物的一个比方,所以可以在可能出现弱密码的地方显示密码安全的程度。使用基于Key登录的ssh 是比使用弱密码的登录,普遍认为更安全的。  
 +
[[File:
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&amp;do=get&amp;target=IconNote.png]] ''注解''''':''' ''同时生成一套能够使用openssh的RSA key而不需要密码是可能的,简单讲,通过ssh登陆不要密码,这个指导书没有描述或者认定这种用法是很不安全的.如果这个缺少密码的key落入其他人手 中,就如你的授权一样,应此所有允许这些key的系统安全都很容易受到威胁,在一些情况下,例如不安全的群环境中,需要有完全没有密码的登陆,但是,这本书没有解释制造这种key的过程。''
  
https://help.ubuntu.com/community/IconsPage?action=AttachFile&amp;do=get&amp;target=IconNote.png ''注解''''':''' ''同时生成一套能够使用openssh的RSA key而不需要密码是可能的,简单讲,通过ssh登陆不要密码,这个指导书没有描述或者认定这种用法是很不安全的.如果这个缺少密码的key落入其他人手 中,就如你的授权一样,应此所有允许这些key的系统安全都很容易受到威胁,在一些情况下,例如不安全的群环境中,需要有完全没有密码的登陆,但是,这本书没有解释制造这种key的过程。''
+
'  
  
''''
+
这部分将说明启动基本Key登录的ssh ,生成一套公有/私有RSA密匙,并使用它们由OpenSSH登录你的Ubuntu计算机。
  
这部分将说明启动基本Key登录的ssh ,生成一套公有/私有RSA密匙,并使用它们由OpenSSH登录你的Ubuntu计算机。
+
注意:Key是在本地(客户机)生成的,并且传输到远程计算机(服务器)上,用于在本地(客户机)登入到远程计算机(服务器)。
  
==== 生成 RSA 密匙 ====
+
==== 生成 RSA 密匙 ====
  
第一步包括生成一组用于验证的RSA 密匙。代表性意思是,你将在想要通过某台电脑去远程登陆其他电脑的这台机器上做这些事情,但是这不是非常重要,因为你总是可以到处把你的密匙安装到需要的机器上。到生成一个RSA 公有/私有密匙,使用下列命令行:
+
第一步包括生成一组用于验证的RSA 密匙。代表性意思是,你将在想要通过某台电脑去远程登陆其他电脑的这台机器上做这些事情,但是这不是非常重要,因为你总是可以到处把你的密匙安装到需要的机器上。到生成一个RSA 公有/私有密匙,使用下列命令行:  
  
<code><nowiki>b@tsh:~ ssh-keygen -t rsa</nowiki></code>
+
<code><nowiki>b@tsh:~$ ssh-keygen -t rsa</nowiki></code>  
  
<code><nowiki></nowiki></code>
+
<code><nowiki></nowiki></code>  
  
你必须在一个位置保存你的密匙,和一串对应于你的密匙的passphrase(密码短语口令)注5。当选择passphrase对于密匙时,应选择非常坚 固的passphrase,和便于记忆的,和记录它的位置的安全。这passphrase必须使用钥匙,在每次你要登录到一个基于密匙的系统:
+
你必须在一个位置保存你的密匙,和一串对应于你的密匙的passphrase(密码短语口令)注5。当选择passphrase对于密匙时,应选择非常坚 固的passphrase,和便于记忆的,和记录它的位置的安全。这passphrase必须使用钥匙,在每次你要登录到一个基于密匙的系统:  
 
<pre>生成公有/私有RSA密匙对。
 
<pre>生成公有/私有RSA密匙对。
 
进入保证密匙的文件(/home/b/.ssh/id_rsa):
 
进入保证密匙的文件(/home/b/.ssh/id_rsa):
第299行: 第281行:
 
你的公有密匙保存在 /home/b/.ssh/id_rsa.pub.
 
你的公有密匙保存在 /home/b/.ssh/id_rsa.pub.
 
</pre>  
 
</pre>  
祝贺你现在已经有了密匙组。现在布置你的系统已允许你的登录它们。
+
祝贺你现在已经有了密匙组。现在布置你的系统已允许你的登录它们。  
  
==== 在远程电脑寄存密匙 ====
+
==== 在远程电脑寄存密匙 ====
  
假设你想使用key的远程ubuntu已经运行了ssh后台程序,接下来放置你自己key对的公共部分在那些电脑上是十分简单的,例如,如果你喜 欢开始用基于key的方式登陆一个叫madsion的远程电脑,并且madsion正在运行sshd,并且能够用名字通过网络来到达这台机器,就可以很简 单的用sshcopy这个命令来恰当的放置你的key: <code><nowiki>ssh-copy-id -i ~/.ssh/id_rsa.pub b@madison</nowiki></code>
+
假设你想使用key的远程ubuntu已经运行了ssh后台程序,接下来放置你自己key对的公共部分在那些电脑上是十分简单的,例如,如果你喜欢开始用基于key的方式登陆一个叫madsion的远程电脑,并且madsion正在运行sshd,并且能够用名字通过网络来到达这台机器,就可以很简单的用sshcopy这个命令来恰当的放置你的key: <code><nowiki>b@tsh:~$ssh-copy-id -i ~/.ssh/id_rsa.pub b@madison</nowiki></code>  
  
<code><nowiki></nowiki></code>
+
<code><nowiki></nowiki></code>  
  
==== 登录测试 ====
+
==== 登录测试 ====
  
接下来, 你将要登录测试,配置连接到机器并使用你的passphrase来解开密匙:
+
接下来, 你将要登录测试,配置连接到机器并使用你的passphrase来解开密匙:  
  
<code><nowiki>ssh madison</nowiki></code>
+
<code><nowiki>b@tsh:~$ssh madison</nowiki></code>  
  
你会看到一个要你给出key的passphrase的命令提示符:
+
你会看到一个要你给出key的passphrase的命令提示符:  
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第320行: 第302行:
 
|}
 
|}
  
<br> 输入你的passphrase,并把madison设置为允许从基于密匙的登录,你将要使用它登录。
+
<br> 输入你的passphrase,并把madison设置为允许从基于密匙的登录,你将要使用它登录。  
  
https://help.ubuntu.com/community/IconsPage?action=AttachFile&amp;do=get&amp;target=IconNote.png '''''注解'':''' 上述的例子只是:一个例子!代替用户名,在这个例子中,机器名用你自己实际的名字是为了增加你成功的机会。&nbsp;;-)
+
https://help.ubuntu.com/community/IconsPage?action=AttachFile&amp;do=get&amp;target=IconNote.png '''''注解'':''' 上述的例子只是:一个例子!代替用户名,在这个例子中,机器名用你自己实际的名字是为了增加你成功的机会。&nbsp;;-)  
  
==== 行不通的事! ====
+
== '''疑难解答'''  ==
  
如果你不是被提示要求passphrase,而是仅仅得到
+
如果你不是被提示要求passphrase,而是仅仅得到  
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第333行: 第315行:
 
|}
 
|}
  
<br> 提示同样使用密码登录,然后读取。有一些情况可以预防向上面提到的这种情况。在默认的Ubuntu安装里,上面的例子能够运行。如果不,下列各项条件,例如这些时常发生的原因:
+
<br> 提示同样使用密码登录,然后读取。有一些情况可以预防向上面提到的这种情况。在默认的Ubuntu安装里,上面的例子能够运行。如果不,下列各项条件,例如这些时常发生的原因:  
  
在远程计算机上,确认 /etc/ssh/sshd_config包含下列各项,和没有它们的注解;
+
在远程计算机上,确认 /etc/ssh/sshd_config包含下列各项,和删除它们的注解;
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第342行: 第324行:
 
|}
 
|}
  
<br> 如果没有加它们,或没有注解,那么重要启动sshd,并重新再试一个登录。如果你现在得到了passphrase的提示,那要祝贺你可以用密匙登录了!
+
<br> 如果已经加它们,或已删除注解,那么重要启动sshd,并重新再试一个登录。如果你现在得到了passphrase的提示,那要祝贺你可以用密匙登录了!
  
==== 从这里到那里? ====
+
== '''SSH远程登录'''  ==
  
如过你已经成功建立了一个基于RAS密匙的登陆,你可能希望这是你Ubuntu系统上唯一可接受的授权方式,完全放弃弱密码授权.按照这个路线,将能确保自动暴力扫描和攻击工具对你的公共系统攻击更加困难,提前提醒,你一旦丢失了密匙,你会发现你自己也被关在系统外面!
+
如过你已经成功建立了一个基于RAS密匙的登陆,你可能希望这是你Ubuntu系统上唯一可接受的授权方式,完全放弃弱密码授权.按照这个路线,将能确保自动暴力扫描和攻击工具对你的公共系统攻击更加困难,提前提醒,你一旦丢失了密匙,你会发现你自己也被关在系统外面!  
  
从通知你的sshd不允许弱密码,到只是简单的使用sudo和你喜欢的编辑软件编辑 /etc/ssh/sshd_config,和下列各项指令改变:
+
从通知你的sshd不允许弱密码,到只是简单的使用sudo和你喜欢的编辑软件编辑 /etc/ssh/sshd_config,修改下例选项:
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第355行: 第337行:
 
|}
 
|}
  
<br> by uncommenting it, and changing ''yes'' to ''no'':
+
<br> 删去注释,修改 ''yes'' ''no'':  
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第362行: 第344行:
 
|}
 
|}
  
<br> 保存文件,并重新启动sshd以使弱密码验证无效。
+
<br> 保存文件,并重新启动sshd以使弱密码验证无效。  
  
<br>
+
<br>  
  
https://help.ubuntu.com/community/IconsPage?action=AttachFile&amp;do=get&amp;target=IconDialog-Warning1.png '''警告'''&nbsp;: 做二次,使弱密码验证无效行为,和没有使用密匙登录,或丢失了你的密匙,你并被锁在你的机器外面了。当然,你仍然可以经过控制台登录机器上,但这可能不是那么容易,如果你的电脑是500哩远呢!你已被再次警告这样是不行的''!''
+
https://help.ubuntu.com/community/IconsPage?action=AttachFile&amp;do=get&amp;target=IconDialog-Warning1.png '''警告'''&nbsp;: 第二次警告,使弱密码验证无效行为,和没有使用密匙登录,或丢失了你的密匙,你并被锁在你的机器外面了。当然,你仍然可以经过控制台登录机器上,但这可能不是那么容易,如果你的电脑是500哩远呢!你已被再次警告这样是不行的''!''  
  
此外,你可以改变允许使用基于密匙的登录的登录指令,到执行策略为以基于密码的登录。你可以做这个通过改变:
+
此外,你可以改变允许使用基于密匙的登录的登录指令,到执行策略为以基于密码的登录。你可以做这个通过改变:  
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第375行: 第357行:
 
|}
 
|}
  
<br> to
+
<br> to  
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
第384行: 第366行:
 
<br> 不要由于没有密码而被警告.这并不意味着一个人用root登陆的时候不需要提供密码,仅仅相当,这意味着没有人可以用密码认证的方法使用root来登陆,意味着用root登陆的时候可能只能使用公共密匙方式登陆。
 
<br> 不要由于没有密码而被警告.这并不意味着一个人用root登陆的时候不需要提供密码,仅仅相当,这意味着没有人可以用密码认证的方法使用root来登陆,意味着用root登陆的时候可能只能使用公共密匙方式登陆。
  
=== 资源 ===
+
===将密匙临时存入内存===
 +
如果一时间需要频繁地进行远程连接,可以考虑将密匙存入内存,之后所有的连接都不需要密匙了<br>
 +
<code>ssh-agent
 +
ssh-add
 +
</code><br>
 +
结束时,使用如下方法清除它<br>
 +
<code>
 +
ssh-add -D</code>
 +
 
 +
= '''资源'''  =
  
更多资源与高级配置OpenSSH的安全性在以下表格中。
+
更多资源与高级配置OpenSSH的安全性在以下表格中。  
  
==== 本地系统资源 ====
+
==== 本地系统资源 ====
  
 
{| cellspacing="0" border="1"
 
{| cellspacing="0" border="1"
 
|-
 
|-
| <code><nowiki>man sshd</nowiki></code>
+
| <code><nowiki>man sshd</nowiki></code>  
 
| System manual page for the <code><nowiki>sshd</nowiki></code> server daemon
 
| System manual page for the <code><nowiki>sshd</nowiki></code> server daemon
 
|-
 
|-
| <code><nowiki>man sshd_config</nowiki></code>
+
| <code><nowiki>man sshd_config</nowiki></code>  
 
| System manual page for the <code><nowiki>/etc/ssh/sshd_config</nowiki></code> configuration file
 
| System manual page for the <code><nowiki>/etc/ssh/sshd_config</nowiki></code> configuration file
 
|-
 
|-
| <code><nowiki>man ssh-copy-id</nowiki></code>
+
| <code><nowiki>man ssh-copy-id</nowiki></code>  
 
| System manual page for the <code><nowiki>ssh-copy-id</nowiki></code> application
 
| System manual page for the <code><nowiki>ssh-copy-id</nowiki></code> application
 
|-
 
|-
| <code><nowiki>man ssh-keygen</nowiki></code>
+
| <code><nowiki>man ssh-keygen</nowiki></code>  
 
| System manual page for the <code><nowiki>ssh-keygen</nowiki></code> application
 
| System manual page for the <code><nowiki>ssh-keygen</nowiki></code> application
 
|-
 
|-
| <code><nowiki>/etc/ssh/sshd_config</nowiki></code>
+
| <code><nowiki>/etc/ssh/sshd_config</nowiki></code>  
 
| The OpenSSH Secure Shell Daemon (<code><nowiki>sshd</nowiki></code>) configuration file
 
| The OpenSSH Secure Shell Daemon (<code><nowiki>sshd</nowiki></code>) configuration file
 
|}
 
|}
  
==== WWW Resources ====
+
==== WWW Resources ====
  
[http://www.debian-administration.org/articles/87 Keeping SSH access secure]
+
[http://www.debian-administration.org/articles/87 Keeping SSH access secure]  
  
[http://www.openssh.org/ OpenSSH Website]
+
[http://www.openssh.org/ OpenSSH Website]  
  
[http://www.debian-administration.org/articles/152 Password-less logins with OpenSSH]
+
[http://www.debian-administration.org/articles/152 Password-less logins with OpenSSH]  
  
注1: 它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。
+
注1: 它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。  
  
注2: (rcp) 远端复制协议。该协议允许用户从网络的一个远端主机或者服务器上的文件系统中上载和下载文件。远端复制协议使用TCP协议来确保数据传输的可靠性。
+
注2: (rcp) 远端复制协议。该协议允许用户从网络的一个远端主机或者服务器上的文件系统中上载和下载文件。远端复制协议使用TCP协议来确保数据传输的可靠性。  
  
注3: 原处为"inetd" 意思就是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。
+
注3: 原处为"inetd" 意思就是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。  
  
注4: xinetd(eXtended InterNET services daemon)提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。
+
注4: xinetd(eXtended InterNET services daemon)提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。  
  
 
注5: 相对“密码”(password)而言,密码短语(passphrase)口令以其更为严密的安全性正受到IT界的广泛关注。在功能上,passphrase同密码一样,只是长度较密码长。通常passphrase使用4到5个单词取代原来数字、字母结合的方式。
 
注5: 相对“密码”(password)而言,密码短语(passphrase)口令以其更为严密的安全性正受到IT界的广泛关注。在功能上,passphrase同密码一样,只是长度较密码长。通常passphrase使用4到5个单词取代原来数字、字母结合的方式。

2014年4月23日 (三) 09:18的最新版本

OpenSSH 高级教程

原文出处:官方Wiki-AdvancedOpenSSH (已经失效)

原文作者:

授权许可:

翻译人员:fiftymetre

校正人员:millenniumdark

贡献人员:sighforever lxr1234

适用版本:

文章状态:原文丢失


译者的话:第一次翻译这英文文章,译的不好的地方也许大家包含,我会努力在下一章中尽我所能的提高翻译质量。翻译这篇文章时,还特意找一了本“SSH权威指南”研究了一下,以前在win下都是用SSH Secure Shell来跟ubuntn来传文件的呵呵。但ubuntu6.06桌面版本默认安装却没有安装SSH。




这翻译。。。非常生硬。我改了几句,发现要改的太多了。只好算了。  有的地方把配置文件中的指令都翻译了。这OpenSSH可不懂中文写的配置文件。  -- millenniumdark

要改的地方实在太多,正好我这两天在学这个,一点点改吧  -- sighforever


简介

这篇指南在Ubuntu OpenSSH的默认配置基础上,着重介绍了能够大幅增加安全性的高级配置技巧。它详细论述了两方面内容:

  1. 服务器端的特定配置方式;
  2. 通过与明文密码相比较,阐述了利用Rivest Shamir Adleman (RSA) 算法(注1)生成密钥登陆 OpenSSH 服务器的过程。


目标读者

为了能够更好的使用本教程 ,读者应该是一个善于使用命令行程序的Ubuntu用户,能够使用bash环境,并能够在基于控制台的文本编辑器中编辑系统配置文件。另外,读者应该知道如何启动和关闭系统守护进程,并且对OpenSSH程序的安装方式和使用目的有一个大致的了解。



关于 OpenSSH

OpenSSH是安全Shell协议族(SSH)的一个免费版本。SSH协议族可以用来进行远程控件, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议), rcp(注2)都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程的中的数据,并由此来代替原来的类似服务。



OpenSSH 服务 (sshd)

OpenSSH服务,sshd,是一个典型的独立守护进程(standalone daemon),但也可以根据需要通过网络守护进程(Internet Daemon)-inetd(注3)或Ineternet Daemon's more modern-xinted(注4)加载。OpenSSH服务可以通过/etc/ssh/sshd_config文件进行配置。本章将介绍此配置文件中的默认配置,并说明如何修改这些配置来提高sshd的安全性。本章的行文方式为:先使用斜体字简单说明默认设置(如:Port 22), 然后在下一行中使用粗体字 (如:Protocol 2)介绍为了增强安全防护而作的修改。

在改变您的sshd配置文件之前,请先备份您的/etc/ssh/sshd_config文件,在终端(shell)中输入下列命令:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original

如果这个文件不存在,证明您还没有安装OpenSSH,请通过软件仓库安装OpenSSH-server程序。注 意,在/etc/ssh/文件夹下 还有一个ssh_conf文件,它是SSH客户端的配置文件,在此请不要修改它。

如果您愿意,您可以使用下面的命令保护您的配置文件不会被意外的修改。

sudo chmod a-w /etc/ssh/sshd_config.original

以这种方式备份配置文件是管理您的Ubuntu GNU/Linux系统的最好方法。如果当您需要将应用程序恢复到默认配置或者当您因为操作失误或配置文件修改错误而导致应用程序不能运行的时候,您可以很方便的进行操作。

如果您已经保存好了您的/etc/ssh/sshd_config文件,你就可以放心的实验本教程中所提到的配置方法了。当您修改完配置文件后,您必须保存/etc/ssh/sshd_config文件,并使用下面的命令重新启动sshd,才能使更改结果起作用:

sudo /etc/init.d/ssh restart

OpenSSH服务的建议设定

Ubuntu中,OpenSSH的默认配置要比其他GNU linux发行版中的配置更为安全,但是,如果按照本章讲解的方式进行配置,其安全程度还可以进一步提高。但是在一些特殊条件下,本文中的配置可能不适合您的环境要求,这时,您就要权衡环境需求与安全性要求,做出折中的配置。

登录

LogLevel INFO

在默认的设置下,sshd的登录日志以INFO级别写入AUTH系统日志设备(SyslogFacility)。如果ssh作为你远程控制Ubuntu主机的主要方式,您应该考虑将日志级别由INFO提升为VERBOSE。这样,在日志中将会记录更多有关登录成功和登录失败的信息。


LogLevel VERBOSE


这样,所有ssh登录成功信息,和未成功登录的信息都以VERBOSE的日志级别记录在你的AUTH文件中(/var/log/auth.log)。

验证

LoginGraceTime 120

默认设置下,通过sshd登录Ubuntu后,必须在出现操作提示符的120秒(2分钟)内登录系统,不然sshd将会自动切断与主机的连接。这个时间值可以通过LoginGraceTime进行设置


LoginGraceTime 20

将LoginGraceTime设置为20秒。可以有效的防御自动化阻遏(thwarting automated),暴力攻击ssh,和拒绝服务式攻击(DDOS)。


'X11Forwarding yes
如果你不希望有人能够通过ssh使用图形用户界面的程序(这些程序通过SSH通道-SSH tunnel显示),你可以通过X11Forwarding指令将其关闭,由此来减少很多攻击的可能。


X11Forwarding no
现在,sshd的X11 forwarding功能被关闭了。


IconsPage?action=AttachFile&do=get&target=IconWarning3.png 警告: 我们并不推荐关闭X11 forwarding,如果某个服务是基于使用X11或LTSP的,将X11 Forwarding关闭将导致此服务不可用。


'#Banner /etc/issue.net


显示一个不欢迎的警示条,或更好的方法对于安全是件好事。它将告知好奇的人,或者未经许可的恶意登录到你的OpenSSH服务器的人,远程访问你的计算机是必须经过许可,并且需要用户授权。


有一个的不欢迎警示条目可以帮你成功起诉攻击者,或别的组织未经许可的尝试经由ssh访问你的服务器。


'Banner /etc/issue.net
现在,/etc/ssh/sshd_config中的警示条已经被激活。您可以使用下列的流程创建警句条的实际实际内容。在这里我们给出了一个例子:

使用sudo启动你喜欢的文本编辑软件,创建文件/etc/issue,并把下面的文字拷入此文件作为警示条的内容:

***************************************************************************
NOTICE TO USERS
This computer system is the private property of its owner, whether
individual, corporate or government. It is for authorized use only.
Users (authorized or unauthorized) have no explicit or implicit
expectation of privacy.
Any or all uses of this system and all files on this system may be
intercepted, monitored, recorded, copied, audited, inspected, and
disclosed to your employer, to authorized site, government, and law
enforcement personnel, as well as authorized officials of government
agencies, both domestic and foreign.
By using this system, the user consents to such interception, monitoring,
recording, copying, auditing, inspection, and disclosure at the
discretion of such personnel or officials. Unauthorized or improper use
of this system may result in civil and criminal penalties and
administrative or disciplinary action, as appropriate. By continuing to
use this system you indicate your awareness of and consent to these terms
and conditions of use. LOG OFF IMMEDIATELY if you do not agree to the
conditions stated in this warning.
****************************************************************************

保存文件,并且使用下列命令创建一个到 /etc/issue.net的符号连结:

sudo ln -s /etc/issue /etc/issue.net

重新启动sshd后,任何用户想要登陆时都会在登陆提示符前看到上面的信息。所有的非授权访问者将受到一个明确的消息"你的电脑只能通过授权才能使用,不欢迎非授权用户使用。上面例子中的警告条是根据美国国防部(US DEPARTMENT OF DEFENCE)的警告条的修改而成的,完全适合专业用户使用,而且更适合个人用户。

另外,当您作了此设定时,本地控制台的登录会同样显示来自/etc/issue文件的信息,也就是说坐到您电脑前使用你电脑的人也会收到同样的警告信息。如果你不想这样,请删除由符号链接生成的issue.net文件,然后新建一个/etc/issue.net文件并将警示信息写入到这个文件中,并且将/etc/issue清空。/etc/issue没有警示信息,警告将只显示给那些远程访问系统的人。

进一步的配置技巧

下面的内容是一些额外的暗示和一些配置一个更加安全的openssh安装的技巧,这些技巧利用一些不包含在默认的ubuntussh配置文件中的指令,并且提出其他加强你的ssh安装安全的方法。

允许和拒绝用户和用户组

在配置文件中你可以使用一些指令来允许或者拒绝一些特定用户或者用户组用ssh登陆.这个方法更加细致的控制哪些人可以通过ssh来进入你的Ubuntu电脑。

例如,如果你想只允许jhendrix和svaughan通过ssh登陆,你可以向这样在你的/etc/ssh中使用allowusers指令。


AllowUsers jhendrix svaughan


如果你想让所有用户都能通过 ssh 登陆,除了使用者 wgates,或sballmer然后你可以使用DenyUsers命令添加到/etc/ssh/sshd_config中,像这样:

DenyUsers wgates sballmer


最后,再看一个例子,你可以这样配置你的OpenSSH服务,只有用户属于系统组才允许通过ssh 登录。在这个例子中,我们将执行一些必要手段只允许SSH的用户都是小组成员sshlogin。

sudo addgroup --gid 450 sshlogin

sudo adduser <username> sshlogin

在以上的例子中是用'<username>'代替你的用户名加入到sshlogin系统组。最后,编辑你的 /etc/ssh/sshd_config,并增添allowgroups指令:

AllowGroups sshlogin


重新启动 sshd,并且只有属于sshlogin组的用户才可以通过ssh 登录到你的Ubuntu计算机。

启动 sshd来监听不同的端口

由于近来自动扫描ssh和暴力攻击工具的大量增长,很多装有ssh的用户和管理员决定给ssh用一个非标准的tcp端口,标准的sshd侦听端口是 tcp/22,并且暴力扫描攻击工具都典型的被配置成侦听这个端口用来查找后门。

从使用简单密码的ssh登陆切换到使用基于键盘方式的登陆,显著减少了自动工具猜测出一个正确的密码的机会,一些人觉得加入更多偏僻字的办法可能更会增强安全性。

如果你曾考虑过在非标准端口上运行的你的sshd分支,例如一个常量需要使用-p或者-P来切换不同的ssh工具,或者通过修改配置文件这种更长久的方式来检验端口改变的正确,并且接受那些协议,然后改变侦听端口是十分琐碎的。

仅仅增加一个或更多的端口在你的 /etc/ssh/sshd_config 文件中,因此:

Port 2222




如果你希望侦听tcp/22,和tcp/2222端口,例如,局域网连接使用传统方式,但外部连接使用tcp/2222端口。要完成这些,不需要在你的路由器配置网络地址翻译规则或者类似的东西,只要增加这2条指令到 /etc/ssh/sshd_cfig: 




Port 22
Port 2222


不要忘记保存文件,和重新启动你的sshd指令:

sudo /etc/init.d/ssh restart

使改变生效。

基于RSA key登陆

基于key的授权是可用的ssh授权方法中的一种,因此简单的密码(Ubuntu默认密码)和Kerberos标签。基于Key的验证的几个优点比密码验证更好,至于例子这个key的值就十分明显的很难被暴力破解,或以大量的关键字为条件来猜测弱密码。

数字键也是如此,是对极其相似事物的一个比方,所以可以在可能出现弱密码的地方显示密码安全的程度。使用基于Key登录的ssh 是比使用弱密码的登录,普遍认为更安全的。 [[File: IconsPage?action=AttachFile&do=get&target=IconNote.png]] 注解: 同时生成一套能够使用openssh的RSA key而不需要密码是可能的,简单讲,通过ssh登陆不要密码,这个指导书没有描述或者认定这种用法是很不安全的.如果这个缺少密码的key落入其他人手 中,就如你的授权一样,应此所有允许这些key的系统安全都很容易受到威胁,在一些情况下,例如不安全的群环境中,需要有完全没有密码的登陆,但是,这本书没有解释制造这种key的过程。

'

这部分将说明启动基本Key登录的ssh ,生成一套公有/私有RSA密匙,并使用它们由OpenSSH登录你的Ubuntu计算机。

注意:Key是在本地(客户机)生成的,并且传输到远程计算机(服务器)上,用于在本地(客户机)登入到远程计算机(服务器)。

生成 RSA 密匙

第一步包括生成一组用于验证的RSA 密匙。代表性意思是,你将在想要通过某台电脑去远程登陆其他电脑的这台机器上做这些事情,但是这不是非常重要,因为你总是可以到处把你的密匙安装到需要的机器上。到生成一个RSA 公有/私有密匙,使用下列命令行:

b@tsh:~$ ssh-keygen -t rsa

你必须在一个位置保存你的密匙,和一串对应于你的密匙的passphrase(密码短语口令)注5。当选择passphrase对于密匙时,应选择非常坚 固的passphrase,和便于记忆的,和记录它的位置的安全。这passphrase必须使用钥匙,在每次你要登录到一个基于密匙的系统:

生成公有/私有RSA密匙对。
进入保证密匙的文件(/home/b/.ssh/id_rsa):
进入passphrase(empty for no passphrase):
再次进入同一passphrase:
你的验证文件保存在/home/b/.ssh/id_rsa.
你的公有密匙保存在 /home/b/.ssh/id_rsa.pub.

祝贺你现在已经有了密匙组。现在布置你的系统已允许你的登录它们。

在远程电脑寄存密匙

假设你想使用key的远程ubuntu已经运行了ssh后台程序,接下来放置你自己key对的公共部分在那些电脑上是十分简单的,例如,如果你喜欢开始用基于key的方式登陆一个叫madsion的远程电脑,并且madsion正在运行sshd,并且能够用名字通过网络来到达这台机器,就可以很简单的用sshcopy这个命令来恰当的放置你的key: b@tsh:~$ssh-copy-id -i ~/.ssh/id_rsa.pub b@madison

登录测试

接下来, 你将要登录测试,配置连接到机器并使用你的passphrase来解开密匙:

b@tsh:~$ssh madison

你会看到一个要你给出key的passphrase的命令提示符:

Enter passphrase for key '/home/b/.ssh/id_rsa':


输入你的passphrase,并把madison设置为允许从基于密匙的登录,你将要使用它登录。

IconsPage?action=AttachFile&do=get&target=IconNote.png 注解: 上述的例子只是:一个例子!代替用户名,在这个例子中,机器名用你自己实际的名字是为了增加你成功的机会。 ;-)

疑难解答

如果你不是被提示要求passphrase,而是仅仅得到

b@madison's password:


提示同样使用密码登录,然后读取。有一些情况可以预防向上面提到的这种情况。在默认的Ubuntu安装里,上面的例子能够运行。如果不,下列各项条件,例如这些时常发生的原因:

在远程计算机上,确认 /etc/ssh/sshd_config包含下列各项,和删除它们的注解;

PubkeyAuthentication yes


如果已经加它们,或已删除注解,那么重要启动sshd,并重新再试一个登录。如果你现在得到了passphrase的提示,那要祝贺你可以用密匙登录了!

SSH远程登录

如过你已经成功建立了一个基于RAS密匙的登陆,你可能希望这是你Ubuntu系统上唯一可接受的授权方式,完全放弃弱密码授权.按照这个路线,将能确保自动暴力扫描和攻击工具对你的公共系统攻击更加困难,提前提醒,你一旦丢失了密匙,你会发现你自己也被关在系统外面!

从通知你的sshd不允许弱密码,到只是简单的使用sudo和你喜欢的编辑软件编辑 /etc/ssh/sshd_config,修改下例选项:

#PasswordAuthentication yes


删去注释,修改 yesno:

PasswordAuthentication no


保存文件,并重新启动sshd以使弱密码验证无效。


IconsPage?action=AttachFile&do=get&target=IconDialog-Warning1.png 警告 : 第二次警告,使弱密码验证无效行为,和没有使用密匙登录,或丢失了你的密匙,你并被锁在你的机器外面了。当然,你仍然可以经过控制台登录机器上,但这可能不是那么容易,如果你的电脑是500哩远呢!你已被再次警告这样是不行的!

此外,你可以改变允许使用基于密匙的登录的登录指令,到执行策略为以基于密码的登录。你可以做这个通过改变:

PermitRootLogin yes


to

PermitRootLogin without-password


不要由于没有密码而被警告.这并不意味着一个人用root登陆的时候不需要提供密码,仅仅相当,这意味着没有人可以用密码认证的方法使用root来登陆,意味着用root登陆的时候可能只能使用公共密匙方式登陆。

将密匙临时存入内存

如果一时间需要频繁地进行远程连接,可以考虑将密匙存入内存,之后所有的连接都不需要密匙了
ssh-agent ssh-add
结束时,使用如下方法清除它
ssh-add -D

资源

更多资源与高级配置OpenSSH的安全性在以下表格中。

本地系统资源

man sshd System manual page for the sshd server daemon
man sshd_config System manual page for the /etc/ssh/sshd_config configuration file
man ssh-copy-id System manual page for the ssh-copy-id application
man ssh-keygen System manual page for the ssh-keygen application
/etc/ssh/sshd_config The OpenSSH Secure Shell Daemon (sshd) configuration file

WWW Resources

Keeping SSH access secure

OpenSSH Website

Password-less logins with OpenSSH

注1: 它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。

注2: (rcp) 远端复制协议。该协议允许用户从网络的一个远端主机或者服务器上的文件系统中上载和下载文件。远端复制协议使用TCP协议来确保数据传输的可靠性。

注3: 原处为"inetd" 意思就是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。

注4: xinetd(eXtended InterNET services daemon)提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。

注5: 相对“密码”(password)而言,密码短语(passphrase)口令以其更为严密的安全性正受到IT界的广泛关注。在功能上,passphrase同密码一样,只是长度较密码长。通常passphrase使用4到5个单词取代原来数字、字母结合的方式。