SSH(Secure Shell)是目前较可靠,专为远程登录会话和其他网络服务提供安全性保障的协议。
利用SSH协议可以有效防止远程管理过程中的信息泄露问题。透过SSH可以对所有传输的数据进行加密,并防止DNS欺骗和IP欺骗。OpenSSH是SSH协议的免费开源实现。
加固SSH服务,是指修改SSH服务中的配置来设置系统使用OpenSSH协议时的算法、认证等参数,从而提高系统的安全性
1、SSH LoginGraceTime设置为一分钟或
更短
规则描述:LoginGraceTime参数指定成功验证SSH服务器的时间。宽限期的时间越长,可以存在更开放的未认证连接。宽限期应限制在适当的组织限制,以确保服务可用于所需的访问。
审计描述:运行以下命令并验证输出LoginGraceTime为60或更少:# grep '^LoginGraceTime' /etc/ssh/sshd_config LoginGraceTime 60(默认值为120)
修改建议:编辑/etc/ssh/sshd_config文件,设置参数如下:LoginGraceTime 60
解决办法: sed -i "s/#LoginGraceTime 2m/LoginGraceTime 60/g" /etc/ssh/sshd_config
grep '^LoginGraceTime' /etc/ssh/sshd_config grep 'LoginGraceTime' /etc/ssh/sshd_config sed -i "s/#LoginGraceTime 2m/LoginGraceTime 60/g" /etc/ssh/sshd_config grep 'LoginGraceTime' /etc/ssh/sshd_config service sshd restart
2、SSH的LogLevel设置成INFO或VERBOSE
规则描述:INFO指定当用户登录或者注销活动将会被记录。VERBOSE级别的日志中会记录使用的SSH公钥的指纹,可在发生安全事件之后进行分析与审计。
审计描述:运行以下命令验证输出匹配: #grep '^LogLevel' /etc/ssh/sshd_config #LogLevel INFO or LogLevel VERBOSE or 空
修改建议:编辑/etc/ssh/sshd_config文件设置参数如下: LogLevel INFO或者LogLevel VERBOSE
grep '^LogLevel' /etc/ssh/sshd_config grep 'LogLevel' /etc/ssh/sshd_config sed -i "s/#LogLevel INFO/LogLevel VERBOSE/g" /etc/ssh/sshd_config grep 'LogLevel' /etc/ssh/sshd_config service sshd restart
3、SSH X11转发被禁用
规则描述:参数X11Forwarding提供了操作远程连接X11界面的功能。
审计描述:运行下面的命令并确认输出匹配: # grep '^X11Forwarding' /etc/ssh/sshd_config X11Forwarding no
修改建议:编辑/etc/ssh/sshd_config文件确保参数设置如下: X11Forwarding no
grep '^X11Forwarding' /etc/ssh/sshd_config sed -i "s/X11Forwarding yes/X11Forwarding no/g" /etc/ssh/sshd_config grep '^X11Forwarding' /etc/ssh/sshd_config service sshd restart
4、SSH中IgnoreRhosts设置为enabled
规则描述:IgnoreRhosts参数指定.rhosts和.shosts文件不能在RhostsRSAAuthentication或者HostbasedAuthentication中使用。
审计描述:运行如下命令并确认输出匹配: # grep '^IgnoreRhosts' /etc/ssh/sshd_config IgnoreRhosts yes
修改建议:编辑/etc/ssh/sshd_config文件设置参数如下: IgnoreRhosts yes
grep '^IgnoreRhosts' /etc/ssh/sshd_config grep 'IgnoreRhosts' /etc/ssh/sshd_config sed -i "s/#IgnoreRhosts yes/IgnoreRhosts yes/g" /etc/ssh/sshd_config grep '^IgnoreRhosts' /etc/ssh/sshd_config service sshd restart
5、SSH中HostbasedAuthentication关闭
规则描述:HostbasedAuthentication参数指定是否允许受信任的主机通过使用.rhosts 或/etc/hosts.equiv进行认证;当公钥客户端认证成功,用户即登录;此选项仅使用于SSH 2。
审计描述:运行如下命令并确认输出匹配: # grep '^HostbasedAuthentication' /etc/ssh/sshd_config HostbasedAuthentication no
修改建议:编辑/etc/ssh/sshd_config文件设置参数如下: HostbasedAuthentication no
grep '^HostbasedAuthentication' /etc/ssh/sshd_config grep 'HostbasedAuthentication' /etc/ssh/sshd_config sed -i "s/#HostbasedAuthentication no/HostbasedAuthentication no/g" /etc/ssh/sshd_config grep '^HostbasedAuthentication' /etc/ssh/sshd_config service sshd restart
6、SSH PermitEmptyPasswords被禁用
规则描述:PermitEmptyPasswords参数指定SSH服务器是否允许使用空密码字符串登录帐户。
审计描述:运行以下命令并验证输出是否匹配:# grep '^PermitEmptyPasswords' /etc/ssh/sshd_config PermitEmptyPasswords no
修改建议:编辑/etc/ssh/sshd_config文件,加入如下内容:PermitEmptyPasswords no
grep '^PermitEmptyPasswords' /etc/ssh/sshd_config grep 'PermitEmptyPasswords' /etc/ssh/sshd_config sed -i "s/#PermitEmptyPasswords no/PermitEmptyPasswords no/g" /etc/ssh/sshd_config grep '^PermitEmptyPasswords' /etc/ssh/sshd_config service sshd restart
7、SSH PermitUserEnvironment被禁用
规则描述:PermitUserEnvironment选项允许用户向ssh守护程序呈现环境选项。
审计描述:运行以下命令并验证输出是否匹配:# grep '^PermitUserEnvironment' /etc/ssh/sshd_config PermitUserEnvironment no
修改建议:编辑/etc/ssh/sshd_config文件,加入如下内容:PermitUserEnvironment no
grep '^PermitUserEnvironment' /etc/ssh/sshd_config grep 'PermitUserEnvironment' /etc/ssh/sshd_config sed -i "s/#PermitUserEnvironment no/PermitUserEnvironment no/g" /etc/ssh/sshd_config grep '^PermitUserEnvironment' /etc/ssh/sshd_config service sshd restart
SSH服务的所有加固项均保存在配置文件/etc/ssh/sshd_config中,服务端各加固项的含义、加固建议 可以参考如下表格
SSH其它安全加固建议
(参考openEuler官网文档 https://openeuler.org/zh/docs/20.09/docs/SecHarden/系统服务.html )
1)、SSH服务仅侦听指定IP地址
出于安全考虑,建议用户在使用SSH服务时,仅在必需的IP上进行绑定侦听,而不是侦听0.0.0.0,可修改/etc/ssh/sshd_config文件中的ListenAddress配置项。
打开并修改/etc/ssh/sshd_config文件 vi /etc/ssh/sshd_config 修改内容如下,表示绑定侦听IP为 192.168.1.100,用户可根据实际情况修改需要侦听的IP ... ListenAddress 192.168.1.100 ... 重启SSH服务 systemctl restart sshd.service
2)、限制SFTP用户向上跨目录访问
SFTP是FTP over SSH的安全FTP协议,对于访问SFTP的用户建议使用专用账号,只能上传或下载文件,不能用于SSH登录,同时对SFTP可以访问的目录进行限定,防止目录遍历攻击,具体配置如下:说明:sftpgroup为示例用户组,sftpuser为示例用户名
创建SFTP用户组 groupadd sftpgroup 创建SFTP根目录 mkdir /sftp 修改SFTP根目录属主和权限 chown root:root /sftp chmod 755 /sftp 创建SFTP用户 useradd -g sftpgroup -s /sbin/nologin sftpuser 设置SFTP用户的口令 passwd sftpuser 创建SFTP用户上传目录 mkdir /sftp/sftpuser 修改SFTP用户上传目录属主和权限 chown root:root /sftp/sftpuser chmod 777 /sftp/sftpuser 修改/etc/ssh/sshd_config文件 vi /etc/ssh/sshd_config 修改内容如下: #Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH Subsystem sftp internal-sftp -l INFO -f AUTH ... Match Group sftpgroup ChrootDirectory /sftp/%u ForceCommand internal-sftp 说明: %u代表当前sftp用户的用户名,这是一个通配符,用户原样输入即可。 以下内容必须加在/etc/ssh/sshd_config文件的末尾。 Match Group sftpgroup ChrootDirectory /sftp/%u ForceCommand internal-sftp 重启SSH服务 systemctl restart sshd.service
3)SSH远程执行命令
OpenSSH通用机制,在远程执行命令时,默认不开启tty,如果执行需要密码的命令,密码会明文回显。出于安全考虑,建议用户增加-t选项,确保密码输入安全。
如下:ssh -t testuser@192.168.1.100 su
说明:192.168.1.100为示例IP,testuser为示例用户