Chinaunix首页 | 论坛 | 博客
  • 博客访问: 514790
  • 博文数量: 484
  • 博客积分: 10145
  • 博客等级: 上将
  • 技术积分: 5805
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 18:34
文章分类

全部博文(484)

文章存档

2011年(52)

2010年(107)

2009年(287)

2008年(38)

我的朋友

分类: LINUX

2009-05-16 17:34:00

SSH 服务器:
  简单的来说,SSH 是 Secure SHell protocol 的简写,能够经由将联机的封包加密的技术,来进行资料的传递,因此,资料当然就比较安全?!这个 SSH 能够用来取代 Internet 上面较不安全的 finger, R Shell (rcp, rlogin, rsh 等指令), talk 及 telnet 等联机模式。先简介一下 SSH 的联机模式,来说明为什么 SSH 会比较安全!
  特别注意:这个 SSH 协议,在预设的状态中,本身就提供两个服务器功能:
1. 一个就是类似 telnet 的远程联机使用 shell 的服务器,亦即是俗称的 ssh ;
2. 另一个就是类似 FTP 服务的 sftp-server !提供更安全的 FTP 服务。
? 联机加密技术简介:
  基本上,加密的技术通常是藉由所谓的『公钥和私钥』亦即『Public and Private keys』来进行加密和解密的动作!如下图所示,当 SSH 激活服务之后,会产生一支公钥,而身为个人电脑的您,在进行和 server 的联机时,能够藉由自己产生的私钥来提供 server 的联机之用,也能够直接藉由 server 提供的私钥来进行联机!这个和进行联机时选择的加密版本有关,这个等一下我们再提!

  在上面的图标中,我们能够知道,当数据由 Server 端传送到 Client 端时,这些资料会先经过『公钥, Public Key』来进行加密的行为,所以,在传输的过程中,这些资料本身是经过加密的,因此,即使这些资料在途中被截取时,要破解这些加密的资料,还是得要花费上 好长一段时间的。那么等这些经过公钥加密的资料传送到 Client 端之后,就能够藉由所谓的『私钥, Private Key』来进行解密的动作。需要注意的是,这些公钥和私钥在每一部电脑上面都不相同,所以,您和 Server 的联机对其他人来说,都是很难去破解的呢!那么这些公钥和私钥是怎样产生的呢?底下我们来谈一谈现在 SSH 的两种版本的联机模式?!

o SSH protocol version 1:

  每一部主机都能够使用 RSA 加密方式来产生一个 1024-bit 的 RSA Key ,这个 RSA 的加密方式,主要就是用来产生公钥和私钥的演算方法!这个 version 1 的整个联机的加密步骤能够简单的这么看:
1. 当每次 SSH daemon (sshd) 激活时,就会产生一支 768-bit 的公钥(或称为 server key)存放在 Server 中;
2. 若有 client 端的需求传送来时,那么 Server 就会将这一支公钥传给 client ,而 Client 藉由比对本身的 RSA 加密方式来确认这一支公钥;
3. 在 Client 接受这个 768-bit 的 server key 之后,Client 自己也会随机产生一支 256-bit 的私钥(host key),并且以加密的方式将 server key 和 host key 整合成一支完整的 Key ,并且将这支 Key 也传送给 server ;
4. 之后,Server 和 Client 在这次的联机当中,就以这一支 1024-bit 的 Key 来进行资料的传递!
当然啦,因为 Client 端每次的 256-bit 的 Key 是随机取的,所以您这次的联机和下次的联机的 Key 就会不相同啦!
 
o SSH protocol version 2:
  和 version 1 不同的是,在 version 2 当中将不再产生 server key 了,所以,当 Client 端联机到 Server 端时,两者将藉由 Diffie-Hellman key 的演算方式来产生一个分享的 Key ,之后两者将藉由类似 Blowfish 的演算方式进行同步解密的动作!
  每一个 sshd 都提供这两个版本的联机,而决定这两种模式联机的,就必需要在 client 端联机时选择联机的模式才能确认。现在预设情况下,会自动使用 version 2 的联机模式喔!而由于我们的联机资料中,经过了这个 Public 和 Private Key 的加密、解密动作,所以在中间的传送过程中,当然就比较安全的多!
------------------------------------------------------------------------------------------------
激活 ssh 服务:
  事实上,在我们使用的 Linux 系统当中,预设就已含有 SSH 的任何需要的套件了!这包含了能够产生密码等协议的
OpenSSL
套件和
OpenSSH
套件。此外,在现在的 Linux Distributions 当中,都是预设激活 SSH 的,所以一点都不麻烦,因为不用去设定,就已激活了!这个激活的方式吧!直接激活就是以 SSH daemon ,简称为 sshd 来激活的,所以,手动能够这样激活:

  上面两种方式都能够直接手动激活 sshd 这个服务!然后使用 netstat -tl 看看能不能看到 ssh 的服务在监听呢!?假如出现了上面那一行黄色字体,就表示您的 SSH 已正确的激活?!这真是太简单了吧!没错,但是他就是这么简单~
  那么我要怎样在开机的时候就激活这个 sshd 呢?假如是 Red Hat 的系统,能够使用 ntsysv 这支程式,而 Mandrake 能够使用 chkconfig 这个程式!至于 OpenLinux 则能够到 /etc/sysconfig/daemons 去看看喔!
  这个方式仅适合在已有 OpenSSH 的 Linux Distributions 当中,假如以 Red Hat 6.x 为例,他并没有预设使用 SSH 怎么办?别担心,能够参考一下底下这个鸟哥之前写过的网页,有周详的说明使用 tarball 安装的步骤呢!
  
使用 Tarbal 安装 SSH 连同升级 SSH 可能会碰到的问题说明
  需要注意的是, SSH 不但提供了 shell 给我们使用,亦即是 ssh protocol 的主要目的,同时亦提供了一个较为安全的 FTP server ,亦即是 ssh-ftp server 给我们当成是 FTP 来使用!所以,这个 sshd 能够同时提供 shell 和 ftp 喔!而且都是架构在 port 22 上面的呢!所以,底下我们就来提一提,那么怎么样由 Client 端连接上 Server 端呢?同时,怎样以 FTP 的服务来连接上 Server 并且使用 FTP 的功能呢?
------------------------------------------------------------------------------------------------
? ssh 客户端联机: ssh, putty
  由于 Linux 和 Windows 这两个客户端的 Client 联机软件并不相同,所以我们分为两个部分来说明:
o Linux 客户端:
  在 Linux 客户端方面,我们主要以 ssh 进行一般联机,而已 sftp 进行 FTP 的使用联机!分别简介如下:

  这里请特别留意的是,假如直接以 ssh hostname 来连接进入 hostname 这个主机时,则进入 hostname 这个主机的『帐号名称』将会是现在您所在的这个环境当中的使用者帐号!以上面为例,因为我是以 root 的身份在执行,所以假如我执行了『 ssh host.domain.name 』时,那么对方 host.domain.name 这部主机,就会以 root 的身份来让我进行密码确认的登入动作!因此,为了避免这样的麻烦,通常我都是以简单的 e-mail 的写法来登入远方的主机,例如『ssh user@hostname 』即表示,我是以 user 这个帐号去登入 hostname 这部主机的意思。当然,也能够使用 -l username 这样的形式来书写!登入对方主机之后,其他的任何执行行为都跟在 Linux 主机内没有两样~所以,真的是很简单吧! ^_^ 这样就能够达到远程控管主机的目的了!此外,在预设的情况下, SSH 是『允许您以 root 的身份登入』喔!呵呵!更是爽快啦!此外,请特别留意的是,当您要连接到对方的主机时,假如是首次连接,那么 Server 会问您,您的联机的 Key 尚未被建立,要不要接受 Server 传来的 Key ,并建立起联机呢?呵呵!这个时候请『务必要输入 yes 而不是 y 或 Y』,这样程式才会接受喔!
  那么怎样使用 SSH FTP 的功能呢?也是很容易啦!就是使用 sftp 这支程式即可!而登入的方式和 ssh 相同,都是使用 sftp -l username hostname 或直接以 sftp user@hosname 来书写!执行之后会有底下的模样:

  进入到 sftp 之后,那就跟在一般 FTP 模式下的操作方法没有两样了!底下我们就来谈一谈, sftp 这个接口下的使用指令吧!

  就整体而言, sftp 在 Linux 底下,假如不考虑图像接口,那么他已能够取代 FTP 了呢!因为任何的功能都已涵盖啦!因此,在不考虑到图像接口的 FTP 软件时,能够直接关掉 FTP 的服务,而改以 sftp-server 来提供 FTP 的服务吧! ^_^
o Windows 客户端:
  在 Linux 底下已有 ssh 了,那么假如在 Windows 底下呢?该怎么办?呵呵!这个能够直接使用 putty 这种类型的联机软件呢,他也是免费的软件喔!取得的方式能够参考底下的网站:
~sgtatham/putty/
  好了,那么要取得哪几个程式呢?其实只要 putty.exe 及 psftp.exe 这两支程式就够了!分别用来登录 shell 及 FTP 的呢!
o putty:
  直接在 Windows 底下执行,执行的图标有点像底下这样:

o psftp:
  这一支程式的重点则是在于以 sftp 联机上 Server 。联机的方式能够直接点选 psftp 这个档案,让他直接激活,则会出现下面的图样:

  这个时候能够填入您要连接上去的主机名称,例如我的区域内网络 test.linux.org 这个主机:

------------------------------------------------------------------------------------------------

周详设定 sshd 服务器

  基本上,任何的 ssh 相关设定都放在 /etc/ssh/sshd_config 里面!但是,每个 Linux distribution 的预设设定都不太相同,所以我们有必要来了解一下整个设定值的意义!





  基本上,在您的系统中,『除非有必要,否则请不要更改 /etc/ssh/sshd_config 这个档案的设定值!』因为预设的情况下通常都是最严密的 SSH 保护了,因此,能够无需更动他!上面的说明仅是在让大家了解每个细项的一些基本内容而已!需要注意的是最后一项,假如您不愿意开放 SFTP 的话,将最后一行批注掉即可!
  另外,假如您修改过上面这个档案(/etc/ssh/sshd_config),那么就必需要重新激活一次 sshd 这个 daemon 才行!亦即是: /etc/rc.d/init.d/sshd restart
允许或禁止某些用户或组用户使用SSH登录
要实现禁止用户或组使用SSH登录服务器,只需要修改sshd2_config文档中的以下几行内容:
#AllowUsers sj.*,s[[:digit:]]*,s(jl|amza)
#DenyUsers skuuppa,warezdude,31373
#DenyUsers don@untrusted.org
#AllowGroups staff,users
#DenyGroups guest,anonymou
能够根据自己的实际需要,取消注释符“#”,加入实际的用户名或组名,然后重新启动SSH服务器即可禁止(或允许)某些用户或组使用SSH
限制用户在自己的目录范围
#ChRootGroups sftp,guest
改为:
ChRootGroups sftp,guest,template
修改上面这行内容,主要是为了禁止普通用户查看系统的其他目录,把其权限限制在自己的主目录下。重新启动SSH服务器程式,在客户端使用SSH Secure File Transfer Client登录,即使选择显示根目录,普通用户也看不到其他的任何目录,而是把自己的主目录当作根目录。注意,这里使用的是按用户所属组限制,这样能够 使包含在template组内的任何用户都能够实现此功能。若您只要限制个别用户的话,能够修改下面的内容:
#ChRootUsers anonymous,ftp,guest
------------------------------------------------------------------------------------------------

? 制作不用密码可立即登入的 ssh 用户:

  咦!既然 SSH 能够使用 Key 来比对资料,并且提供使用者资料的加密功能,那么可不可能利用这个 Key 就提供使用者自己进入主机,而无需输入密码呢?呵呵!好主意!我们能够将 Client 产生的 Key 给他拷贝到 Server 当中,所以,以后 Client 登入 Server 时,由于两者在 SSH 要联机的讯号传递中,就已比对过 Key 了,因此,能够立即进入数据传输接口中,而无需再输入密码呢!在实作上的步骤能够是:
1. 首先,先在 Client 上面建立 Public Key 跟 Private Key 这两把钥匙,利用的指令为 ssh-keygen 这个命令;
2. 再来,将 Private Key 放在 Client 上面的家目录,亦即 $HOME/.ssh/ ,并且修改权限为仅有该 User 可读的状态;
3. 最后,将那把 Public Key 放在任何一个您想要用来登入的主机的 Server 端的某 User 的家目录内之 .ssh/ 里面的认证档案即可完成整个程式。
  说是好象很困难的样子,其实步骤真的很简单,我们依序来进行作业好了!

假设前提:

a. Server 部分为 test.linux.org 这部 192.168.0.2 的主机,欲使用的 User 为 test 这个帐号;
b. Client 部分为 test2.linux.org 这部 192.168.0.100 PC 的 test2 这个帐号,他要用来登入
192.168.0.2 这部主机的 test 这个帐号。
  也就是说,我在 192.168.0.100 这部机器的身份为 test2 ,但是我想以 test 的身份登入 192.168.0.2 这部主机,并且希望不要使用密码!这样能够了解大前提了吗?好了,我们就一步一步来作吧!
1. 在 Client 端建立 Public 和 Private Key :
  建立的方法真的是简单到不行!直接在 192.168.0.100 这个 Client 上面,以 test2 这个帐号,使用 ssh-keygen 这个指令来进行 Key 的产生即可!但是,需要注意的是, version 1 和 version 2 使用的密码演算方式不同,此外, version 2 提供两个密码演算的方法,我们这里仅针对 version 2 的 RSA 这个演算方法进行说明!

  请注意上面,我的身份是 test2 ,所以当我执行 ssh-keygen 时,才会在home目录下的 .ssh/ 这个目录里面产生所需要的两把 Keys ,分别是私钥(id_rsa)和公钥(id_rsa.pub)。另外一个要特别注意的就是那个 id_rsa 的档案权限!必须要是 -rw! 
2. 在 Client 端放置私钥:
  在预设的条件中,我们的私钥必需要放置在home目录下的 .ssh 里面,那么假如是 version 2 的 RSA 算法,就需要放置在 $HOME/.ssh/id_rsa 当中!刚好使用 ssh-keygen 就是已产生在这个目录下了,所以自然就无需去调整了!以我的 test2.linux.org 来看,那么我的档案就会放置在 /home/test2/.ssh/id_rsa 这个档案就是私钥!
 
3. 在 Server 端放置能够登入的公钥:
  既然我们要让 test2 能够以 test 这个帐号登入 test.linux.org 这部主机,那么这部主机自然需要保有 test2 的 public key !对的!所以我们必需要将 Client 端建立的 id_rsa.pub 档案给他拷贝到 test.linux.org 里头的 test 这个使用者的home目录之下!那么假如您还记得上面的 sshd_config 这个档案的设定的话,那么应该就记得『AuthorizedKeysFile』这个设定!是的!在被登入的主机的某个帐号,他的公钥放置的文档名称预设就 是这个项目所记载的!而他预设的档名就是 authorized_keys 这个文档名称!那么应该怎么做?

  由于 authorized_keys 能够保存相当多的公钥内容,因此,能够使用 >> 的方式来将 Client 端的公钥新增到该档案内!做完这一步一后,未来 test2 就能够直接在 test2.linux.org 以

  这样就能够无需输入密码!但是请注意, test 不能以 test2 登入 test2.linux.org !
  很简单的步骤!这样一来,就能够不需密码的手续了!您要记得的是, Server 需要有的是 Public Keys ,而 Client 端的则是 Private Keys !则未来,当您还想要登入其他的主机时,只要将您的 public key ( 就是 id_rsa.pub 这个档案 )给 copy 到其他主机上面去,并且新增到某帐号的 .ssh/authorized_keys 这个档案中!
------------------------------------------------------------------------------------------------

? 安全设定:

  关于安全的设定方面:
o /etc/ssh/sshd_config
o /etc/hosts.allow, /etc/hosts.deny
o iptables

? /etc/ssh/sshd_config

  一般而言,这个档案的预设项目就已很完备了!所以,事实上是不太需要更动的!但是,假如您有些使用者方面的顾虑,那么能够这样修正一些问题!
o 禁止 root 的登入:不许 root 以远程联机的方式登入,都会是个好主意!所以,能够修改 /etc/ssh/sshd_config 这个档案的内容为:

  如此一来,以后 root 就不能以 ssh 登入! 
o 不许某个群组登入:有些特别情况中,我们想要让使用者只能使用 sendmail, pop3, ftp 等,但是不希望他能够远程联机进来,那么您能够这样做:
1. 将这些使用者都归纳在某一个特别群组之下,例如 nossh 这个群组好了;
2. 在 /etc/ssh/sshd_config 当中加入这一行:『DenyGroups nossh』
3. 重新激活 sshd : /etc/rc.d/init.d/sshd restart
 
o 不许某个使用者登入:跟 DenyGroups 类似,使用 DenyUsers 即可!参考
sshd_config
的设定!

? /etc/hosts.allow 及 /etc/hosts.deny :

  简单的方法就是:


? iptables
  多几层保护也很好的!所以也能够使用 iptables ,针对几个网域设定一下/etc/hosts.allow 和 /etc/hosts.deny !
阅读(255) | 评论(0) | 转发(0) |
0

上一篇:SSH keygen zz

下一篇:linux下SSH的配置 zz

给主人留下些什么吧!~~