Fedora 用户与权限:wheel、sudo 与密码策略
Fedora 的权限模型有两层容易混:文件权限(rwx)与 sudo 提权(谁能变成 root)。这两层与 SELinux 又是独立的,本节只讲前两层。
下面是 F45 上的实测。
先看当前用户是什么身份
Section titled “先看当前用户是什么身份”idgetent passwd labuseruid=1000(labuser) gid=1000(labuser) groups=1000(labuser),4(adm),10(wheel),190(systemd-journal)labuser:x:1000:1000:fedora Cloud User:/home/labuser:/bin/bashid 的输出里,10(wheel) 就是能 sudo 的关键。getent passwd 那行是七个冒号分隔字段:用户名、密码占位、UID、GID、注释、家目录、登录 shell。
wheel 组与 sudo
Section titled “wheel 组与 sudo”Fedora 默认让 wheel 组拥有 sudo 权限,规则在 /etc/sudoers:
sudo grep -nE "^(%wheel|Defaults)" /etc/sudoers | head -555:Defaults !visiblepw64:Defaults always_set_home65:Defaults match_group_by_gid73:Defaults always_query_group_plugin75:Defaults env_reset对应的授权行是 %wheel ALL=(ALL) ALL(部分镜像里被注释,用 # %wheel 形式给出备选)。改 sudoers 一律用 visudo,它会做语法检查;直接编辑出错会把 sudo 锁死。
自己的规则放 /etc/sudoers.d/,一文件一条:
sudo ls /etc/sudoers.d/90-cloud-init-userssudo tee /etc/sudoers.d/90-labadmin >/dev/null <<'EOF'labadmin ALL=(ALL) NOPASSWD:ALLEOFsudo chmod 440 /etc/sudoers.d/90-labadmin建一个能 sudo 的用户
Section titled “建一个能 sudo 的用户”sudo useradd -m -G wheel -s /bin/bash alicesudo passwd alice三个参数各有含义:
| 参数 | 作用 | 不写的后果 |
|---|---|---|
-m | 创建家目录 | 用户能登录但没有 ~ |
-G wheel | 加入 wheel 组 | 不能 sudo |
-s /bin/bash | 指定登录 shell | 取 /etc/default/useradd 里的默认值 |
Fedora 的默认值:
grep -E "^(SHELL|INACTIVE|CREATE_MAIL_SPOOL)" /etc/default/useraddgrep -E "^(UID_MIN|UID_MAX|PASS_MAX_DAYS|PASS_WARN_AGE)" /etc/login.defsSHELL=/bin/bashINACTIVE=-1CREATE_MAIL_SPOOL=yes
UID_MIN 1000UID_MAX 60000PASS_MAX_DAYS 99999PASS_WARN_AGE 7注意两个默认值:PASS_MAX_DAYS 99999 等于不过期,INACTIVE=-1 等于密码过期后账户也不锁。生产环境通常要收紧,见下一节。
追加组:别漏 -a
Section titled “追加组:别漏 -a”sudo usermod -aG wheel alice # 正确:追加sudo usermod -G wheel alice # 错误:会清空其他组-G 是”把附加组设成这些”,-aG 才是”追加”。漏掉 -a 会把用户在 adm、systemd-journal 等组的成员身份一并抹掉——这是权限问题里最隐蔽的一种。
验证:
id alicegetent group wheel密码老化与锁定
Section titled “密码老化与锁定”sudo chage -l alice # 看当前策略sudo chage -M 90 -W 7 -I 14 alice # 90 天过期、提前 7 天提醒、过期 14 天后锁定sudo passwd -l alice # 锁定账户sudo passwd -u alice # 解锁-I 14 补的正是 INACTIVE=-1 那个缺口:密码过期 14 天后自动锁账户。
查看锁定状态(passwd -S):
sudo passwd -S alicealice LK 2026-10-28 0 90 7 14 (Password locked.)第二个字段:P 正常、LK 已锁、NP 无密码。
sudo userdel -r alice # -r 连家目录与邮件一起删不带 -r 会留下家目录——下次建同名用户时 UID 可能不同,旧文件全变成”孤儿”,还会带来 SELinux 标签错乱。
几个容易忽略的点
Section titled “几个容易忽略的点”- 删用户前先看有没有进程在跑:
ps -u alice、loginctl list-sessions; sudo -l看自己能做什么,比猜快;sudo -i与sudo -s的区别:前者是登录 shell(读/etc/profile),后者保留当前环境;- SELinux 与用户的关系:
id输出末尾的context=unconfined_u:...是 SELinux 用户上下文,详见SELinux。