人有病得治,系统有补丁也要打。Linux redhat6.5系统自带的openssh版本为5.3p1,含有很多漏洞信息,基于安全要求需要升级到最新版本,官网已经发布到8.0版本了,为此整理了此文。包含知识点:openssh升级、linux启动过程。
升级前主要漏洞信息有:
OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325)
OpenSSH auth_password函数拒绝服务漏洞(CVE-2016-6515)
OpenSSH 远程代码执行漏洞(CVE-2016-10009)
Openssh MaxAuthTries限制绕过漏洞(CVE-2015-5600)
OpenSSH 安全漏洞(CVE-2016-1908)
OpenSSH J-PAKE授权问题漏洞(CVE-2010-4478)
OpenSSH 安全限制绕过漏洞(CVE-2016-10012)
OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325)
OpenSSH auth_password函数拒绝服务漏洞(CVE-2016-6515)
OpenSSH 远程代码执行漏洞(CVE-2016-10009)
Openssh MaxAuthTries限制绕过漏洞(CVE-2015-5600)
OpenSSH 安全漏洞(CVE-2016-1908)
OpenSSH J-PAKE授权问题漏洞(CVE-2010-4478)
OpenSSH 安全限制绕过漏洞(CVE-2016-10012)
OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325)
OpenSSH auth_password函数拒绝服务漏洞(CVE-2016-6515)
OpenSSH 远程代码执行漏洞(CVE-2016-10009)
Openssh MaxAuthTries限制绕过漏洞(CVE-2015-5600)
OpenSSH 安全漏洞(CVE-2016-1908)
OpenSSH J-PAKE授权问题漏洞(CVE-2010-4478)
OpenSSH 安全限制绕过漏洞(CVE-2016-10012)
OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325)
OpenSSH auth_password函数拒绝服务漏洞(CVE-2016-6515)
OpenSSH 远程代码执行漏洞(CVE-2016-10009)
Openssh MaxAuthTries限制绕过漏洞(CVE-2015-5600)
OpenSSH 安全漏洞(CVE-2016-1908)
OpenSSH J-PAKE授权问题漏洞(CVE-2010-4478)
OpenSSH 安全限制绕过漏洞(CVE-2016-10012)
Openssh升级思路
在升级前回顾下openssh,这里直接引用下百度百科里的解释,OpenSSH 是 SSH (Secure SHell)协议的免费开源实现。SSH协议族可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。
说到底无非是一个远程连接,很多网上的升级教程都会建议安装telnet以免升级失败,无法连接了。其实我们服务器一般是虚拟机或者有kvm来管理,没必要做这一步。
我们知道linux里面很多软件是有相互依赖关系的,在上一篇文章中就提到了如何处理这种依赖安装,我们的系统环境是Redhat Enterprise6.5(Santiago),直接用yum安装依赖包就可以了。
而由于linux系统版本多样,所以这里采用源码编译安装来处理。
完整升级步骤
1.官网下载源代码openssh-8.0p1.tar.gz,上传到服务器解压:
#tar–zxvf openssh-8.0p1.tar.gz
2.备份ssh原有的配置文件
#tar zcvf /etc/ssh.tar.gz /etc/ssh
3.卸载原来的sshd服务(也可以不卸载)
#yum remove openssh
4.安装openssh编译所需要的依赖包
#yum install -y gcc libstdc++-devel gcc-c++zlib-devel keyutils-libs-devel libcom_err-devel libsepol-devel pkgconfiglibsepol libselinux-devel krb5-devel openssl-devel
5.编译安装
#cd openssh-8.0p1
#./configure
#make
#make install
成功后默认路径如下:
User binaries: /usr/local/bin
System binaries: /usr/local/sbin
Configuration files: /usr/local/etc
Askpass program: /usr/local/libexec/ssh-askpass
Manual pages: /usr/local/share/man/manX
PIDfile: /var/run
Privilege separation chroot path: /var/empty
sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
6.启动文件修改(路径不要配错了,否则连接会有问题)
将安装源程序目录下的/openssh-8.0p1/contrib/redhat/sshd.init 复制到 /etc/init.d/sshd
修改启动文件:
# vi/etc/init.d/sshd #修改sshd文件
SSHD=/usr/local/sbin/sshd
/usr/local/bin/ssh-keygen -A
/sbin/restorecon /usr/local/etc/ssh_host_rsa_key.pub
/sbin/restorecon /usr/local/etc/ssh_host_dsa_key.pub
/sbin/restorecon /usr/local/etc/ssh_host_ecdsa_key.pub
7.修改配置文件
#vi /usr/local/etc/sshd_config #配置sshd_config文件
PermitRootLoginyes #允许root登录
8.启动sshd服务(如果有问题,可以到kvm或者虚拟机直连检查配置文件是否路径有问题)
#service sshd start
9.验证
#ssh-V
如果以上均正常执行,则会看到版本已经升级为OpenSSH_8.0p1了。
10.开机自动运行
#chkconfig sshd on
或者在/etc/rc.d/rc.local文件中增加 /etc/init.d/sshd start 命令,要记得开启rc.local的执行权限chmod +x/etc/rc.d/rc.local
Linux启动过程
一款优秀的软件不会让你抓破脑袋的,openssh就是这样优秀,升级过程按照如上十步执行还是比较简单舒心的,网上类似教程也多。升级过程中的关键知识点我们一起来温故一下:
yum安装依赖
/etc/init.d/sshd的启动过程
服务开机自启动
这里我们讨论下linux下服务开机启动原理。本次升级中的主要就是执行文件sshd,在前面升级步骤6中将其放到了/etc/init.d目录下,这个目录其实是链接到/etc/rc.d/init.d的,也就是说真正作用是在/etc/rc.d/init.d下,而/etc/init.d下面的文件相当于windows系统里面的桌面快捷方式。
进入/etc/rc.d目录,里面有init.d目录以及很多rcX.d这样的目录,在rcX.d里面有很多S和D开头的文件,其中也包括我们本次升级的sshd文件。/etc/rc.d/init.d这个目录下的脚本就类似与windows中的注册表,在系统启动的时候执行。
运行级别
而这里Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。init进程上来首先做的事是去读取/etc/目录下inittab文件中initdefault id值,这个值称为运行级别(run-level)。它决定了系统启动之后运行于什么级别。运行级别决定了系统启动的绝大部分行为和目的。这个级别从0到6 ,具有不同的功能。不同的运行级定义如下,前面升级步骤10里面增加的chkconfig sshd on其实就是在2345开启了启动任务,5也就是窗口带界面的方式。
而rc.d下的子目录rc0.d,rc1.d ….. rc6.d,都是到init.d目录的一部分脚本链接。每个级别要执行哪些服务就在相对应的目录下,比如级别5要启动的服务就都放在rc5.d下,同样放在这个rc5.d下的也都是一些链接文件,链接到init.d中相对应的文件,而真正执行都是要到/etc/rc.d/init.d里的脚本去找。
系统启动步骤
在升级的第10步里面的rc.local则是系统预留给用户的可以添加自定义执行的文件,完全是操作习惯的问题,有点像windows系统的开机启动目录。综上,从开机到登录,便可以梳理出如下几步了:
第一步:通过/boot/vm进行启动 vmlinuz(内核引导)
第二步:init /etc/inittab (进入哪个级别,命令行还是窗口模式等)
第三步:启动相应的脚本,并且打开终端(启动哪些服务)
rc.sysinit
rc.d(里面的脚本)
rc.local
第四步:启动login登录界面 login (登录授权)
第五步:在用户登录的时候执行sh脚本的顺序(一些环境变量),每次登录的时候都会完全执行的:
/etc/profile.d/file
/etc/profile
/etc/bashrc
/root/.bashrc
/root/.bash_profile
题外话
到这基本了解了linux的启动过程和openssh升级了吧。系统有漏洞不及时打补丁修复可能被黑客攻击,真的不能抱有侥幸心理,中勒索病毒概率还是蛮大的。系统如此,人更甚!人如果有短板也需及时充电,沈大师还抽空读书呢
参考链接:
[1].Openssh官网下载:https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
[2].Linux启动过程:https://www.runoob.com/linux/linux-system-boot.html