加密安全与时间同步
加密、安全与时间同步在这个网络安全事故频出的时代搞运维的不懂加密就像开车的不系安全带。今天这篇文章把加密、CA、SSH、sudo、Chrony 这些运维必备的安全技能用讲故事的方式串起来。前言安全这件事为啥要你管你可能想我就是个运维安全不是安全团队的事吗错。运维是系统安全的第一道防线。SSH 免密配不对 → 服务器被登录NTP 时间不准 → 证书验证失败业务挂了密码明文传输 → 被中间人一把梭sudo 配不好 → 普通用户搞瘫生产环境所以这节课学的不是安全理论而是你每天都要用的保命技能。一、密码学三兄弟对称、非对称、单向 对称加密 — 一把钥匙开一把锁原理加密用啥密钥解密也用啥密钥。明文 密钥 → 加密 → 密文 密文 密钥 → 解密 → 明文类比你和朋友共用一个保险箱谁手里都有那把钥匙。锁门开门都用同一把。常见算法DES、3DES、AES当前主流优点速度快适合加密大量数据缺点密钥怎么安全地交给对方这是个大问题——你不可能跟每个人都面对面交换钥匙。 非对称加密 — 公钥锁、私钥开核心密钥成对出现公钥公开私钥自留。两把钥匙两种玩法玩法操作保证什么类比公钥加密→私钥解密别人用你公钥加密你私钥解密数据机密性只有你能看邮箱口是公开的钥匙在你手里私钥加密→公钥解密你用私钥签名别人用公钥验证身份真实性确认是你发的你在合同上签了名谁都能对笔迹常见算法RSA、DSA、ECC致命伤速度慢。加密1MB数据比对称加密慢几个数量级所以一般不直接用来加密大数据。实际做法让非对称加密来保护对称密钥让对称密钥来保护数据。两个兄弟配合干活。 单向加密哈希 — 指纹识别特性任意长度输入固定长度输出改一个字符结果天翻地覆雪崩效应不可逆——你无法从指纹反推出原数据# 实战命令 md5sum /etc/fstab # 128位指纹 sha256sum /etc/fstab # 256位指纹更安全 sha512sum /etc/fstab # 512位指纹更更安全类比就像人的指纹——你可以从我手指取指纹但不可能从指纹还原出我整个人。只要数据被改了一丁点指纹就会大变。 三个兄弟联合作战综合加密流程既安全又能验明正身A 发数据给 B ① A 对原始数据计算哈希值 → 得到指纹 ② A 用自己的私钥加密这个指纹 → 得到数字签名 ③ A 生成一个临时对称密钥 → 加密数字签名原始数据 ④ A 用 B 的公钥加密这个对称密钥 → 发送出去【B公钥加密的对称密钥】【对称密钥加密的数据包】 B 收到后反向操作 ① B 用自己的私钥解密 → 得到对称密钥 ② 用对称密钥解密 → 得到数字签名原始数据 ③ 用 A 的公钥解密数字签名 → 得到原始哈希值 ④ 对原始数据重新算哈希 → 对比两个哈希值 ⑤ 一致 → 数据完整 身份确认这一套组合拳就是HTTPS 安全通信的底层逻辑。 DH 密钥交换在裸奔的网络上建立秘密Diffie-Hellman解决了一个看似不可能的问题两个人从没接触过如何在完全公开的信道上协商出一个只有他们俩知道的秘密核心是利用数学中的离散对数难题——就算三个数在公网上传输想从其中两个反推出第三个计算量大到无法实现。你现在每一次 HTTPS 访问背后都在发生 DH 交换。二、CA 证书互联网世界的身份证为啥需要 CA非对称加密有个死穴你怎么确定你手里那个公钥真的是对方的万一中间人把他自己的公钥塞给你呢这就是中间人攻击MITM——你以为是跟银行通信其实对面是个骗子他转发你的数据两头骗。CA证书颁发机构就是来解决这个问题的——它像公安局给服务器发身份证证书。自建 CA 实操手把手CA 的逻辑很简单找一个大家都信任的机构给服务器签名认证。# 第1步CA 自己先搞一套身份 openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048 # 第2步CA 自签名自己给自己发身份证 openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem \ -days 3650 -out /etc/pki/CA/cacert.pem # 会问国家(CN)、省份、城市、公司、部门、Common Name # 第3步服务端生成私钥和签名请求 openssl genrsa -out /data/test.key 2048 openssl req -new -key /data/test.key -out /data/test.csr # 第4步CA 给服务端签名 touch /etc/pki/CA/index.txt echo 0F /etc/pki/CA/serial openssl ca -in /data/test.csr -out /etc/pki/CA/certs/test.crt -days 100看证书信息openssl x509 -in test.crt -text -noout证书吊销开除如果服务器的私钥泄露了证书就得作废openssl ca -revoke /etc/pki/CA/certs/test.crt # 吊销 echo 01 /etc/pki/CA/crlnumber # 第一次需要 openssl ca -gencrl -out /etc/pki/CA/crl.pem # 生成吊销列表PEM vs CRT证书的包装问题格式长啥样特点PEMBase64文本-----BEGIN开头可包含证书、私钥、证书链CRTPEM 或 DER二进制纯X.509证书含公钥身份信息转换命令备忘# CRT → PEM openssl x509 -in cert.crt -outform PEM -out cert.pem # DER格式的CRT → PEM openssl x509 -inform DER -in cert.crt -outform PEM -out cert.pemHTTPS HTTP SSL/TLSTLS 握手简化版① 客户端说我来了我能用的加密方式有这些…… ② 服务端返回选好了这是我的证书你看看 ③ 客户端验证证书CA签名有效吗过期了吗域名对得上吗 ④ 密钥交换DH 走一波 ⑤ 开始加密通信一句话总结证书让你确认对面是真的加密让你和对面说的话别人听不懂。三、OpenSSL 工具箱日常运维够用的几条命令openssl genrsa -out my.key 2048 # 生成RSA私钥 openssl rsa -in my.key -pubout -out my.pub # 从私钥提取公钥 openssl req -new -key my.key -out my.csr # 生成证书签名请求 openssl x509 -in cert.crt -text -noout # 查看证书内容 echo -n hello | openssl base64 # Base64编码 echo -n aGVsbG8 | openssl base64 -d # Base64解码subj 参数速记CNCommon Name——域名或用户名最重要的字段OOrganization——公司/组织名四、SSH运维人的另一双手4.1 SSH 是啥说人话安全的远程登录工具。没有它你就得跑到机房插显示器键盘。默认端口TCP 22当前主流版本SSH2.0软件实现OpenSSHCentOS/Ubuntu默认安装4.2 SSH 通信原理能看懂就行① 客户端连过来 ② 服务端丢过来这是我公钥这是本次会话ID ③ 客户端生成一对临时密钥用完就扔不留文件 ④ 客户端用自己的临时公钥异或会话ID → 算出一个值用服务端公钥加密发过去 ⑤ 服务端用私钥解密 → 算出客户端的临时公钥 ⑥ 双方从此都知道对方的公钥后面的通信全部加密类比就像两方在公共场所对暗号——先互相确认身份然后再聊机密内容。4.3 远程登录# 基础操作 ssh root192.168.1.100 ssh -p 2222 root192.168.1.100 # 指定端口 ssh root192.168.1.100 hostname -I # 远程执行命令4.4 免密登录密钥认证— 运维必备为什么要配你写脚本批量管理几十台服务器每台都输密码神经病啊。流程理解即可① 本地生成密钥对ssh-keygen ② 把公钥复制到远程服务器ssh-copy-id ③ 以后登录服务器用公钥加密随机字符串客户端用私钥解密发回 ④ 匹配 → 放行实战ssh-keygen # 回车到底生成 ~/.ssh/id_rsa id_rsa.pub ssh-copy-id root10.0.0.13 # 传公钥到远端需要输入一次密码 ssh root10.0.0.13 # 以后直接进不用密码4.5 文件传输SCP — 临时传个文件# 本地→远程推 scp test.txt root10.0.0.13:/tmp/ # 远程→本地拉 scp root10.0.0.13:/tmp/test.txt ./ # 传目录加 -r scp -r /backup root10.0.0.13:/opt/rsync — 同步大杀器和 SCP 最大的区别rsync 只传差异部分。# 第一次全量传输 rsync -av /var/log/ root10.0.0.13:/backup/log/ # 第二次只传新增和变化的部分秒级完成 rsync -av /var/log/ root10.0.0.13:/backup/log/常用选项选项作用-a归档模式保留权限/时间等属性-v显示详细信息-z压缩传输--delete删除目标端多余的文件-n试运行不真的传先看看会有什么变化路径末尾的/是个大坑rsync -av /root/0525 /tmp/ # 复制 0525 目录本身 rsync -av /root/0525/ /tmp/ # 复制 0525 里的所有内容选型建议临时传一两个文件用 SCP频繁备份/同步用 rsync。4.6 sshpass — 给脚本里塞密码不推荐但有时候不得不用yum install sshpass # 安装 # 三种方式指定密码 sshpass -p 123456 ssh root10.0.0.13 hostname sshpass -f pwd.txt ssh root10.0.0.13 hostname export SSHPASS123456; sshpass -e ssh root10.0.0.13注意把密码明文写在命令行里不安全生产环境还是配密钥认证比较好。五、sudo给普通用户临时开个后门5.1 理念Linux 的安全原则是最小权限——平时用普通用户干活需要管理员权限时sudo临时借一下。5.2 配置文件visudo # 编辑 /etc/sudoers语法错了会提示不会让你锁死系统格式用户名|%组名 主机名(以谁的身份) 标签: 命令列表常见场景# ① 给 mage 全部root权限要输入密码 mage ALL(ALL) ALL # ② 给 mage 全部root权限不要密码 mage ALL(ALL) NOPASSWD: ALL # ③ 给 wheel 组所有用户root权限 %wheel ALL(ALL) ALL # ④ 只允许 mage 重启服务和系统 mage ALL(ALL) /usr/bin/systemctl, /usr/bin/reboot # ⑤ 允许 mage 以 sswang 的身份执行命令 mage ALL(sswang) ALL5.3 有效期默认 5 分钟不用重新输密码——5分钟后又要再输一次。可以用NOPASSWD:跳过这个限制。六、时间同步服务器时间的对表6.1 为啥时间这么重要你以为时间不准就是显示错了看看这些场景数据库两个节点时间差 30 秒 → 数据写入顺序错乱SSL 证书证书有效期的判断依据是本机时间 → 时间不对证书直接提示过期日志分析A 服务器说 10:00 出的事B 服务器说 10:05 → 根本没法排查Kerberos 认证时间差超过 5 分钟直接认证失败6.2 Chrony vs systemd-timesyncdChronysystemd-timesyncd定位全功能 NTP 实现轻量级 NTP 客户端精度高微秒级一般毫秒级能做 NTP 服务器✅ 可以❌ 只能当客户端适合谁服务器、集群环境桌面电脑、笔记本一句话生产环境用Chrony桌面环境用 timesyncd 够了。6.3 Chrony 实操# 配置文件/etc/chrony/chrony.conf # 配置上游时间服务器选一个离你近的 pool ntp.aliyun.com iburst maxsources 4 # 或 server ntp.aliyun.com iburst # 配置为本网段提供时间服务自建NTP服务器时 allow 10.0.0.0/24 # 离线时仍可提供时间服务 local stratum 10 # 重启并验证 systemctl restart chronyd.service chronyc sources # * 开头表示已同步 chronyc sourcestats源状态怎么看^* ntp.aliyun.com → * 已同步^ 是NTP服务器最佳状态 ^- xxx → 被排除但可用 ^? xxx → 没连上 ^x xxx → 出错了6.4 自建 NTP 时间服务器场景内网服务器不能上外网但所有机器时间必须一致。服务端能上外网的机器# /etc/chrony/chrony.conf server ntp.aliyun.com iburst allow 10.0.0.0/24 local stratum 10 systemctl restart chronyd.service客户端内网机器# Rocky vim /etc/chrony.conf # pool 2.rocky.pool.ntp.org iburst ← 注释掉 server 10.0.0.13 iburst ← 指向内网NTP服务器 # Ubuntu vim /etc/chrony/chrony.conf server 10.0.0.13 iburst systemctl restart chronyd.service chronyc -n sources七、常见安全攻击面试会用上搞运维不一定要会攻击但一定要知道攻击怎么发生的才能去防御。攻击类型通俗解释简单防御DDoS一群僵尸电脑同时访问你的网站把你带宽打满CDN、限流、WAFXSS跨站脚本在评论区写lt;scriptgt;alert(你被黑了)lt;/scriptgt;输入过滤、输出转义SQL注入登录框里输入 OR 11 --绕过密码参数化查询、过滤特殊字符中间人攻击骗子坐在你和银行中间两头传话两头骗HTTPS 证书验证暴力破解不断试密码直到蒙对限制登录次数、fail2ban会话劫持偷你的 Cookie 冒充你登录HTTPS、Session 绑定IP八、PAMLinux 认证的插件系统扩展了解8.1 概念PAMPluggable Authentication Modules——把认证这件事做成插件式。原本的 Linux 认证方式是硬编码的——每个程序自己管认证你要改就得改程序。PAM 把认证抽出来变成可配置的模块。8.2 配置格式配置文件/etc/pam.d/服务名如 sshd、login、sudo 模块文件/lib64/security/*.so四字段格式type control module-path arguments8.3 type模块类型type管什么auth你是谁密码对不对account你现在能不能用时间限制、账号过期password密码够不够复杂session登录后要干啥记录日志、设置资源限制8.4 control控制标志标志作用类比required必须通过不通过最终失败门禁卡指纹哪个不过都不行requisite必须通过不通过立即失败保安一看你没工牌直接拦下不等你刷卡sufficient通过了就放行你有 VIP 卡就直接进optional过不过无所谓顺手记个名字而已8.5 两个实用模块pam_nologin.sotouch /etc/nologin # 创建这个文件后普通用户无法登录root 除外pam_limits.so — 限制用户资源# /etc/security/limits.conf * soft nofile 1024 # 所有用户打开文件数软限制 * hard nproc 10 # 所有用户进程数硬限制 # 查看当前限制 ulimit -a ulimit -n 10240 # 临时修改结语这一章的内容看着散但其实有一条主线安全 加密 × 认证 × 授权 × 时间环节对应技术一句话加密对称/非对称/哈希让别人看不懂你的数据认证CA证书、SSH密钥证明你真的是你授权sudo给你钥匙也得告诉你哪个门能开时间Chrony大家戴同一块表不然对不上话以后你会发现加密原理、证书签发、SSH配置、时间同步——这些不是你学完就忘的理论课而是你每天排查问题、部署系统、写自动化脚本时反复用到的看家本领。动手建议拿两台虚拟机一台做 CA 服务器给另一台签发证书再配 SSH 免密 Chrony 时间同步一条龙走一遍比你背三遍笔记都管用。