您的位置:首页 > 运维架构 > Linux

Linux系统管理实践(2):OpenSSH远程管理配置

2016-07-29 00:00 741 查看
OpenSSH是SSH(Secure SHell)协议的免费开源实现。它用安全、加密的网络连接工具代替了telnet、ftp、rlogin、rsh和rcp工具。OpenSSH支持SSH协议的版本1.3、1.5和2。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议), rcp(远程复制协议)都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程的中的数据,并由此来代替原来的类似服务。
客户端工具主要有ssh,scp,sftp。ssh命令用来登录运行有OpenSSH服务的远程电脑。scp命令可以用来通过安全、加密的连接在机器间传输文件。它与rcp相似。sftp命令可以用来打开一次安全互动的FTP会话。它与ftp相似,只不过,它使用安全、加密的连接。
OpenSSH服务sshd是一个典型的独立守护进程(standalone daemon),但也可以根据需要通过网络守护进程inetd或xinted来加载。OpenSSH服务通过/etc/ssh/sshd_config文件进行配置。默认配置文件在多数情况下应该足以胜任。如果你想自己定制一些配置选项,可阅读sshd的MAN PAGE来获取能够在配置文件中定义的关键字列表。
1、OpenSSH配置文件: 为/etc/ssh/sshd_config,在Ubuntu下的默认设置为:

# sshd_config:软件包产生的配置文件
# 更多细节参看sshd(8)的手册页
# sshd监听22端口
Port 22
# 使用ListenAddress选项来让sshd只监听给定的目标地址
#ListenAddress ::
#ListenAddress 0.0.0.0
# SSH协议的版本
Protocol 2
# 第2版协议的热键
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
# 为安全起见,特权分离模式是开启的
UsePrivilegeSeparation yes
# 针对第1版的服务器的密钥长度和周期(超过时间间隔后生成新的密钥)
KeyRegenerationInterval 3600
# 密钥长度(位数)
ServerKeyBits 768
# 日志设备(即日志文件)、日志级别:
SyslogFacility AUTH
LogLevel INFO
# 登录时的认证等待时间、是否允许用root账号登录、是否为严格登录模式等:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
# RSA认证:是否使用RSA认证
RSAAuthentication yes
# 可以使用非对称密钥(即公钥密码)认证
PubkeyAuthentication yes
# 用户认证使用的公钥
#AuthorizedKeysFile	%h/.ssh/authorized_keys
# 基于主机的认证:
# 不要读取用户的~/.rhosts和~/.shosts文件(即忽略它们)
IgnoreRhosts yes
# 为了这个能工作,你将需要/etc/ssh_known_hosts中的主机密钥
RhostsRSAAuthentication no
# 不使用基于主机的认证(与第2版协议中的类似)
HostbasedAuthentication no
# 如果你不信任RhostsRSAAuthentication选项的~/.ssh/known_hosts文件,取消下面的注释
#IgnoreUserKnownHosts yes
# 空密码认证:是否允许使用空密码的用户登录(不建议设置成yes)
PermitEmptyPasswords no
# 挑战应答方式认证:是否允许挑战应答方式
ChallengeResponseAuthentication no
# 基于隧道的明文密码认证:是否允许使用基于隧道的明文密码
#PasswordAuthentication yes
# Kerberos认证选项
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI认证选项
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
# 是否允许用户运行远程主机上的X程序
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
# 是否禁止X11Forwarding(no为不禁止,即允许X11Forwarding)
#UseLogin no
# 设置同时发生的未验证的并发量,即同时可以有几个
#MaxStartups 10:30:60
#Banner /etc/issue.net
# 允许客户端传递本地环境变量
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# PAM认证:是否使用PAM认证
UsePAM yes


其他一些常用的选项:

AllowGroups wheel myguest     # 只允许wheel组和myguest组的用户登录
AllowUsers teczm authen@192.168.8.5     # 允许来自以上组的teczm用户和authen用户登录,
# 并且authen用户只能从主机192.168.8.5登录
DenyGroups      # 拒绝登录的组,参数设置和AllowGroups一样
DenyUsers       # 拒绝登录的用户,参数设置和AllowUsers一样
AllowTcpForwarding yes     # 是否转发的TCP包都被允许。默认是yes


2、配置技巧:
(1)登录LogLevel INFO:在默认的设置下,sshd的登录日志以INFO级别写入AUTH系统日志设备(SyslogFacility)。如果ssh作为你远程控制Ubuntu主机的主要方式,您应该考虑将日志级别由INFO提升为VERBOSE。这样,在日志中将会记录更多有关登录成功和登录失败的信息,即所有ssh登录成功的信息,和未成功登录的信息都以VERBOSE的日志级别记录在你的AUTH文件中(/var/log/auth.log)。
(2)验证LoginGraceTime 120:默认设置下,通过sshd登录Ubuntu后,必须在出现操作提示符的120秒(2分钟)内登录系统,不然sshd将会自动切断与主机的连接。这个时间值可以通过LoginGraceTime进行设置。将它设得更短一些,比如设为20秒,可以有效的防御自动化阻遏(thwarting automated),暴力攻击ssh,和拒绝服务式攻击(DDOS)。
(3)登录图形界面X11Forwarding yes:如果你不希望有人能够通过ssh使用图形用户界面的程序(这些程序通过SSH通道-SSH tunnel显示),你可以通过X11Forwarding指令将其关闭,由此来减少很多攻击的可能。一般情况下我们并不推荐关闭X11 forwarding,如果某个服务是基于使用X11或LTSP的,将X11 Forwarding关闭将导致此服务不可用。
(4)显示警示条Banner /etc/issue.net:使用这个设置时,会显示一个不欢迎的警示条,它将告知好奇的人,有可能是未经许可的恶意登录到你的OpenSSH服务器的人,远程访问你的计算机是必须经过许可,并且需要用户授权。有一个的不欢迎警示条目可以帮你成功地起诉攻击者,或别的未经许可的组织经由ssh访问你的服务器。你需要在/etc/issue.net文件中加入一些警示信息,比如声明非授权的用户访问时将受到法律追究等(也可以在/etc/issue中添加,然后创建链接/etc/issue.net来指向它。注意警告信息若放在/etc/issue中,则从本地控制台或远程网络登录时都会显示;若放在/etc/issue.net中,则只显示给从远程网络登录的用户),重新启动sshd后,任何远程用户想要登陆时都会在登陆提示符前看到上面的信息。
(5)允许和拒绝用户和用户组:使用上面列出相应选项来配置即可。配置完后要用sudo /etc/init.d/ssh restart重启sshd服务。
(6)让sshd监听不同的端口:由于近来自动扫描ssh和暴力攻击的工具大量增长,很多装有ssh的用户和管理员决定给ssh用一个非标准的tcp端口,标准的sshd侦听端口是tcp/22,而暴力扫描攻击工具都典型的被配置成侦听这个端口用来查找后门。尽管从使用简单密码的ssh登陆切换到使用基于键盘方式的登陆,就象在指南中下部分我们要讨论的显著减少了自动工具猜测出一个正确的在你系统中登陆的机会,一些人觉得加入更多偏僻字的层数可能更会增强安全性。假设要侦听tcp/22和tcp/2222两个端口(例如,局域网连接使用传统的tcp/22,但外部连接使用tcp/2222),这不需要在你的路由器时配置网络地址翻译规则或者类似的东西,只要在sshd_config中有Port 22和Port 2222这两个指令即可。
(7)生成RSA密匙对:基于key的授权是可用的ssh授权方法中的一种,它比简单的密码(Ubuntu默认密码)更安全,最明显的就是很难暴力破解。以RSA公钥密码为例,要基于Key来登录ssh ,需要生成一套公有/私有RSA密匙对,并使用它们由OpenSSH登录你的Ubuntu计算机。
在客户机上(用户名为zhouhuansheng)用命令ssh-keygen -t rsa来生成一个RSA公有/私有密匙对,会有一系列的提示过程:

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zhouhuansheng/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/zhouhuansheng/.ssh/id_rsa.
Your public key has been saved in /home/zhouhuansheng/.ssh/id_rsa.pub.
The key fingerprint is:
c7:b4:49:0b:6d:16:f9:c1:1f:d7:7e:87:5d:3a:88:f6 zhouhuansheng@laptop-zhou


接受~/.ssh/id_rsa的默认位置。输入一个passphrase(口令短语),再输入一次来确认,注意你应该选择非常坚固的便于记忆的passphrase。生成的公钥被写入到~/.ssh/id_rsa.pub,私钥被写入到~/.ssh/id_rsa,作为你登录远程服务器时的验证文件,保存在客户机端。注意决不能把私钥出示给任何人。接下来就要把公钥文件安装到远程服务器上(假设名为madison)。可以直接把公钥文件id_rsa.pub拷贝到远程服务器的你的主目录下的.ssh目录下(假设你在服务器的账号为jackzhou,则在/home/jackzhou/.ssh目录下)的authorized_keys文件中。有一个命令可以快捷地把公钥文件安装到远程机器上,即ssh-copy-id -i ~/.ssh/id_rsa.pub jackzhou@madison ,文件名成为authorized_keys。madison服务器上的PubkeyAuthentication选项还要设置为yes,以允许使用非对称密匙(即公钥密码)来登录。
设置完后,你就可以在客户机端用"ssh jackzhou@madison"登录远程机器了,你会看到一个提示"Enter passphrase for key '/home/zhouhuansheng/.ssh/id_rsa':",要你给出密钥的passphrase,输入你的passphrase,即可登录。
(8)禁止弱密码登录:如过你已经成功建立了一个基于RAS密匙的登陆,你可能希望这是你Ubuntu系统上唯一可接受的授权方式,完全放弃弱密码授权。只要把PasswordAuthentication设为no即可,按照这个路线,将能确保自动暴力扫描和攻击工具对你的公共系统攻击更加困难。不过对于基于密钥的登录方式,一旦你丢失了密匙,你会发现你自己也被关在系统外面!

附:
RSA:是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。
rcp:远程复制协议。该协议允许用户从网络的一个远端主机或者服务器上的文件系统中上载和下载文件。远端复制协议使用TCP协议来确保数据传输的可靠性。
passphrase:相对“密码”(password)而言,密码短语(passphrase)口令以其更为严密的安全性正受到IT界的广泛关注。在功能上,passphrase同密码一样,只是长度较密码长。通常passphrase使用4到5个单词取代原来数字、字母结合的方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: