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

全部博文(486)

文章存档

2011年(52)

2010年(107)

2009年(289)

2008年(38)

我的朋友

分类: LINUX

2009-05-16 17:43:55


Linux下SSH服务配置

来源: ChinaUnix博客  日期: 2006.11.10 12:03 (共有0条评论)
 

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 的所有需要的套件了!这包含了可以产生密码等协议的

套件与

套件。此外,在目前的 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 安装的步骤呢!
  

  需要注意的是, 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 这种类型的联机软件呢,他也是免费的软件喔!取得的方式可以参考底下的网站:

  好了,那么要取得哪几个程序呢?其实只要 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
#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 即可!参考

的设定!

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

  简单的方法就是:


· iptables
  多几层保护也很好的!所以也可以使用 iptables ,针对几个网域设定一下/etc/hosts.allow 与 /etc/hosts.deny !
阅读(275) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~