一些常用的Linux服务器管理上的建议,仅为个人经验和看法,虽然已经考到了RHCE(红帽认证工程师),但还是有很多东西要学习的。
本文主要针对直接暴露公网环境的机器的建议和经验,仅内网就无所谓了(学校内网除外,学校内网扫描抓包的人反而更多)。
一、操作的环境
- 有条件的情况下,请做到生产环境(正式对外提供服务的环境)和开发测试环境隔离!
((毕竟我把生产环境玩炸都不止一次了,更别提测试环境了。 - 虽然我没这么做,但我推荐使用如Docker/CGroup等容器化方案来部署你的环境,这些环境方便后期维护和打包迁移。
二、系统层面
- 选择长期支持版本作为生产环境,选择非长期支持版本/滚动更新版本作为测试或瞎折腾的环境。
- LTS版本的系统提供更长时间的支持,至少在有效期内你的系统层面包含的软件包所产生的BUG会有相应的团队及时做更新。
- 非LTS版本一般表示用于开发和测试用途,系统在这段期间可能会有所修改和调整,甚至大的软件包变更,相对LTS版本会有所不稳定,而且支持期更短。
- Ubuntu Server/CentOS/Debian 甚至Arch,使用哪个系统作为的发行版作为服务端的系统并没有什么不同,只是相对而言,Debian系(含Ubuntu)等其他发行版所包含的软件版本,会比RHEL系(CentOS类)所包含的软件版本要更新一些。
- 虽然旧即是稳定,但我想了想应该没人会期望在自己的生产环境上用漏洞百出的软件包。
- 但也不代表全新就是正义,大多数新版本软件包在投入生产环境使用之前经过一段时间的稳定性验证是非常必要的。
- 请定期关注Linux Kernel(Linux内核)的更新,Kernel漏洞导致的被肉鸡和被漏洞提权入侵事件还是层出不穷的。
三、维护方面
- Telnet/SSH远程连接
- 请坚持能用SSH就坚决不用Telnet的原则,Telnet不加密明文传输所有信息(包括root密码),SSH加密传输数据。
- 鉴于目前全世界24小时扫描爆破SSH 22端口爆破密码的肉鸡和行为很多,请及时修改SSH默认端口22为其他端口,不想修改也可以防火墙限制仅限你使用的某固定IP进行远程连接。
- 与其担心密码被爆破,也可以选择从根源解决问题,直接抛弃密码,直接强制使用SSH Key登录(密钥登录),一个再基本的密钥也比一个复杂的密码强114514倍。
- 对于身处中国大陆境内的用户,非常不建议使用SSH直连境外22端口,也不建议直接使用SSH协议从境外服务端向境内回传数据,因为某个懂得都懂但不可描述又众人皆知的东西。
- 配置自动更新
- 软件包每隔一段时间会有新版本发布来修正一些特定的问题和漏洞,因此除非你对某个版本的软件有特别的依赖,否则对于一个LTS系统而言,建议自动更新软件包以修正潜在的问题和漏洞。
- Ubuntu下有 unattended-upgrades 可以帮你做到,其他发行版应该也会有,懒得研究也可以直接 cron 计划任务定期自动更新。
- 请使用最小权限原则执行程序和脚本。
- 我知道很多人(包括我自己)都是很喜欢用root的最高权限直接去做一些事情的(遇事不决chmod777就是干然后上sudo)。
- 但是出于安全角度考虑依然建议使用特定账户运行特定脚本/程序,以做到最小权限原则。
- 为什么?参考服务器侧配置不当,多服务用户共享同一个user identity或者直接root跑导致其中一个服务被黑以后,其他同用户下的服务一同被窃取数据或篡改的类似事件。
- 我玩Linux这6年无数次遇到同学直接root跑自己写的各类服务(如PHP Page)为了简单代码没任何审核用户输入的策略直接就是执行直接就是往怼到数据库里且服务器又没防火墙,最后服务被入侵后来找我求援的事情(直接root都省的入侵者提权了,直接送了属于是)。
- 请关注系统的负载和资源使用。
- 在运行的程序在多少任务量和访问量的情况下,应该吃掉多少资源产生多少负载,作为开发或者运维应该需要有一个观念。
- 及时的监控告警可以帮你发现潜在的很多问题,比如服务的BUG。
四、数据。
- 备份!备份!备份!重要的事情说三遍!
- 请务必勤备份,即便你在使用云服务商等号称N份冗余备份的场景。
- 你永远不知道下一个被成功入侵或者机房硬件损坏导致的丢数据的事件是否发生在你身上,数据无价!
- 就算你懒得打包下载到本地或者上传到云盘备份,顺手在阿里云/华为云点个创建快照也不费事。
- 数据库一类的服务,请保持在仅能从内网或者本机自身访问。
- 即使你设置了114514个字符长度的密码也不要开放公网直接访问。
- 已经有过不少3306 (MySQL) 或者 27017 (MongoDB) 被扫描爆破导致数据全丢或被窃取泄露的血泪教训了。
- 大多数数据库软件和服务的验证授权,在默认配置下是明文鉴权,这意味着中间网络设备是可以看到你用于认证的用户名和密码,以及后面操作产生的数据的,MySQL等强烈建议配置SSL。
- 即便是测试环境一定要远程访问数据库,也建议通过加密隧道转发,并配置好访问策略(ACL)。
五、Linux初学者常见危险操作合集。
让我们来看看网络安全意识淡薄或者初学者是如何将 刚装好的Linux系统/刚买好的云服务器 简单几步就把其变成一个 肉鸡-Ready 机子的。
- 开局先关SELinux或者AppArmor,也不管到底有没有必要。
- 举个例子:SELinux的文件安全上下文有时能在被入侵的状态下拒绝掉入侵者的提权和访问文件内容。
- 接上一条,还有iptables nftable firewalld也一并关闭,也不管到底有没有必要。
- 到时候敏感/危险端口被入侵,怕是自己都不知道怎么回事。
- SSH直接登录root,或者登陆后一键su,无脑sudo其实也差不多。
- 常见症状是普通用户的home目录里一堆所有者为root的文件。
- SSH永远密码登录,且长期不改密码。
- SSH Key随便怎么生成出来的密钥都比你花半天时间想出来的密码要安全114514倍。
- 出现权限问题一概chmod 777 -R File(s)。
- 其实还有遇到过很多同学看到Permission Denied就直接上sudo跑,跟这也差不多了。
- 网上的代码一键复制粘贴,看也不看就是root/sudo wget -O – XXX | bash跑。
- 我知道我们不可能真正意义上的去审查每一行代码,但是至少要保证来源,以及仔细阅读说明,很多问题是由于没仔细阅读说明或使用了不明来源的代码,使用了不兼容的脚本/代码或者有后门的脚本/代码导致的。
- 有其他选项可选的时候,或自己会进行管理的时候,尽量不要使用一键脚本。
- 危险服务用默认配置,或者改配置的时候顺手把可访问来源0.0.0.0/0。
- 这里是指很多不需要绑定0.0.0.0/0的敏感服务,例如你本机跑服务用的数据库,现在真的很多同学数据库直接公开的(其实默认配置公开主要是考虑在内网环境使用,但你公网也公开就很不安全了)。
六、点!名!批!评!
- “BT服务器面板”:用FTP管理文件。
- 基于SSH的SFTP或者直接面板Web(via SSL)管理和传输文件不比FTP好几百倍?
- 且不说网络波动极其容易导致文件不完整和损坏的问题,也不说FTP不加密明文传输包括密码在内的一切的问题;FTP的问题在于它不保留权限等信息,然后大多数初学者和小白就会出现权限问题一概chmod 777 -R File(s)。
- 我所在的高校(SZIIT)以及中国大多数高校。
- SSL! SSL! SSL! HTTPS! HTTPS! HTTPS! ENCRYPT!
- 不是我说啥,身份信息、照片URL、电子校园卡消费记录,银行卡绑定,密码(含支付密码)这些东西涉及到了,还明文传输,真的大丈夫よ?
- 信息中心的老师就算你懒得续签证书然后配置更新证书,你自签名一个长期证书都比直接明文传输好吧?而且学校一堆Windows Internet Information Service (IIS)服务器,生成一个自签名也就鼠标点几下的事啊。
- 还有很多学校:配了,但好像又没配;几个服务配了,几个服务有没配,就算配了,一看一路从SSL2兼容到TLS1.2/1.3,还在兼容SSL2和SSL3有明显漏洞的协议套件就算了,预防降级攻击又不配置。
- 傻逼一样的信息填写。
- 用金山文档公开填写所有敏感信息是有什么大病?
- 一个公开的没有访问密码的文档包含全班乃至全二级学院的姓名、手机号、身份证、家庭住址;万一有人填写的时候设备有病毒呢?万一有别有用心的人下载整份表格卖给第三方公司或境外诈骗呢?
- 用问卷星的表单填写都比用这种公开且没有访问密码的文档填写好。
- 密码一概是身份证后6位且不强制初次登陆和定期更改密码。
- 结合第一条明文传输和第二条公开信息表格,你这个密码还不如没有。
- 教学中密码一概是123456。
- 就不怕学生开始用直接暴露公网的机子或者云服务器的时候也把root密码设置成123456了?就不怕出去工作了把企业的关键设备高权限账户密码设成123456了?
- 成了肉鸡就相当于用你的实名身份对外攻击了,要承担法律责任的。
- 设计缺陷。
- 不知道是不是外包公司的问题,大多数学校所用的Ticket交互在我看来其实本身就是缺陷比较明显的。
- 明文密码取MD5然后明文POST到服务器数据库核对,那么任何一个想搞大新闻的都可以试图抓到数据。
- 其次,大多数学校的服务的Ticket没有一个时间概念。简单来说,一个中间人只要抓到了一次所用的Ticket,那么后面这块内容只要原用户不改密码,那么这个Ticket永久有效。
- Ticket本身应该是作为一个鉴权标志,应当带有其时效性才对,不然那些网站和服务过几小时不活动就强制登出了是为了什么。
- 其实大多数学校要不是服务仅限内网访问且公网出口硬件防火墙挡着,不知道学校还是不是真的还笑得出来。
- 所以说学校在安全方面简直就是离谱。
- 我非常高兴的是学校在近些年敢于跟上信息时代,并且推广。然而我希望你们对学生的信息负点责任,谢谢。
- SSL! SSL! SSL! HTTPS! HTTPS! HTTPS! ENCRYPT!
七、最后说说极具争议的 “Linux用户的平均技术水平绝对超过Windows用户的平均技术水平”。
首先可以看看我在高二(2018年)写的这篇文章的内容,对于Linux用户(不含Android发行版)最直接的一点就是“用户知道自己想要什么,也明白自己在做什么,并且会为自己的行为负责“,并且Linux用户大多深度修改配置文件和定制自己所用的系统,这比起Windows用户懵懵的点击”重启并更新“不知道系统在干什么也不知道自己要更新什么,显然Linux用户的平均技术水平更高。
但是这种比较在这个问题下其实有一点点偷换概念,因为Linux的用户群相当大一部分是在直接暴露公网的环境下或云服务器环境使用,而Windows的用户群绝大多数是在本地内网使用,这两者的使用用途和技术目的和安全侧重点显然是完全不一样的。
所以,在职业领域(如Linux/Windows 专业运维)或安全领域,Linux用户群和Windows用户群真的是技术水平有差距吗?这就很难说了。
很多人评价Windows不安全,是因为它有太多的安全设置隐藏在层层界面里,并且Microsoft的印度阿三程序员写的代码BUG层出不穷,而用户往往也不会去配置和更改。那这句话也可以送给Linux用户,你真的能理解每一个服务奇怪的配置文件的安全相关的设置么,只不过这里没有统一的界面操作,而是各种看似无害的配置文件。

除去本段,本文共计4537字(WordPress区块编辑器统计),预计阅读时间5分钟。