购入了一台阿里云的ESC服务器,之前都用CentOS感受Yum不怎么方便,此次选的Ubuntu16.04.7php
搭好服务以后作安全检查,发现Ubuntu16.04版本漏洞众多;虽然也没有涉及到16.04.7版本(这么说来阿里云给的镜像仍是能够的)但升级一下更安全一些;因而就有了今天这篇文章,作个总结。linux
我原来的内核版本git
首先,更新内核版本(4.4x内核有些许漏洞,见图)程序员
对于Ubuntu,须要去http://kernel.ubuntu.com/~kernel-ppa/mainline/选择合适的内核安装包github
注意:X86硬件架构64位操做系统应选择AMD64web
浏览器下载4个内核deb安装文件,并上传到服务器,或在服务器执行:docker
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9.10/amd64/linux-headers-5.9.10-050910-generic_5.9.10-050910.202011221708_amd64.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9.10/amd64/linux-headers-5.9.10-050910_5.9.10-050910.202011221708_all.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9.10/amd64/linux-image-unsigned-5.9.10-050910-generic_5.9.10-050910.202011221708_amd64.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9.10/amd64/linux-modules-5.9.10-050910-generic_5.9.10-050910.202011221708_amd64.deb
切换至root或使用sudoshell
sudo dpkg -i *.deb
update-grub reboot
uname -sr #查看内核版本
更新系统版本以前记得换软件源,若是软件源过慢或不稳定那将是一个大麻烦ubuntu
换源及apt-get经常使用命令参考:https://www.jianshu.com/p/a79ee7f59036vim
sudo apt-get update #更新安装源(Source)
apt-get dist-upgrade #更新已安装的软件包(识别并处理依赖关系的改变)
sudo update-manager -c -d
注:若是提示“update-manager”未安装,可使用“sudo apt-get install update-manager”安装
若是安装后仍然没法执行,提示“update-manager”服务没有运行,可使用“systemctl status update-manager”查看该服务状况,个人显示“找不到该服务的文件,该服务处于死的状态”;若是像我同样,尝试卸载该服务“sudo apt-get --purge autoremove update-manager”而后下一步
sudo do-release-upgrade -d #中间只要是停下来须要选择,一路选择Y便可 #更新以后查看系统版本 lsb_release -a
ps:(如以上方法无效)Ubuntu登陆用户时提供的一条命令,很稳定,按照向导更新很不错(推荐)。
#修改root密码(一是为了增长root密码强度,二是有些Ubuntu默认root没有密码,一直使用普通用户sudo在运行;建立root密码使root可登陆对下面的操做相当重要)
passwd root
#建立普通用户(用于禁用root远程登陆后本身登陆使用)
useradd 用户名
#修改该用户的密码,建立时默认没有密码(没有密码将没法登陆)
passwd 用户名
#在/home下建立该用户的家目录(有些Ubuntu在建立用户后,用户并无家目录)
mkdir /home/用户名
#修改该用户的默认bash(有些Ubuntu建立用户后bash也不是默认bash)
usermod -s /bin/bash 用户名
#禁用root远程登陆
vim /etc/ssh/sshd_config #将PermitRootLogin的值改成prohibit-password
保存重启服务器才能生效
vim /etc/sudoers
#注释掉:
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
%wheel ALL=(ALL) ALL
包括:“用户名 ALL=(ALL:ALL) ALL”等语句
服务器一旦被上传恶意文件并执行,就有可能被黑客得到控制权限,不管这个权限大小,为防止进一步提权或破坏服务器有必要阻止他
但防止上传恶意文件难度是巨大的,例如web网站容许上传用户头像(万一某我的上传了一个PHP呢?)尽管程序员会在网站源码里作防御,但PHP也有不少漏洞;何况百密必有一疏,例如php5.6版本就存在任意文件上传漏洞。通常网站源码可兼容的PHP版本是有限度的,无节制更新PHP版本也不太可能。以及web服务常常发生的xss攻击,服务器运行的各类docker和应用程序及手机app服务端;防御覆盖面广,难度大。
上传文件无非得到服务器控制权,反弹shell就是经常使用的一种;另外一种目的是损坏服务器,利用漏洞删除服务器数据、破坏服务正常运行 (能够经过更新内核版本防御)。
GitHub上有一个项目来实现这个功能
GitHub项目地址:https://github.com/zhanghaoyil/seesaw
具体使用还在研究中,本文章持续更新!