行业资讯
📅 2026/8/13 11:40:36
Linux----系统安全
一、Sudo 权限管理1、多用户及禁止 root 用户登录多用户Linux 支持多用户同时登录日常业务禁止直接使用 root 账号登录服务器使用普通账号操作需要管理员权限再提权。禁止 root SSH 远程登录修改/etc/ssh/sshd_configPermitRootLogin no重启 sshd 服务systemctl restart sshdroot 本地控制台依旧可以登录只是拒绝 ssh 远程登录降低暴力破解风险。2、普通用户 sudo 提权sudo 主要用法sudo 命令 #以root身份执行命令sudo -i #切换到root环境sudo -l #查看当前用户拥有哪些sudo权限sudo -u 用户名 命令 #以指定用户执行命令visudo -c #手动检查 sudo 配置语法sudo -k #清除 sudo 密码缓存重新输入密码Defaults requiretty #强制 sudo 需要终端会话安全加固参数sudo 用户配置编辑工具visudo禁止 vim 直接编辑 /etc/sudoers自带语法校验 文件锁配置文件/etc/sudoers推荐片段配置/etc/sudoers.d/xxx示例# 用户 主机(身份) 允许执行命令mxr ALL(ALL) ALL# 免密sudomxr ALL(ALL) NOPASSWD: ALL基础语法用户/组 主机(执行身份) 授权命令列表%组名 #百分号代表用户组NOPASSWD: #免密sudo不需要输入用户自己密码!命令 #禁止执行该命令做权限拦命令必须写绝对路径使用which 命令查询路径。典型场景用户ALL(ALL) NOPASSWD:ALL免密拥有 root 全部权限。只给部分命令权限命令用逗号分隔不在列表内命令直接拒绝。群组授权%service组内全部用户继承 sudo 规则适合批量运维账号。提权拦截!/usr/bin/su, !/usr/bin/bash, !/usr/bin/sudo -i阻止普通用户 sudo 切换 root 交互式 shell。只读审计授权只授权查看类命令cat、ps、top不授权 rm/vim 等修改命令实现只能看不能改。su vs su -1、su 不加横杠只是切换用户身份环境还是原来用户的。举例子你现在是普通用户 mxr敲su root输密码变成 root。用户身份变成 root权限是 root但是当前工作目录不变还是在 mxr 的家目录环境变量、PATH、用户配置文件.bashrc/.profile不会加载 root 的简单讲换了身份没换 “登录环境”坑有些命令找不到PATH 不对容易出奇怪问题。2、su - 加横杠登录式切换完整模拟一次全新登录。身份切 root直接跳到 root 家目录/root完整加载 root 的全部环境变量、.bashrc、.profile相当于注销普通用户重新用 root 登录一遍✅工作中优先用 su -命令切换身份加载目标用户环境切换到家目录su root✅❌❌su - root✅✅✅3、严格的密码策略配置文件/etc/login.defs全局默认chage命令管理已有用户①新用户 password 有效期设置/etc/login.defs控制新建用户默认规则PASS_MAX_DAYS 90 #密码最大有效期90天 PASS_MIN_DAYS 7 #修改密码后至少7天才能再次改密码 PASS_MIN_LEN 8 #密码最小长度 PASS_WARN_AGE 14 #到期前14天提醒改密码②老用户 password 有效期修改chage 命令#查看用户密码时效 chage -l mxr #设置mxr密码最多90天有效期到期前14天告警 chage -M 90 -W 14 mxr③强制下次登录更改密码chage -d 0 mxr含义把上次改密码时间置 0用户下次登录系统必须修改密码否则无法使用。补充密码复杂度由 PAM 模块控制/etc/pam.d/system-auth设置密码必须大小写、数字、特殊符号。4、系统账号清理安全目的禁用闲置、系统账号防止无用账号被利用入侵服务器定期账号巡检。1、非登录用户设置系统账号如 daemon、bin 等不能登录系统把 shell 设置为不可登录禁止该账号交互式登录usermod -s /sbin/nologin 用户名usermod -s /bin/false 用户名2、锁定 / 解锁账号usermod 锁定账号锁整个账号账号直接失效usermod -L 用户名 #锁定整个账号禁止登录usermod -U 用户名 #解锁账号passwd 锁定密码仅锁定密码账号本身未锁passwd -l 用户名 #锁定用户密码密码不可用passwd -u 用户名 #解锁用户密码passwd -S 用户名 #查看用户密码状态显示PS锁定状态⚠️重点区分考试高频坑usermod -L锁账号在 /etc/shadow 密码字段加!账号无法登录。passwd -l锁密码shadow 密码字段加!!账号本身还在只是不能用密码登录。3、删除无用账户userdel 用户名 #只删除用户保留家目录userdel -r 用户名 #删除用户 同时删除宿主家目录、邮件文件推荐4、清空账号密码passwd -d 用户名简答记忆点系统服务账号shell 设置为/sbin/nologin禁止登录不影响服务运行。usermod‑L锁账号passwd‑l锁密码二者不一样。删除用户优先userdel -r防止残留家目录垃圾文件。passwd -d清空密码会变成无密码登录生产慎用。二、SSH 安全加固1、sshd 配置文件路径/etc/ssh/sshd_configPort 22022 #自定义ssh端口 PermitRootLogin no #禁止root远程登录 PubkeyAuthentication yes #开启密钥登录 PasswordAuthentication no #关闭密码登录 PermitEmptyPasswords no #禁止空密码 MaxAuthTries 3 #最大尝试登录次数 ClientAliveInterval 300 ClientAliveCountMax 0 #空闲5分钟自动断开 AllowUsers test admin #仅允许test、admin登录2、密钥登录流程对比密码登录密码登录是输密码密钥登录靠一对钥匙私钥放你电脑、公钥放服务器钥匙怎么来你自己本地电脑生成一对钥匙私钥好比你的家门钥匙自己揣好绝对不能泄露公钥好比挂在服务器门上的锁可以公开记住私钥在本地公钥传到服务器不要搞反私钥绝不外传。完整登录流程客户端你电脑要连服务器客户端手里有私钥服务器上保存着你的公钥~/.ssh/authorized_keys文件里服务器先给客户端发一段随机小暗号客户端拿自己的私钥把暗号加密发回给服务器服务器拿存好的你的公钥去解密这个消息✅解密成功证明你手里有配套私钥直接登录不用输密码❌解密失败密钥不对就会转回让你输密码登录比喻 服务器门上挂一把锁公钥。只有你手里有对应钥匙私钥。服务器扔给你一个小纸条你用你的钥匙锁起来还给它服务器拿门上的锁拆开纸条拆得开 钥匙是对的开门放行。实操步骤1、本地生成密钥对ssh‑keygen一路回车生成id_rsa(私钥)、id_rsa.pub(公钥)2、把公钥传到 Linux 服务器ssh-copy-id root192.168.184.130等价于把 id_rsa.pub 里面全部内容粘贴到服务器~/.ssh/authorized_keys配置校验sshd -t无输出代表配置无语法错误再执行systemctl restart sshd重启服务。3. 以后 ssh 连接就自动拿本地私钥去验证不用输密码4. 安全加固服务器配置/etc/ssh/sshd_config把密码登录关掉PasswordAuthentication no只允许密钥登录关键坑点1、不要把私钥传到服务器只传公钥2、服务器上.ssh文件夹、authorized_keys权限必须严格权限太大密钥登录直接失效chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys3、私钥文件本地也要保护不能随便给别人。私钥泄露 别人就能登录你的服务器。密码登录 vs 密钥登录密码登录服务器存密码你把密码发给服务器比对密码在网络传输容易被暴力破解密钥登录私钥从来不发送到网络上只发送加密后的暗号暴力破解几乎搞不动。三、SELinux 安全上下文SELinuxCentOS 内置强制访问控制安全系统给进程、文件打安全标签控制进程能访问哪些文件。1、SELinux 配置文件永久配置文件/etc/selinux/config# 三种模式SELINUXenforcing #强制模式拦截违规行为开启#SELINUXpermissive #宽容模式只记录日志不拦截#SELINUXdisabled #关闭SELinuxSELINUXTYPEtargeted⚠️ 修改这个文件需要重启系统才生效。2、查看当前 SELinux 模式getenforce #直接输出模式Enforcing / Permissive / Disabledsestatus #输出完整SELinux状态信息推荐3、设置 SELinux 工作模式临时设置重启失效不用重启机器setenforce 1 #设置为Enforcing 强制开启setenforce 0 #设置为Permissive 宽容模式仅告警不阻止❗setenforce不能设置 disabled 关闭状态关闭只能改配置文件 重启。永久关闭 / 修改修改/etc/selinux/config-------SELINUXdisabled 保存后必须重启服务器。四、SCP、hosts、主机名、IP 互通一、核心先搞懂 3 个基础概念1. IP 地址每台服务器 / 电脑在局域网 / 互联网里的门牌号比如192.168.1.100机器靠 IP 精准找到对方。2. 主机名hostname给机器起的外号比如服务器 A 叫web01、服务器 B 叫db02好记不用背一长串 IP。 查看本机主机名hostname临时改主机名重启失效hostname test01永久改hostnamectl set-hostname test013. /etc/hosts 文件重点本地静态通讯录作用自己手动写「主机名 ↔ IP」映射不用走 DNS 域名解析系统查域名优先读这个文件。 格式一行一条IP地址 主机名 别名 192.168.1.100 web01 192.168.1.101 db02修改文件vim /etc/hosts所有机器都要互相添加对方 IP 主机名才能直接用主机名 ping、ssh、scp 访问。验证是否生效ping web01二、SCP 命令服务器之间文件复制推送人话版1. SCP 是什么基于 SSH 加密的远程拷贝工具相当于两台 Linux 服务器之间安全拖拽文件 / 文件夹走 22 端口和 ssh 共用登录账号密码 / 密钥。2. 两种方向① 本地文件 → 推送到远程服务器推送语法scp 本地路径 远程用户名远程IP/主机名:远程存放路径例子 把本地/etc/hosts发给 web01 服务器 root 用户放到/etc/下scp /etc/hosts rootweb01:/etc/② 远程文件 → 下载到本地scp rootweb01:/etc/hosts ./.代表当前本地文件夹③ 拷贝整个文件夹 加-rscp -r /data rootdb02:/tmp/3. 常用参数人话解释-r递归复制传文件夹必须加-P 端口对方 SSH 改了非 22 端口用大写 P例scp -P 2222 file rootx.x.x.x:/tmp-v打印详细过程排错用4. 依赖前提必须满足否则报错两台机器 SSH 服务正常防火墙放行 22 端口知道对方账号密码或者配置了 SSH 密钥免密登录用主机名访问的话本机/etc/hosts已经写好对应 IP 映射三、完整实操流程一步到位打通 IP 主机名互通 scp 推送 hosts步骤 1查看两台机器 IP 和主机名机器 AIP 192.168.1.100hostnameserverA 机器 BIP 192.168.1.101hostnameserverB步骤 2分别修改两台机器的 /etc/hosts在 serverA 执行vim /etc/hosts # 添加一行 192.168.1.101 serverB在 serverB 执行vim /etc/hosts # 添加一行 192.168.1.100 serverA步骤 3测试连通性ping serverA ping serverB ssh rootserverB能 ping 通、能 ssh 登录说明 hosts 配置成功。步骤 4用 scp 把本机 hosts 批量推送给另一台scp /etc/hosts rootserverB:/etc/推送完成后两边 hosts 文件一致所有主机名互相解析都正常高频踩坑点scp 端口参数是大写 - P小写 - p 是保留文件权限时间别写错/etc/hosts 改完不用重启服务直接生效ping 测试即可拷贝文件夹不加-r会直接报错目标路径写/etc/带斜杠代表放进 etc 目录漏斜杠会变成重命名文件防火墙没开 22 端口、SELinux 拦截都会导致 scp 连接超时 / 拒绝访问。极简速记总结/etc/hosts 本机手写 IP - 主机名通讯录hostname 改服务器外号scp SSH 加密远程传文件scp 本地 远程用户主机名:路径推送互相写完 hosts就可以不用 IP直接用主机名 ssh、scp、ping 互通。