您的位置:首页 > 其它

构建SSH远程登录系统(笔记)

2013-10-31 13:48 246 查看
SSH(Secure Shell)是标准的网络协议,主要用于实现字符界面的远程登录管理,以及远程文件复制的功能。SSH协议对通过网络传输的数据进行了加密处理,其中也包括了用户登录时输入的用户口令。与早期的telnet(远程登录)、rsh(Remote Shell,远程执行命令)、rcp(remote filecopy,远程文件复制)等应用相比,SSH协议提供了更好的安全性。

OpenSSH服务端安全控制

在RHEL5系统中,OpenSSH服务器和客户端的相关软件包是默认安装的,并已将sshd添加为标准的系统服务。执行“service sshd start”命令即可按缺省配置启动sshd服务,包括root在内的大部分用户(只要有能执行命令的有效shell)都可以远程登录系统。

1、用户的远程登录控制

sshd服务的配置文件默认位于/etc/ssh/sshd_config,适当调整文件中的配置项,可以进一步增强sshd远程登录服务的安全性。修改配置文件后,应该执行“service sshd reload”使新的设置生效。

关于/etc/ssh/ssh_config配置文件的帮助信息可以使用“man sshd_config”命令进行查看,以下是调整sshd_config 配置文件内容的几个实例。

修改监听的端口号(默认为22),并限制只在一个IP地址上提供服务。
Port 2345
ListenAddress 192.168.2.1

禁止root用户和密码为空的用户远程登录系统。
PermitRootLogin no
PermitEmptyPasswords no
当root用户被禁止登录时,可以先使用普通用户账号进入系统,在需要执行管理任务时再使用“su-”的方式切换为root,或者在服务器中配置sudo以执行部分管理命令

限制用户登录验证过程的时间(默认为两分钟)及最大重试次数,若超过限制后仍未能登录则将断开连接。
LoginGraceTime 2m
MaxAuthTries 6

拒绝用户zhangsan、lisi远程登录系统,其他均允许。
vi /etc/ssh/sshd_config

DenyUsers zhangsan lisi

允许用户jerry远程登录系统、允许用户admin从主机61.23.24.25远程登录系统,其他用户均拒绝(不要同时使用AllowUsers和DenyUsers配置)
AllowUsers jerry admin@61.23.24.25

2、身份验证方式

OpenSSH服务默认采用以下两种方式对远程登录的用户进行身份验证。

密码验证:只需使用服务器中系统用户的账号名称和密码即可通过验证,这种方式使用最简便易用。但是,从用户角度来说不能保证正在连接的服务器就是他想连接的服务器(可能被假冒),从服务器角度来说对暴力破解密码的防护能力较弱。

秘钥对验证:需要提供相配对的秘钥才能通过验证。通常由客户端的用户为自己创建一对秘钥文件(即公钥和私钥),然后将公钥文件放在需要访问的SSH服务器上。当远程登录服务器时,系统将结合公钥文件进行加密/解密关联验证,增强了用户登录及数据传递过程的安全性。用户还可以在客户端为自己的秘钥文件设置密码进行保护。

如果对某一个用户两种验证方式都可用,服务器将优先使用秘钥对验证。对于安全性要求较高的服务器,可以禁用普通的密码验证,只对特定管理员用户使用秘钥对验证。

SSH客户端应用

1、命令行客户端工具

1)ssh远程登录
使用ssh命令远程登录服务器时,最典型的命令格式如下:
ssh username@sshserver

其中,sshserver表示需要登录到的SSH服务器的地址,可以是主机名或者IP地址;而username表示用于登录的用户账号,该账号应该是SSH服务器中的系统用户账号。用户名与服务器地址之间使用“@”符号进行分隔(虽然类似于电子邮件地址,但是两者并没有直接联系)。
当用户第一次SSH服务器时,必须接受服务器发来的RSA秘钥(根据提示输入yes)后才能继续验证。接受的秘钥信息将保存到~/.ssh/known_hosts文件中。

2)scp远程复制文件

使用scp命令可以通过安全的连接与远程的SSH服务器相互拷贝文件。在复制文件时,用户必须对源文件/目录有读取权限、对目标目录有写入权限才能成功。

将SSH服务器中的/etc/passwd文件复制到客户端的当前工作目录下。
scp jerry@192.168.4.1:/etc/passwd ./

将客户端的/boot/grub目录复制到SSH服务器中的/home/tom/目录下(添加-r选项)
scp -r /boot/grub/ tom@192.168.168.11:/home/tom/

3)、sftp安全FTP

使用sftp命令连接到SSH服务器,采用了与FTP类似的登录过程和交互式环境,方便在下载或上传文件前浏览目录资源。通过sftp传输数据的过程同样也是加密的。

使用sftp远程登录到服务器192.168.4.2,并上传一个文件到用户宿主目录下。

sftp tom@192.168.4.2
ls
put /boot/config-2.6.18-8.el5
ls
bye

2、图形界面客户端工具

常见的SSH图形客户端工具由putty、ssh secure shell client、secure CRT、winSCP,其中winSCP可以基于sftp或scp方式传输文件,其他的客户端工具主要用于远程登录。

构建秘钥对验证的SSH登录体系

1、在客户端创建秘钥对

在客户端使用ssh-keygen命令工具为当前用户创建秘钥对文件,可以使用的加密算法为RSA或DSA(ssh-keygen命令的-t选项用于指定算法类型)。

以zhangsan用户登录到客户端主机,并建立基于RSA算法的SSH秘钥对。
ssh-keygen -t rsa

ls -lh ~/.ssh/

ssh-keygen命令执行完毕后会将秘钥文件保存到用户指定的位置,默认位于用户宿主目录下的.ssh/目录下。其中id_rsa.pub是用户的公钥文件,可以提供给SSH服务器;id_rsa是用户的私钥文件,权限默认为600,私钥文件必须妥善保管,不能泄露给他人。用户可以在创建秘钥对的过程中设置一个私钥密码短语(passphrase),以更好的控制私钥文件的使用权限。

2、上传公钥文件给服务器

将客户端用户创建的公钥文件发送给Openssh服务器,并保存到服务器的授权密钥库中。服务器的授权密钥库文件位于各用户宿主目录下的.ssh/目录,默认的文件名是authorized_keys。

传递公钥文件时可以选择FTP、Samba、HTTP、SCP甚至发送Email等任何方式(过程略)。

在SSH服务器端,将客户端公钥文件的内容添加至lisi用户的授权密钥库。

mkdir -p ~lisi/.ssh

cat id_rsa.pub >> ~lisi/.ssh/authorized_keys

由于sshd默认采用严格的权限监测模式(StrictModes yes),因此需要注意授权密钥库文件 authorized_keys的权限设置;所有者要求是登录的目标用户或root,同组或其他用户对该文件不能有写入权限。否则可能无法使用密钥验证成功登录系统。通常可以由root建立该文件,权限保持为644即可。

ls -l /home/lisi/.ssh/authorized_keys

3、调整服务器设置

在OpenSSH服务器中,启用密钥对验证方式,并可以禁用密码验证方式(视具体要求而定)。修改完配置文件后重启sshd服务。

vim /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

service sshd restart

4、使用密钥对验证方式登录服务器

以创建密钥对的用户账户(如zhangsan)登录客户端本机,执行ssh命令,以服务器中授权用户(lisi)的身份远程登录系统。如果密钥对验证方式配置成功,服务器将会使用密钥文件进行验证,并要求用户输入私钥文件的密码短语(如果密码短语为空,则直接登入远程服务器)。

使用密钥对验证的方式登录时,不需要知道服务器中对应用户(如lisi)的密码。

ssh lisi@192.168.4.1

使用TCP Wrappers机制

在linux系统中,各种网络服务程序基本上都会有一些针对客户端访问的控制策略,如smb、bind、httpd、sshd等,都可以提供针对客户端地址的访问控制。除此以外,服务器通常还会处于网络层防火墙的强力保护之下。TCP Wrappers(TCP 封套)机制,作为防火墙后的第二道防线,为各种网络服务器提供额外的安全防护。

TCP Wrappers可以将其他的TCP服务程序“包裹”起来,增加了一个额外的安全检测机制,外来的连接请求首先要通过这层安全检测,获得许可后才能被服务程序所接受。同时它还可以记录所有企图访问被包装服务的行为,为管理员提供丰富的安全分析资料。

大多数linux发行版中都默认提供了TCP Wrappers功能,在RHEL5系统中对应的软件包是tcp_wrappers-7.6-40.2.1,该软件包提供了主要执行文件tcpd和共享链接库文件libwrap.so.*。TCP Wrapper机制的实现也对应有两种方式。

直接使用tcpd对其他服务程序进行包装,需要运行tcpd。
由其他网络服务程序调用libwrap.so.*链接库,无需运行tcpd。

通常第二种方式应用更加广泛也更有效率,如vsftpd、sshd以及xinetd超级服务器程序,都调用了libwrap共享库(使用ldd命令可以查看执行程序的共享库信息)。





xinetd 是一个特殊的服务管理程序,通常被称为超级服务器。xinetd也使用了TCP Wrappers机制,为更多的服务程序提供安全防护。xinetd可以为每一个保护的程序建立一个配置文件,位于文件夹/etc/xinetd.d/下,TCP Wrappers 机制同样适用于其中的每一个服务程序。

hosts.allow 和 hosts.deny策略应用

TCP Wrappers机制主要针对服务程序和客户端地址进行访问控制,控制策略在/etc/hosts.allow 和 /etc/hosts.deny两个文件中设置,分别对应运行的和拒绝的策略。

1、策略配置格式

两个文件使用相同格式的配置记录,常用的记录格式: <服务程序列表>:<客户机地址列表>
两个字段之剑使用冒号分隔,每个列表内可以包含多项内容,不同的列表项使用逗号分隔。

服务程序列表字段可以表示为以下形式。

ALL代表所有的服务
单个服务程序名称,例如“vsftpd”代表vsftpd服务器程序
多个服务程序组成的列表,例如“vsftpd,sshd”。

客户机地址列表字段可以表示为以下形式。

ALL代表所有的客户机地址。
LOCAL代表本机地址。
单个IP地址,例如“192.168.4.4”
网络段地址,例如“192.168.4.0/255.255.255.0”
以点号“.”开始的域名,例如“.benet.com”匹配benet.com域中的所有主机。
以点号“.”结束的网络号,例如“192.168.4.”匹配192.168.4.0/24网段内的所有IP地址。
允许使用通配符“*”、“?”,例如“10.0.8.2*”匹配以10.0.8.2开头的所有IP地址(包括如10.0.8.2、10.0.8.20、10.0.8.200等)。但是不要在以点号“.”开始或结束的模式中使用。
以上多个客户机地址也可以组成列表,例如“192.168.1.,172.17.17.,.benet.com”

2、访问控制原则

在应用hosts.allow、hosts.deny文件中的访问控制策略时,遵循以下顺序和原则。

如果在/etc/hosts.allow文件中找到相匹配的策略,则允许访问。
否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问。
如果在两个文件中都找不到相匹配的策略,则允许访问。

3、TCP Wrappers配置实例

在应用TCP Wrappers访问控制时,较宽松的策略可以是“允许所有,拒绝个别”,较严格的策略是“允许个别,拒绝所有”。前者只需在/etc/hosts.deny设置对应的个别拒绝策略就可以了;后者则除了在/etc/hosts.allow中设置个别允许策略以外,还需要在/etc/hosts.deny文件中添加“ALL:ALL”的策略设置。
本文出自 “朵夫” 博客,请务必保留此出处http://tibet.blog.51cto.com/3847517/1317676
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: