从openssh漏洞修复谈linux启动逻辑

人有病得治,系统有补丁也要打。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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值